自動採番と再利用ボタンの連携について

下記のようなJsで、ログイン時本人コードIDと日付を連携させ見積NO を設定しています。見積内容が同じ場合に右上の再利用ボタンを使って入力手間を省こうとしていますが、自動採番ができずに困っています。

アドバイスよろしくお願いいたします。

 (function() {
    “use strict”;

 // 登録・編集・詳細表示イベント
 var events = [‘app.record.create.show’,‘app.record.edit.show’,‘app.record.detail.show’];
 kintone.events.on(events, function (event) {
  var record = event.record;

  return event;

 });

 // 編集イベント
 var events = [‘app.record.edit.show’];
 kintone.events.on(events, function (event) {
  var record = event.record;
 
  return event;

 });

 // 登録イベント
 var events = [‘app.record.create.show’];
 kintone.events.on(events, function (event) {
  var record = event.record;

  //当日日付を取得
  var date = new Date();
  var strYear = date.getFullYear().toString().slice(-2); //西暦の下2桁
  var month = date.getMonth() + 1;
        var strMonth = month.toString();
  // var strDay = date.getDate().toString();

  if (strMonth.length == 1) {
   strMonth = “0” + strMonth;
  }

  var StrDate = strYear + strMonth;

  // 自アプリID
  var myAppID = 000;
   // ユーザーマスタアプリID
  var userMstAppID = 00;

  // ログインユーザ情報を取得
  var user = kintone.getLoginUser();

  // 担当者の当月発行枚数取得クエリ
   //var query2 = ‘見積NO like "’ + StrDate + userEngCode + ‘"’;
        var query2  = ‘見積NO_記号 = "’ + StrDate + user.code + ‘" order by 見積NO desc limit 1’;
   // 自身が当日発行した帳票枚数を取得
          var appUrl2 = kintone.api.url(‘/k/v1/records’) + ‘?app=’+ myAppID + ‘&query=’ + encodeURIComponent(query2);
   var xmlHttp2 = new XMLHttpRequest();
   xmlHttp2.open(“GET”, appUrl2, false);
   xmlHttp2.setRequestHeader(‘X-Requested-With’,‘XMLHttpRequest’);
  //キャッシュ対策(常にレスポンスが取得できる状態にする)
  xmlHttp2.setRequestHeader(‘If-Modified-Since’,‘Thu, 01 Jun 1970 00:00:00 GMT’);
   xmlHttp2.send(null);

  if (xmlHttp2.status == 200){
   //レスポンスのレコードを取得
   var records2 = JSON.parse(xmlHttp2.responseText).records;

   // 対象レコードがあった場合(カウントアップ)
   if(records2.length > 0){
    var mitsumoriNO = records2[0][‘見積NO’].value;
    
    var intCount = parseInt(mitsumoriNO.slice(-2),10) + 1;
    
    var recCount = intCount.toString();
    if (recCount.length == 1) {
     recCount = “00” + recCount;
    } else if (recCount.length == 2) {
     recCount = “0” + recCount;
    }
    record[‘見積NO’].value = StrDate + user.code + recCount;
    record[‘見積NO_記号’].value = StrDate + user.code;

   // 対象レコードがなかった場合(1枚目)
   }else{
    record[‘見積NO’].value = StrDate + user.code + “001”;
    record[‘見積NO_記号’].value = StrDate + user.code;
   }

   var tableRecords = event.record.見積テーブル.value;
   tableRecords[0].value[‘見積書NO_見積’].value = record[‘見積NO’].value + “-01”;

  }else{
   alert(“レコードの取得でエラーが発生しました。- error:”+xmlHttp2.status);
   return event;
  }

  //見積NOは入力不可
  record[‘見積NO’].disabled = true;
  return event;

 });

})();

工藤さん

レコードの一括取得(クエリで条件を指定)には、下記の注意事項があります。

※クエリで文字列検索する場合は単語検索となります。詳しくは「検索キーワードに関する注意」を参照ください。

この制約により、対象レコードを取得できません。

ご希望の自動採番を行うには、見積NOとは別に検索用項目として「StrDate + user.code」を追加してはいかがですか?

あと気になった点としては、XMLHttpRequest を使うより、

「kintone REST APIをkintone JavaScript APIから利用する方法」が簡単に記述できると思います。

第10回 kintone REST APIを利用したレコード取得

 

rex0220様

ご連絡ありがとうございます。お話が抽象的すぎて理解ができないのですが、 編集イベント var events = [‘app.record.edit.show’];の追加で再利用を(reuseと思いセットしてみましたが動きませんでした)対象にしたJsを追記するようなことでは難しいのでしょうか。

ご教示よろしくお願いいたします。

>編集イベント var events = [‘app.record.edit.show’];の追加で再利用を(reuseと思いセットしてみましたが動きませんでした)対象にしたJsを追記するようなことでは難しいのでしょうか。

kintone API の仕様により、出来ません。

単語検索は、分かりにくい仕様ですので、例を上げますね。

例えば、2018/05 ユーザUUUU で 1805UUUU001 の見積NOを登録済みとします。

「見積NO like “1805UUUU”」 のクエリで、1805UUUU001 のレコードを取得することはできません。

対応案としては、

・検索用項目を追加して、「1805UUUU」を設定するようにします。

・クエリ「検索用項目 = “1805UUUU”」で検索して、1805UUUU001 のレコードを取得

 

参考 検索キーワード入力時の注意事項 抜粋

英数字で検索する場合
アルファベットの大文字と小文字、および全角と半角は区別されません。
単語単位で検索されます。
例:
値が「cybozu kintone2」のフィールドを検索するには、「cybozu」または「kintone2」をキーワードとして指定します。「cy」や「kintone」など部分一致する検索キーワードでは検索されません。

なお、「_(アンダーバー)」と「#(シャープ)」は、全角、半角共に単語の一部とみなされます。
例:
値が「cybozu_kintone」のフィールドを検索するには、「cybozu_kintone」をひとまとまりでキーワードとして入力します。「cybozu」や「kintone」のみを入力しても検索されません。

ご教示ありがとうございます。

ベンダー作成Jsに少し手を加えれば対応できるものと考えて投稿しましたが、ご教示内容が高度すぎて今の私では対応できません。

>kintone API の仕様により、出来ません。

ということがわかっただけでもありがたく、ありがとうございました。