プログラミング初心者です。
アプリ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);
});
});
})();
コメントありがとうございました。
Promise で試してみましたが解決しませんでした。
console.log(ICP); コンソールに正しい値が表示されます。
event.record.Number_1.value = ICP; ←ここでどうも作動していません。
不可解でしかたが無いです…
こんばんは!
Promiseで試されたというコードを書いてもらえますでしょうか
!?
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);
});
});
})();
おはようございます!
思い出しました
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;
});
})();