データ表示がうまくできない

いつもお世話になっております。

長文失礼致します。

Aアプリ内で社員番号を入れた際に社員アプリから氏名の取得をしてAアプリの氏名欄にデータ表示し、

同時に、作業アプリから関連するデータを取得してAアプリ内のサブテーブルにデータ表示したいと考えています。

コードを作成して表示しているのですが、

コンソールで確認するとデータは取得できているのですが、一部表示がされません。どうしたら全部表示されるでしょうか?

下記、作成してみたコードの一部です。

kintone.events.on(‘app.record.create.change.社員番号’,function(event){

……

var param1 = {

社員アプリ

}

var param2 = {

作業アプリ

}

kintone.api(‘/k/v1records’,‘GET’,param1,function(resp1){

//社員アプリから取得

     var record = kintone.app.record.get();

  record[‘record’][‘氏名’][‘value’] = resp1[‘records’][0][‘氏名’][‘value’]

  kintone.app.record.set(record);

},function(resp1){

     …

});

kintone.api(‘/k/v1records’,‘GET’,param2,function(resp2){

if (resp2.records.length > 0) {

//作業アプリから取得

……

for (var i=0; i < resp2.records.length ; i++) {

subList[i].value[‘作業ID’].value = resp2.records[i][‘作業ID’].value;

if (i+1 < resp2.records.length) {
            subList.push(newRow);
            subList[i+1].value[‘作業ID’].disabled = true;

……

}

}

kintone.app.record.set({ record: record });

}

},function(resp2) {

 ……

});

return event;

});

})();

困っているのは①作業アプリ内にデータがないときは氏名は入力されるのですが、作業アプリにデータがあるときは表示がされないこと、②作業ID,受注IDが1行目しかデータが表示されないこと(他のデータは全行表示されます)、③非表示処理で作業IDだけ2行目以降非表示にならないことです。(他の非表示は反応しています)

データは取得できているのに何が原因でしょうか?

ご教授願います。

 

kanafuki さん

更新処理の実行タイミングの問題だと思います。

kintone.api は、非同期処理ですので社員アプリと作業アプリの GET は同時に処理されます。

API のどちらが先に応答されるかは、サーバー側のタイミングによりますので不確定です。

社員アプリAPI完了後に、作業アプリAPI処理を行うようにしてみてください。

こんにちは。複雑な処理の事例、参考になります。

今回のケースでは、Promiseを使って処理をするのが良いかと思います。

こんな感じに書くとよろしいかと。

let PromiseA = new kintone.Promise(function(resolve, reject) { 社員アプリのGETの処理 });

let PromiseB = new kintone.Promise(function(resolve, reject) { 作業アプリのGETの処理 });

kintone.Promise.all([PromiseA, PromiseB]).then(function(results) {

Aアプリにデータをセットする処理

}).catch(function(error) {
console.error(error);
});

この辺りに詳しく載っていますが、

https://www.joyzo.co.jp/blog/2021
https://www.joyzo.co.jp/blog/2433

注意する点は、
changeイベントでは kintone.app.record.get() したオブジェクトに対して、kintone.app.record.set(obj)した後に
return event しない点です。

 

rex0220様

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

kintone.apiが非同期処理だということが勉強不足で知らず、

今回で学ばせていただきました。

順番に処理がいくよう試行錯誤してみます。

Kazuhiro Yoshida様

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

Promise処理を学ばさせていただきました。

リンクもわかりやすく感謝です。

 

セットをする処理ですが、氏名はkintone.app.record.set(obj)にて表示ができました。

ただサブテーブルの方はセットの処理がよくわからず苦戦中です。

kintone.app.record.set({obj:obj})?

試行錯誤します。

こんにちは。

サブテーブルの更新処理はなかなか難しいですね。

私はこちらを参考にサブテーブルのレイアウトを確認して、

https://developer.cybozu.io/hc/ja/articles/202166330

後はデバッグしながら試行錯誤しています。

上手く行きましたら、ぜひ成果を共有いただけると助かります!