レコード保存前に値を書き込み、ルックアップ後に保存実行

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を触って半年ぐらいですので、いつも勉強になります。