Kintone APIで取得したレコードをフィールドに表示

プログラミング初心者です。

アプリA(マスター)からアプリBへデータを取得し特定のNumberフィールドに表示したいのですが、データ取得は出来るもののNumberフィールドに入れるところで煮詰まっております。下記のコードでどこが悪いのかご教授いただけますと幸いです。初歩的な質問とは思いますが、よろしくお願い申し上げます。

(function() {
‘use strict’;

var eventHandle = [‘app.record.edit.change.Number’,
‘app.record.create.change.Number’,
‘app.record.edit.change.dropdown’,
‘app.record.create.change.dropdown’];

kintone.events.on(eventHandle, function(event) {

let productId = event.record.Number.value;
let supplyCountry = event.record.dropdown.value;
let params = {“app”: 167,“id”: productId};
let ICP = [];

console.log(productId);
console.log(supplyCountry);

kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘GET’, params, function(resp) {

console.log(resp);

ICP = resp.record[supplyCountry].value;
console.log(ICP);
event.record.Number_1.value = ICP;
return event;
}, function(error) {

console.log(error);
});

});
})();

 

正解かどうかは自信がないのですが、kintone.api(~の前に
return が足りてないからかもです。

↓こちらの一番最初のサンプルコードが参考になるかもしれません。

https://developer.cybozu.io/hc/ja/articles/360023047852-kintone%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BPromise%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%AE%E5%9F%BA%E6%9C%AC

コメントありがとうございました。

Promise で試してみましたが解決しませんでした。

console.log(ICP); コンソールに正しい値が表示されます。
event.record.Number_1.value = ICP; ←ここでどうも作動していません。

不可解でしかたが無いです…

こんばんは!

Promiseで試されたというコードを書いてもらえますでしょうか:eyes:!?
return を kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘GET’, params, function(resp) {
の前にかけばよいだけだと思ったのですが(><)動かなかったでしょうか??

また、Numberフィールドと、Number_1フィールドは別のフィールドでしょうか??

こんばんは!?

本当に迷宮入りです。つらいです。

フィールドNumber とNumber_1フィールドは別となります。

Lookupにkintone.app.create.chageが使えないため、LookupからNumberに標準機能でデータを入れ、それを元にLookupが変更された場合kintone.app.create.change.Numberで動かしております。

下記にコード添付します。

Promis ?で書いたところ下記エラーが出ます。ただ、一応動きます

”Uncaught Error: app.record.create.change.Number is not allowed to return “Thenable” object.”

 

(function() {
‘use strict’;

var eventHandle = [‘app.record.edit.change.Number’,
‘app.record.create.change.Number’,
‘app.record.edit.change.dropdown’,
‘app.record.create.change.dropdown’];

kintone.events.on(eventHandle, function(event) {

var productId = event.record.Number.value;
var supplyCountry = event.record.dropdown.value;
var params = {“app”: 167,“id”: productId};
var ICP = 1;

console.log(productId);
console.log(supplyCountry);

return kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘GET’, params).then(function(resp) {

console.log(resp);

ICP = resp.record[supplyCountry].value;
console.log(ICP); ←ここまでは正常に動いています。
event.record[‘Number_1’].value = Number(resp.record[supplyCountry].value); ←ここで動かなくなります。
return event;
}, function(error) {

console.log(error);
});

});
})();

おはようございます!

思い出しました:sweat_drops:
changeイベントではPromiseのreturnが返せない・・・・。でした。
嘘書いちゃってごめんなさい

ですので、
kintone.apiの前のreturn をけして
return eventも消して、return event があったところに

        const obj = kintone.app.record.get();

        obj.record.Number_1.value = Number(ICP);

        kintone.app.record.set(obj);

みたいにかくと動くかもです!ためされてみてください。

↓参考ページ
https://developer.cybozu.io/hc/ja/articles/201942014#step4

 

追記:

※フィールド値変更イベント以外では使えないの記述はコチラにあります
イベント処理の記述方法

Promise 対応イベント
フィールド値変更イベント以外のすべてのイベントで Promise 対応しています。

juridon 様

ご教授いただきありがとうございました。上記コードで解決しました!!

10日くらい悩んでいたので涙です… ありがとうございました。

解決したコード今後の為、載せておきます。

(function() {
‘use strict’;

var eventHandle = [‘app.record.edit.change.Number’,
‘app.record.create.change.Number’,
‘app.record.edit.change.dropdown’,
‘app.record.create.change.dropdown’];

kintone.events.on(eventHandle, function(event) {

var productId = event.record.Number.value;
var supplyCountry = event.record.dropdown.value;
var params = {“app”: 167,“id”: productId};
var ICP = 1;

if(productId > 0){

kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘GET’, params,function(resp) {

var ICP = resp.record[supplyCountry].value;

// kintone.apiで他のアプリから取得したデータをフィールドに入れるコード
const obj = kintone.app.record.get();
obj.record.Number_1.value = Number(ICP);
kintone.app.record.set(obj);

}, function(error) {

console.log(error);

});

} else {
console.log(‘null’);

}
return event;
});

})();