kintoneのイベント内で非同期処理を実行し、その結果をレコードに反映したいです。
通常はe.record[フィールドコード].valueを書き換えてreturn e;したら値は変わりますが、非同期処理で取得した値を設定しようとするとうまく設定できません。
以下のやり方で一応できたのですが、あっていますか?
kintone.app.record.get()/set()は本来イベント処理の中では実行できないので、イベント処理が終わる前に非同期処理が終わった場合など、タイミングによってエラーにならないか心配です。
let newEvents = [
"app.record.create.show",
"mobile.app.record.create.show"
];
kintone.events.on(newEvents, function (e) {
let param = {
app: 10,
filelds: ["住所"],
query: "社員名 in (LOGINUSER())"
};
// 別アプリから住所を取得する
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', param, function (resp) {
// 非同期処理だと以下の処理が使えない!
//e.record["住所"].value = resp.records["住所"].value;
//return e;
// なので、以下のやり方でやる。
// 現在のレコードを取得
let records = kintone.app.record.get();
// nullだったらモバイルビューと判定
let isMobile = records === null;
// mobile用のレコード取得関数を呼ぶ
if (isMobile) records = kintone.mobile.app.record.get();
// APIから取ってきた値を設定
records.record["住所"].value = resp.records["住所"].value;
// 取得した内容を反映する
if (isMobile){
kintone.mobile.app.record.set(records);
}else{
kintone.app.record.set(records);
}
}, function (error) {
console.log(error);
});
return e;
});