現在Promiseを利用し、アプリ内更新したいと考えています。レコード保存時にアプリ内の
「合計台数」、「事業所」を取得しアプリ内にあり別レコードの、「事業所」が同じかつドロップダウンが「機器更新手数料」、表示されている「台数」に取得した「合計台数」をセットしたいと考えています。
いくつか記事を参考にしたのですがPromiseを利用する場合get()が利用できないため、どのように値の取得をすればいいでしょうか?
参考1 参考2 参考3
(function(){'use strict';kintone.events.on('app.record.edit.submit',function(event){varrecord=event.record;varappId=151;newkintone.Promise(function(resolve, reject){kintone.api(kintone.api.url('/k/v1/records',true),'GET',{app:appId,fields:['合計台数','事業所']}).then(function(){varrecord=kintone.app.record.get();vartotal=record.record['合計台数'].value;varoffice=record.record['事業所'].value;varparam={app:appId,records:['台数']};varquery='プラン in ("機器更新手数料") ';query+='and 事業所 = "'+office+'"';newkintone.Promise(function(resolve, reject){kintone.api(kintone.api.url('/k/v1/records',true),'GET',{app:appId,query:query}).then(function(resp){for(vari=0;i\<resp.records.length;i++){alert(total);param.records[i]={'id':resp.records[i]['レコード番号'].value,'台数':{'value':total},};}});});kintone.Promise.all(kintone.api.url('/k/v1/records',true),'PUT',param).then(function(resp){returnevent;},function(error){console.log(param);returnevent;});});});});})();
梢さん
こんにちは。
全体の流れは以下で合っていますか?
①自レコードの「合計台数」「事業所」を取得
②「事業所」が同じかつプランが「機器更新手数料」の別レコードを取得
③上記別レコード全てに対して「合計」を更新
「app.record.edit.submit」イベント内における値の取得・更新について
①自レコードの値を取得する場合は「record.フィールド名.value」で取得します。これはPromise内でも可です。
「合計台数」「事業所」が自レコードの値であれば、最初のGET処理は不要と思います。
②「事業所」が同じかつプランが「機器更新手数料」の別レコードを取得は
記載のGET API処理で問題ないと思います。
③PUT API処理ですが、kintone.Promise.allは削除して
kintone.api.url(‘/k/v1/records’, true), ‘PUT’, param).then(function(resp) { で良いと思います。
但し、paramにアプリIDが含まれていないため、これを含めた形で定義してみてください。
以下「JavaScriptサンプル」の項をご参照ください。
レコードの一括更新
また、GET後にPUTという流れになりますが、上記コードではGETとPUTが並列になっているため
for (var i = 0; i < resp.records.length; i++) { } の後に
kintone.api.url(‘/k/v1/records’, true), ‘PUT’, param)を入れると良いと思います。
そもそもの前提の流れが誤っていたらご指摘ください。
koichi様
ご返信ありがとうございます
有益な情報で本当に助かります。おかげでrecord.フィールド名.valueで取得無事できました。
説明不足で申し訳ございません。①と②まではおっしゃる通りです。
③は②の取得したレコードの「合計」に①の「合計台数」をセット更新をしたいと考えています
①自レコードの「合計台数」「事業所」を取得
②「事業所」が同じかつプランが「機器更新手数料」の別レコードを取得
③②の取得したレコードの「合計」に①の「合計台数」をセット更新
指摘したいただいた点を踏まえ組み直したんですがPUTで更新ができないです。
恐らくPUTが並列の状態のままだと考えています。何が原因かわかりますでしょうか?
ご教授して頂ければ幸いでございます。
(function() {
'use strict';
kintone.events.on('app.record.edit.submit', function(event) {
var record = event.record;
var appId = 151;
var total = record.合計台数.value;
var office = record.事業所.value;
var query = 'プラン in ("機器更新手数料") ';
query += 'and 事業所 = "' + office + '"';
new kintone.Promise(function(resolve, reject) {
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: appId,query: query}).then(function(resp) {
for (var i = 0; i < resp.records.length; i++) {
var param = {
"app": kintone.app.getId(),
"records": ['台数']
};
param['records'][i] = {
'id': resp.records[i]['レコード番号'].value,
'record':{
'台数': {
'value':'total'
}
}
};
}
kintone.api(kintone.api.url('/k/v1/records', true),'PUT',param).then(function(resp) {
return event;
}, function(error) {
console.log(param);
return event;
});
});
});
});
})();
梢さん
大枠の処理は問題ないと思います。
少しPUTのparamの定義を変えてみてください。
先に更新したいレコード情報を配列(ここではrecordArray)に格納していき、その後にparamを定義すると分かりやすいです。
new kintone.Promise(function(resolve, reject) {
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: appId, query: query
}).then(function(resp) {
var recordArray = [];
for (var i = 0; i < resp.records.length; i++) {
recordArray.push({
'id': resp.records[i]['レコード番号'].value,
'record': {
'台数': {
'value': total
}
}
});
}
var param = {
"app": kintone.app.getId(),
"records": recordArray
};
kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', param).then(function(resp) {
return event;
}, function(error) {
console.log(param);
return event;
});
});
});