新規投稿
フォローする

見積書自動採番(年初め又は4月に、001から開始)

自動採番で、下記のプログラムは役に立っていますが、年替わり、0001から開始したいのと依頼があり、別のプログラムでも試しましたが、上手く行きません。

何か良い方法があればご教授願いたく

https://cybozudev.zendesk.com/hc/ja/articles/202640930-%E8%87%AA%E5%8B%95%E6%8E%A1%E7%95%AA%E3%81%97%E3%81%A6-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B?_ga=2.62508462.32070349.1679879093-696949062.1676435743

 

年号で変化するとの情報はこちらです。

https://www.joyzo.co.jp/blog/259

 

(function () {
  "use strict";
   
  function createNo(event) {
    var maxNum = 0;       //見積番号の枝番の最大値
    var date = new Date();
    var year = date.getYear().toString().substr(1,2); //西暦の下2桁を取得する
    var month = date.getMonth() + 1;
    var day = date.getDay();
       
    // アプリIDを取得する
    var appId = kintone.app.getId();
 
    //最新の見積番号を取得するためのURLを生成
    var sch = year + "-";
    var tmpNo = 0;
    var query_string = 'no like "' + sch + '" order by no desc limit 1&fields[0]=no'  //見積番号の最大値を取得するクエリ
    var apiUrl = kintone.api.url('/k/v1/records') + '?app=' + appId + '&query=' + encodeURI(query_string);
   
    var xmlHttp;
    xmlHttp = getXmlHttp();
 
    // 同期リクエストを行う
    xmlHttp.open("GET", apiUrl, false);
    xmlHttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
    xmlHttp.send(null);
 
    if (xmlHttp.status == 200){
      if(window.JSON){
        var obj = JSON.parse(xmlHttp.responseText);
        if (obj.records[0] != null){
          tmpNo = obj.records[0]['見積番号'].value.split("-");  //見積番号を-で区切る(年度と見積番号を分ける)
          maxNum = parseInt(tmpNo[1]);    //最後の数字(枝番)を取得                    
          }else{
            maxNum = 0;  //データが存在しない = 新年度なので枝番を初期化
          }
           
          if (maxNum === null) {
            event.record['見積番号'].error = '見積番号が取得できませんでした';
            return event;
          } else {
            var num = parseInt(maxNum) + 1; //最新の見積番号を発番
            event.record['見積番号']['value'] = year + "-" + ('0000' + num).slice(-4); // 発番した見積番号を設定する
          }

          } else{
            event.record['見積番号'].error = xmlHttp.statusText;
          }
          } else{
            event.record['見積番号'].error = '見積番号取得に失敗しました。';
          }
       
          return event;
  }
   
  //xmlhttpオブジェクトを生成
  function getXmlHttp() {
    var xmlhttp = false;
   
    if(typeof ActiveXObject != "undefined"){  //IE
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        xmlhttp = false;
      }
    }
   
    if(!xmlhttp && typeof XMLHttpRequest != "undefined") {  //IE以外
      xmlhttp = new XMLHttpRequest();
    }
   
    return xmlhttp;
   
  }  
  // 新規作成画面から保存時のイベント
  kintone.events.on('app.record.create.submit', createNo);
})();
 
 
 
初歩的な件で恐縮です。
 
0

5件のコメント

Avatar
村濱一樹

https://cybozudev.zendesk.com/hc/ja/articles/4977994758297-kintone-JavaScript-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%BE%E3%81%A8%E3%82%81#check-the-network

エラー箇所は通信部分ということはわかってるので、
上記記事のようにネットワークタブから送信内容と受信内容をそれぞれ確認すると何かヒントがあるかもしれません。

1
Avatar
muto

村濱さんコメントありがとうございました。

javascript自体も初心者で苦戦していますが、ネットワークについては更に試行錯誤しています。

ネットワークの画面を確認したところこの様な画面?

console.log(result);もどこかにコードを足して確認も必要でしょうか

初歩的な質問で恐縮です。

0
Avatar
muto

0
Avatar
村濱一樹

ネットワークタブで確認してもらっている上記画像はkintoneが発している別の通信で、コードの件とは関係なさそうです。

また、触れてませんでしたがxmlhttprequestでの同期処理は非推奨になっております。
コード的にもわかりづらくいつ使えなくなるかわからないのでkintone.api()を使うのがいいかとおもいます。

async/awaitを利用すれば書きやすいと思います。

https://cybozudev.zendesk.com/hc/ja/articles/900001244323-%E7%9B%AE%E6%8C%87%E3%81%9B-JavaScript%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E4%B8%AD%E7%B4%9A%E8%80%85-%EF%BC%92-Promise%E3%81%AE%E3%81%8B%E3%82%8F%E3%82%8A%E3%81%ABasync-await%E7%B7%A8-#examples

0
Avatar
muto

村濱さん

アドバイスありがとうございました。

無事に完成しました。

1
サインインしてコメントを残してください。