表題の通りです。
アプリ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
}
);
});
})()
で想定通り動かすことができました。
ありがとうございます。
system
(system)
Closed
4
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。