kintoneのJavaScriptで以下のような処理を行おうと考えているのですが、
③の部分が処理されずに保存されてしまいます。
promiseの使い方はあっていると思うのですが、イベントレコードへの書き込みができません。
基本的なことで恐縮ですが、ご教示お願いします。。。
①レコード保存前イベントで、
②GET APIで他アプリから値を取得し、
③イベントレコードに値を書き込み、ルックアップを行い、
④レコードを保存する
-----JavaScriptここから-----
(function() {
“use strict”;
kintone.events.on([
‘app.record.create.submit’,
‘app.record.edit.submit’,
], function(event) {
var record = event.record;
var ID = record[‘ID’][‘value’];
return new kintone.Promise(function(resolve, reject) {
var params_GET = {
‘app’: ‘XXX’,
‘query’: ‘ID = "’ + ID + '" limit 500 ’
};
kintone.api(‘/k/v1/records’, ‘GET’, params_GET, function(resp_GET) {
resolve(resp\_GET);
},function(error_GET){
resolve(event);
});
}).then(function(result_resp_GET) {
if (!result_resp_GET[‘records’].length) {
}else if(result\_resp\_GET['records'].length === 1){
----動いてほしい部分ここから-----
record[‘lookup_field’][‘value’] = result_resp_GET[‘records’][0][‘XXX_ID’][‘value’];
record['lookup\_field']['lookup'] = true;
----動いてほしい部分ここまで-----
}
return event;
});
});
})();
Yuto Kawai さん
エラーになっているか、または取得レコードが複数になっているかだと思います。
動かない?そんな時はデバッグをしてみよう!入門編 をみて、デバックしてみてください。
ステップ実行すると、API 応答結果や変数の内容も確認できます。
あと、参考に「kintone.apiのコールバックを省略すると、kintone.Promiseオブジェクトを返す」をつかうと、もう少しわかりやく記述できます。
下記は、切り貼りしただけで未検証です。
(function() {
"use strict";
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
var record = event.record;
var ID = record['ID']['value'];
var params_GET = {
'app': 'XXX',
'query': 'ID = "' + ID + '" limit 2'
};
return kintone.api('/k/v1/records', 'GET', params_GET).then(function(resp) {
if (resp['records'].length === 1) {
// -- --動いてほしい部分ここから-- -- -
record['lookup_field']['value'] = resp['records'][0]['XXX_ID']['value'];
record['lookup_field']['lookup'] = true;
// -- --動いてほしい部分ここまで-- -- -
}
return event;
}).catch(function(error) {
console.log('records get error', error);
event.error = 'records get error';
return event;
});
});
})();
rex0220さん
お世話になります。コメントありがとうございます。
検証してみたのですが、GETで取得できているレコードは1件のみでした。
文字列フィールドには値が書き込みできるので、ルックアップフィールドが原因だと思い調べてみた結果、https://developer.cybozu.io/hc/ja/articles/202166270#step4 に
「レコード保存前イベントでは、ルックアップフィールドには書き込みができません」とちゃんと書いてありました。
調べ方が不足しておりまして失礼しました。
コールバック関数の省略も教えていただいてありがとうございます。
こちらの書き方のほうがコードも読みやすいですし、予期せぬerrorもキャッチできるのでよいですね!
まだkintoneを触って半年ぐらいですので、いつも勉強になります。