皆さん、こんにちは。はじめてKINTONEコミュニティに質問を投稿し、よろしくお願いします。
(function() {
"use strict";
var events = [
'app.record.edit.change.都道府県',
'app.record.create.change.都道府県'
];
kintone.events.on(events, function(event) {
console.log(event);
var record = event.record;
if (!event.record) {
return event;
}
var todofuken = record.都道府県.value;
console.log(todofuken);
if(!todofuken){
return event;
}
var body = {
"app": 1258,
"fields": ["都道府県","送料"]
};
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
var records = resp.records;
console.log(records);
if(!records || !records.length){
resolve(event);
}
var soryo = 0;
var flag = true;
for(var i=0; i<records.length; i++){
var rs = records[i];
var arrKen = rs.都道府県.value;
for(var j=0; j<arrKen.length; j++){
if(arrKen[j] == todofuken){
soryo = rs.送料.value;
flag = false;
break;
}
if(!flag){
break;
}
}
}
console.log(soryo);
record['送料'].value = soryo;
});
return event;
});
})();
他のアプリからデータを取得して、でもKINTONE API GET関数の中で
record['送料'].value = soryo;
上のコードできません。教えていただけますでしょうか。
よろしくお願いします。
PHAM VAN TAM様
お世話になっております。
cstapの江田と申します。
非同期処理であるkintone.api()が完了する前に、return event;が処理されてしまっているのだと思います。
kintone.api()のコールバック関数の中で、「record[‘送料’].value = soryo;」の代入を行った後、「kintone.app.record.set(event);」を実行してレコードの書き換えをするとよいと思います。
https://developer.cybozu.io/hc/ja/articles/201942014#step4
江田さん、返事していただき、ありがとうございました。
送ってくれたリンクを拝見いたしましたが、
注意事項
- kintone.events.on のインベントハンドラ内で kintone.app.record.set および kintone.mobile.app.record.set を実行することはできません。
と書いてあります。
でも、自己問題は解決できました。
自分の問題は保存ボタンを押した際にレコードの都道府県の値を取得し、得た都道府県で検索条件として他のアプリから送料を取得、それから取得した送料を保存したいです。
解決したのは下の通りです。はじめてKINTONE環境でカスタマイズするから、なかなか難しいんだと感じる。
(function() {
"use strict";
var events = [
'app.record.create.submit.success',
'app.record.edit.submit.success'
];
kintone.events.on(events, function(event) {
var recordId = event.recordId;
var record = event.record;
if (!event.record) {
return event;
}
var body = {
"app": 1258,
"fields": ["都道府県","送料"]
};
var soryo = 0;
var body2 = {
"app": kintone.app.getId(),
"id": recordId,
"record": {
"送料": {
"value": soryo
}
}
};
var todofuken = record.文字列 __1行__ 10.value;
if (!todofuken) {
return new kintone.Promise(function(resolve, reject) {
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body2, function() {
resolve(event);
});
});
return event;
}
return new kintone.Promise(function(resolve, reject) {
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
var records = resp.records;
if(!records || !records.length){
resolve(event);
}else{
var flag = true;
for(var i=0; i<records.length; i++){
var rs = records[i];
var arrKen = rs.都道府県.value;
for(var j=0; j<arrKen.length; j++){
if(arrKen[j] == todofuken){
soryo = rs.送料.value;
flag = false;
break;
}
if(!flag){
break;
}
}
}
var body3 = {
"app": kintone.app.getId(),
"id": recordId,
"record": {
"送料": {
"value": soryo
}
}
};
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body3, function() {
resolve(event);
});
}
});
});
return event;
});
})();