新規投稿
フォローする

kintoneのイベント内の非同期処理で取得した値をe.recordに設定する方法

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;
});

0

1件のコメント

Avatar
HANSA

T-y さん

ばっちり合っています!

 

イベントによっては Promise をサポートしており、return event できるイベントが存在します。
少しややこしいので、余裕のある時に以下の記事を読んでみてください!

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

0
ログインしてコメントを残してください。