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

**URL:** <https://community.cybozu.dev/t/topic/518>\
**Category:** kintone 開発相談\
**Created:** [2017 年 9 月 1 日午前 9:01 UTC](https://community.cybozu.dev/t/topic/518 "2017-09-01T09:01:46Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1549](https://avatars.discourse-cdn.com/v4/letter/l/fbc32d/32.png) [@Legacy\_Account1549](https://community.cybozu.dev/u/Legacy_Account1549)\
**Post date:** [2017 年 9 月 1 日午前 9:01 UTC](https://community.cybozu.dev/t/topic/518/1 "2017-09-01T09:01:46Z")

</div>

kintoneのJavaScriptで以下のような処理を行おうと考えているのですが、

③の部分が処理されずに保存されてしまいます。

promiseの使い方はあっていると思うのですが、イベントレコードへの書き込みができません。

&nbsp;

基本的なことで恐縮ですが、ご教示お願いします。。。

&nbsp;

①レコード保存前イベントで、

②GET APIで他アプリから値を取得し、

③イベントレコードに値を書き込み、ルックアップを行い、

④レコードを保存する

&nbsp;

&nbsp;

-----JavaScriptここから-----

&nbsp;

(function() {

&nbsp;

&nbsp;&nbsp;&nbsp; “use strict”;

kintone.events.on([  
‘app.record.create.submit’,  
‘app.record.edit.submit’,  
], function(event) {

&nbsp;

var record = event.record;  
var ID = record[‘ID’][‘value’];

&nbsp;

return new kintone.Promise(function(resolve, reject) {

&nbsp;

&nbsp; var params\_GET = {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘app’: ‘XXX’,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘query’: ‘ID = "’ + ID + '" limit 500 ’  
&nbsp; };

kintone.api(‘/k/v1/records’, ‘GET’, params\_GET, function(resp\_GET) {

&nbsp;

```
resolve(resp\_GET);

```

&nbsp;

},function(error\_GET){

&nbsp;

```
resolve(event);

```

&nbsp;

});

&nbsp;

}).then(function(result\_resp\_GET) {

&nbsp;

&nbsp; &nbsp; if (!result\_resp\_GET[‘records’].length) {

&nbsp;

```
}else if(result\_resp\_GET['records'].length === 1){

```

&nbsp;

```
----動いてほしい部分ここから-----

```

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; record[‘lookup\_field’][‘value’] = result\_resp\_GET[‘records’][0][‘XXX\_ID’][‘value’];

```
record['lookup\_field']['lookup'] = true;

----動いてほしい部分ここまで-----

```

&nbsp;

```
}

```

&nbsp;

return event;

&nbsp;

});

&nbsp;

});

})();

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1517](https://avatars.discourse-cdn.com/v4/letter/l/4bbf92/32.png) [@Legacy\_Account1517](https://community.cybozu.dev/u/Legacy_Account1517)\
**Post date:** [2017 年 9 月 2 日午前 2:21 UTC](https://community.cybozu.dev/t/topic/518/2 "2017-09-02T02:21:24Z")

</div>

Yuto Kawai さん

エラーになっているか、または取得レコードが複数になっているかだと思います。

[動かない？そんな時はデバッグをしてみよう！入門編](https://community.cybozu.dev/hc/ja/articles/207613916) をみて、デバックしてみてください。

ステップ実行すると、API 応答結果や変数の内容も確認できます。

あと、参考に「kintone.apiのコールバックを省略すると、kintone.Promiseオブジェクトを返す」をつかうと、もう少しわかりやく記述できます。

下記は、切り貼りしただけで未検証です。

&nbsp;

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

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1549](https://avatars.discourse-cdn.com/v4/letter/l/fbc32d/32.png) [@Legacy\_Account1549](https://community.cybozu.dev/u/Legacy_Account1549)\
**Post date:** [2017 年 9 月 4 日午前 6:12 UTC](https://community.cybozu.dev/t/topic/518/3 "2017-09-04T06:12:04Z")

</div>

rex0220さん

&nbsp;

お世話になります。コメントありがとうございます。

&nbsp;

検証してみたのですが、GETで取得できているレコードは1件のみでした。

&nbsp;

文字列フィールドには値が書き込みできるので、ルックアップフィールドが原因だと思い調べてみた結果、[https://developer.cybozu.io/hc/ja/articles/202166270#step4](https://developer.cybozu.io/hc/ja/articles/202166270#step4) に  
「レコード保存前イベントでは、ルックアップフィールドには書き込みができません」とちゃんと書いてありました。

&nbsp;

調べ方が不足しておりまして失礼しました。

&nbsp;

&nbsp;

コールバック関数の省略も教えていただいてありがとうございます。

こちらの書き方のほうがコードも読みやすいですし、予期せぬerrorもキャッチできるのでよいですね！

まだkintoneを触って半年ぐらいですので、いつも勉強になります。
