いつもお世話になっております。
井狩です。
早速質問させていただきます。
GETしてきた値ageを以下のコードでフィールドに表示しようとしています。
record[‘num_PU’][‘value’] = age;
ageは、コンソール、アラートで表示されることは確認できているのですが、num_PUのフィールドに表示することが出来ません。
json形式で値をGETしてきているため、オブジェクト型に変換しなければならないのかなと思うのですが、方法がわかりません。
よろしくお願いいたします。
井狩華奈美さん
こちらはどの画面(イベント)での処理を想定されていますでしょうか。また、表示というよりフィールドにセットするイメージのようですので、・・・
新規登録・編集画面等であればeventで返すか、この場合GETの返りを返す必要がありそうですので、この辺で議論されているように、kintone.api()中でkintone.app.record.get/setを使ってセットすることになると思います。詳細画面であればこちらにあるように、何か条件をつけてAPIで更新してしまう処理になると思います。
山下様
ご回答、ありがとうございます。
イベントとしては、編集画面、追加画面です。
以下に私が作成したjsを掲載いたします。
このjsでは、セットできませんでした。。。
(function(){
“use strict”;
var events1 = [ ‘app.record.create.change.drp_close_result’,
‘app.record.edit.change.drp_close_result’,
];
kintone.events.on(events1, function(event){
var record = event['record'];
var recordId = kintone.app.record.getId();
var appId = 1111;
var qryInfo = 'look_itemNo = "' + event.record['txt_itemNo'].value + '"';
kintone.api('/k/v1/records', 'GET', {
app: appId,
query: qryInfo,
fields: ['rec_TGlist']
},
function(resp){
var age = resp['records'][0]['rec_TGlist']['value'];
console.log(age);
record.num_PU.value = age;
});
});
return event;
})();
どうぞ、よろしくお願いいたします。
井狩
書かれている kintone.api() は非同期処理ですので、 return event が先に返り、値を得る前に処理が終わってしまします。故に、先程の話の後者の処理(GET処理中でkintone.app.record.get/set)が必要です。
イベントは異なりますが同様の議論がこちらにありますので、こちらを参考にしてください。
山下様
ご回答、ありがとうございました。
kintone初心者でして、見当違い名ことを行っていないかどうか、jsの確認をしていただいてもよろしいでしょうか。申し訳ございません。
以下に掲載いたします。
(function(){
“use strict”;
var events1 = [ ‘app.record.create.change.drp_close_result’,
‘app.record.edit.change.drp_close_result’,
];
kintone.events.on(events1, function(event){
var record = event['record'];
var appId = 1111;
var qryInfo = 'look_itemNo = "' + event.record['txt_itemNo'].value + '"';
kintone.api('/k/v1/records', 'GET', {
app: appId,
query: qryInfo,
fields: ['rec_TGlist']
},
function(resp){
var age = resp['records'][0]['rec_TGlist']['value'];
});
});
//return event;
var record = kintone.app.record.get();
record['record']['num_PU']['value'] = age;
kintone.app.record.set(record);
})();
return.eventをコメントアウトし、getとsetを追加いたしました。
間違えているのか、動きませんでした。。
よろしくお願いいたします。
井狩
記載箇所をよく見てみてください。その箇所に書いてしまうと、やはりkintone.api()の実行結果を得る前に実行されてしまいます。
(kintone.app.record.get/setがkintone.events.onの中では使えないという別の問題もありますが)
kintone.api()のコールバックの中で書く必要がありますので、次のようになるのではないでしょうか。
(function() {
"use strict";
var events1 = ['app.record.create.change.drpcloseresult',
'app.record.edit.change.drpcloseresult',
];
kintone.events.on(events1, function(event) {
var record = event['record'];
var appId = 1111;
var qryInfo = 'look_itemNo = "' + event.record['txt_itemNo'].value + '"';
kintone.api('/k/v1/records', 'GET', {
app: appId,
query: qryInfo,
fields: ['rec_TGlist']
},
function(resp) {
var age = resp['records'][0]['rec_TGlist']['value'];
var record = kintone.app.record.get();
record['record']['num_PU']['value'] = age;
kintone.app.record.set(record);
});
});
//return event;
//var record = kintone.app.record.get();
//record['record']['num_PU']['value'] = age;
//kintone.app.record.set(record);
})();
非同期処理に関連する内容のトピックが過去に沢山出てきていますので、見てみてください。
山下様
ご回答、ありがとうございました。
同期、非同期についての理解が浅く、ご迷惑おかけいたしました。
アプリの動作、確認することが出来ました。
今後ともよろしくお願いいたします。