保存実行前イベントで、他アプリから値を取得してセットしたい

表題の通りです。

アプリAとアプリBに文字列1と文字列2があり、

アプリAのレコードを登録する(保存ボタンを押す)際に、アプリBの値を取得

アプリAの文字列1とアプリBの文字列1が同じ場合、アプリBの文字列2をアプリAの文字列2にセット

といった処理が組みたいのですが、うまくいきません。

保存ボタンを押すと、一瞬だけ取得した値が入っているように見えますが、

一覧画面や詳細画面に移ると空のままです。

どうか知恵をお貸しいただけると助かります。

(() => {
'use strict';
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], event=> {
var AppBId = 2;
return kintone.api(
kintone.api.url('/k/v1/records', true),
'GET', {
app:AppBId,
query:'文字列1 = ' + event.record['文字列1'].value,
totalCount:true
}, function (resp) {
if (resp.totalCount > 0) {
var abbB_data = resp.records[0]; // アプリBの情報をセット
var appA_disp = kintone.app.record.get();
appA_disp.record.文字列2.value = abbB_data.文字列2.value;
}
return event
}, function (error) {
console.log(error);
return event
}
);
});
})()

まず、クエリの指定方法が違います。一瞬だけ見えているものは、このエラーメッセージかと思います。

        query:'文字列1 = ' + event.record['文字列1'].value,

      query:'文字列1 = "' + event.record['文字列1'].value + '"',

フィールドと比較する値をダブルクォーテーションで囲む必要があります。

 

次に、Promiseを使用する今回の処理では、レコード取得のSuccessCallbackでkintone.app.record.get()を使用した処理ではなく、then()で繋いで、event.recordを編集する形で変更する必要があります。

このあたりの記事が参考になるかと思います。

mls-hashimoto

ありがとうございます。

(() => {
'use strict';
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], event=> {
var AppBId = 2; // 取得するアプリID
return kintone.api(
kintone.api.url('/k/v1/records', true),
'GET', {
app: AppBId,
query: '文字列1 = "' + event.record['文字列1'].value + '"', // 入力した文字列1と同じレコードのみ取得
totalCount: true
}).then(function (resp) {
if (resp.totalCount > 0) {
var abbB_data = resp.records[0]; // 上記で絞り込んだアプリBの情報をセット
var record = event.record;
record.文字列2.value = abbB_data.文字列2.value;
}
return event
}, function (error) {
console.log(error);
return event
}
);
});
})()

 

で想定通り動かすことができました。

ありがとうございます。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。