PUTの更新 Promise

現在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;
});

});

});