create.showイベントを複数発火させる場合の処理について

お世話になります。

|

create.showイベントを複数発火させレコード値を書き換えるとき、変更が上書きされないようにしたいのですが、下記方法で問題ないでしょうか。

1.「レコードを再利用する」ボタンをクリックしてcreate.showイベントを発火させる

2.最初の処理でkintone.record.set()を使い、レコードの値を書きかえる(kintone.Promiseを使用しています)。

3.次の処理でkintone.record.get()でレコード情報を取得し、2の処理が反映されていれば処理を実行する(反映されていなければ、反映されるまで待つ)。

(2の処理は全体に適用するJS、3の処理はアプリ個別で適用するJSで処理を行います)

 

他に良い回避策があればご教示願います。

 

 

 

 

|

 

shinohara-k様

お世話になっております。
トヨクモの江田と申します。

私でしたら,Promiseのthen()メソッドを利用します.
処理1のkintone.record.set()が完了後,resolve()して処理2を行うようにします.

new kintone.Promise(function(resolve) {
  kintone.events.on([
    'app.record.create.show',
  ], function(event){
    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
      app: kintone.app.getId(),
    }).then(function(response){
      //処理1.....
      kintone.record.set(record);
      resolve();
    });
  });
}).then(function(){
  //処理2.....
})

江田様

回答ありがとうございます。

すみません、提供する情報が足りておりませんでした。

2の処理はアプリ全体に適用するJSで、3の処理はアプリ個別に適用するJSなのです。

同じソース内であれば江田様の方法が良いと思います。

 

他に良い方法あはありますでしょうか。または最初に提示した処理方法で問題ないでしょうか。

 

 

shinohara-k様

お世話になっております。

ファイルを分ける場合は下記のようになります.

window.firstProcess = function(){
  return new kintone.Promise(function(resolve) {
    kintone.events.on([
      'app.record.create.show',
    ], function(event){
      kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
        app: kintone.app.getId(),
      }).then(function(response){
        //処理1.....
        kintone.record.set(record);
        resolve();
      });
    });
  });
}

window.firstProcess().then(function(){
  //処理2.....
});

江田様

ありがとうございます。

 

私が最初に提示した処理方法が問題ないかはわかるでしょうか?

すみませんが宜しくお願い致します

 

shinohara-k様

お世話になっております。

3番の「反映されていなければ、反映されるまで待つ」というのは,setIntervalで実装しているということでしょうか?

特段問題はないかと思いますが,「レコード情報を見比べて完了を判断」,「判断する処理を何度か繰り返す」ということを考えると,Promiseを用いた方が記述および処理が簡単になるかと思います.

江田様

ありがとうございます。

またよろしくお願い致します。