kintone.promiseを使ってkintone.apiをコントロールしようとしたのですが、
思ったように動きません。
内容は、マスターアプリとマスター使用(ルックアップで)アプリの関係で、
ルックアップ元のマスターを変更した時にマスターしようアプリのルックアップ先を
変更しようとするものです。更新成功のメッセージは出るのですが、実際の更新
はされていません。私はpromise の使い方が間違っているのかなと思うのですが
違っているのかもしれません。
以下のコードで実行してます。
jQuery.noConflict();
(function($) {
“use strict”;
kintone.events.on([‘app.record.edit.submit’, ‘app.record.index.edit.submit’], function (event) {
var afterRecord = event.record;
var appId = kintone.app.getId();
var recId = event.recordId;
var manyappid = [12];
var appname = [“プログラ”];
var j;
var n = 0;
var orquery;
return new kintone.Promise(function(resolve, reject) {
// まず、変更前のルックアップデータを取得する
kintone.api(‘/k/v1/record’, ‘GET’, {app: appId, id: recId}).then(function (resp) {
var beforeRecord = resp.record;
for ( j = 0; j < manyappid.length; j++ ) {
// 次に、ルックアップ参照元(コピー先)の更新対象レコードを取得する.
orquery = ‘車種名 = "’ + beforeRecord.車種名.value + ‘" ‘+‘or’+’ 関連車種1 = "’ + beforeRecord.車種名.value + ‘"’;
var before_pname = beforeRecord.車種名.value;
fetchRecords(manyappid[j], orquery).then(function (records) {
var recCount = records.length;
var putCount = Math.ceil(recCount / 100);
for (var i = 0; i < putCount; i++) {
var offset = i * 100;
var limit = 100;
if (offset + limit > recCount) {
limit = recCount - offset;
}
var putLimit = limit + offset;
var editRecords = [];
// 更新対象レコードに更新後のデータを上書き
// 車種マスターの変更前の車種名と進捗管理の車種名が同じ時マスターの項目をコピーする。
for (offset; offset < putLimit; offset++) {
var pname1 = records[offset][‘車種名’].value;
var pname2 = records[offset][‘関連車種1’].value;
var pname3 = records[offset][‘関連車種2’].value;
var recNo = records[offset][‘$id’].value;
var record = [];
var somerecord;
if (beforeRecord.車種名.value == pname1){
somerecord = {“車種名”: {“value”: afterRecord.車種名.value},
“車種名”:{“value”: afterRecord.車種.value}
};
record.push(somerecord);
}
if(beforeRecord.車種名.value == pname2){
somerecord = {“関連車種1”: {“value”: afterRecord.車種名.value},
“設定用2”:{“value”: afterRecord.車種名.value}
};
record.push(somerecord);
}
if(beforeRecord.車種名.value == pname3){
somerecord = {“関連車種2”: {“value”: afterRecord.車種名.value},
“設定用3”:{“value”: afterRecord.車種名.value}
};
record.push(somerecord);
}
editRecords.push({‘id’: recNo, ‘record’: record});
}
// 最後に更新処理
console.log(editRecords);
kintone.api(‘/k/v1/records’, ‘PUT’, {‘app’: manyappid[n], ‘records’: editRecords}).then(
function () {
alert(‘更新処理出来ました。’);
// resolve(“処理OK”);
}, function() {
// error
alert(‘更新処理出来ませんでした。’);
});
n = n + 1;
}
});
}
});
resolve(event);
}).then(function(resp_) {
alert(“処理完了!”);
return event;
});
});
// 全件取得関数
function fetchRecords(appId, query, opt_offset, opt_limit, opt_records) {
var offset = opt_offset || 0;
var limit = opt_limit || 100;
var allRecords = opt_records || [];
var params = {app: appId, query: query + ’ limit ’ + limit + ’ offset ’ + offset};
return kintone.api(‘/k/v1/records’, ‘GET’, params).then(function (resp) {
allRecords = allRecords.concat(resp.records);
if (resp.records.length === limit) {
return fetchRecords(appId, query, offset + limit, limit, allRecords);
}
return allRecords;
});
}
})(jQuery);
promiseのサンプルコードを色々見て作ったものです。
足らない所を教えてもらえれば幸いです。
よろしくお願いします。