いつもお世話になっております。
どうしてもkintone.api周りの動きがうまく行かないため、こちらで質問をさせて頂きたく思います。
Javascript、kintone共に経験が浅く恐縮ですが、よろしければお力添えをお願いいたします。
■やりたいこと
アプリAにJavascriptを設定。
条件1・2・3でアプリBのレコード数を取得し、
それぞれをアプリAのフィールド1・2・3に反映したい。
■作成したソースの問題点
フィールド1・2・3に反映されるときとされないときがある。
(おそらくレコード取得のAPIの同期処理ができていないため?)
具体的な内容は下記添付のソース内に記述しました。
※kbns.forEach(function (kbn)を使用すると
1件目の「kintone.api(‘/k/v1/records’, 'GET’~」で処理が終わってしまうようなので使用しない処理にしています。
(※2021/1/18 functionの引数が間違っていたため修正しました)
(function () {
"use strict";
kintone.events.on([
'app.record.create.submit',
'app.record.edit.submit',
'app.record.index.edit.submit'
], function (event) {
var record = event.record;
//アプリBのID
var appIdJi = 1;
//追加条件
var q0 = '企業 = "' + event.record.企業.value + '"';
//区分の条件定義
var kbns = [
{ c:1, nm: "フィールド名_1号", cd: "条件1" },
{ c:2, nm: "フィールド名_2号", cd: "条件2" },
{ c:3, nm: "フィールド名_3号", cd: "条件3" }
];
return new kintone.Promise(function(resolve, reject) {
var kbn = kbns[0];
console.log(condWKbn(q0, new Array(kbn.cd)));
var params0 = setParam(q0, kbn, appIdJi)
var kbn1 = kbns[1];
console.log(condWKbn(q0, new Array(kbn1.cd)));
var params1 = setParam(q0, kbn1, appIdJi)
var kbn2 = kbns[2];
console.log(condWKbn(q0, new Array(kbn2.cd)));
var params2 = setParam(q0, kbn2, appIdJi)
kintone.api('/k/v1/records', 'GET', params0, function (resp) {
record.フィールド名_1号.value = resp.totalCount;
resolve(event);
});
kintone.api('/k/v1/records', 'GET', params1, function (resp) {
record.フィールド名_2号.value = resp.totalCount;
resolve(event);
});
kintone.api('/k/v1/records', 'GET', params2, function (resp) {
record.フィールド名_3号.value = resp.totalCount;
resolve(event);
});
});
});
kintone.events.on([
'app.record.create.show',
'app.record.edit.show',
'app.record.index.edit.show'
], function (event) {
var record = event.record;
record.フィールド名_1号.disabled = true;
record.フィールド名_2号.disabled = true;
record.フィールド名_3号.disabled = true;
return event;
});
//抽出条件
function condWKbn(q0, kbns) {
(抽出条件を作成)
}
function setParam(q0, kbn, appIdJi) {
var params = {
"app": appIdJi,
"query": condWKbn(q0, new Array(kbn.cd)),
"totalCount": true
};
return params;
}
})();