新規投稿
フォローする

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

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

2件のコメント

Avatar
rex0220

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;
}); 
});
})();
1
Avatar
Yuto Kawai
rex0220さん
 
お世話になります。コメントありがとうございます。
 
検証してみたのですが、GETで取得できているレコードは1件のみでした。
 
文字列フィールドには値が書き込みできるので、ルックアップフィールドが原因だと思い調べてみた結果、https://developer.cybozu.io/hc/ja/articles/202166270#step4 に
「レコード保存前イベントでは、ルックアップフィールドには書き込みができません」とちゃんと書いてありました。
 
調べ方が不足しておりまして失礼しました。
 
 
コールバック関数の省略も教えていただいてありがとうございます。
こちらの書き方のほうがコードも読みやすいですし、予期せぬerrorもキャッチできるのでよいですね!
まだkintoneを触って半年ぐらいですので、いつも勉強になります。
0
サインインしてコメントを残してください。