Kintoneの3つの別のアプリから必要な情報を集めて
外部のWebAPIへPOSTしようと思っています
更新登録時はうまく動作しますが、
新規登録時が動作しません・・・
新規登録時は会社情報の取得まで到達していないような動きです
PromiseがReturn されて、処理が終了している??
新規登録時は登録後、レコード一覧画面へ遷移しますが、
編集画面はレコードの詳細画面のままで遷移しないことが原因でしょうか?
色々と試してみましたが、行き詰まりました。
どなたかご教授いただけないでしょうか??
よろしくお願い致します!!
参照ライブラリ:alasql.min.js, CybozuLabs.js, https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js
var obj = {};
var ContractApp = appId[0];
var CompanyApp = appId[1];
var PersonApp = appId[2];
var Contractno = 0
console.log(PersonID);
// 人名情報取得
fetchRecords(PersonApp, "$id = " + PersonID).then(function(records) {
obj.rs1 = convertToRows(records);
console.log(‘rs1’, JSON.stringify(obj.rs1));
return obj.rs1[0].record_company
}).then(function(recordCompany) {
if (recordCompany>0) {
// 会社情報取得
return fetchRecords(CompanyApp, "record_company = " + recordCompany).then(function(records1) {
obj.rs2 = convertToRows(records1);
console.log(‘rs2’, JSON.stringify(obj.rs2));
if (convertToRows(records1).length != 0) {
return fetchRecords(ContractApp, "ContractNo = " + obj.rs2[0].ContractNo).then(function(records) {
if (records.length != 0) {
obj.rs3 = convertToRows(records);
console.log(‘rs3’, JSON.stringify(obj.rs3));
return obj;
}
});
}
}).then(function() {
var result = “”
var SqlFlg = 0
// 場合に応じたクエリで結果を取得
for (var temp in obj){
switch(temp){
case ‘rs1’: if (SqlFlg == 0) SqlFlg = 1; break;
case ‘rs2’: if (SqlFlg < 2) SqlFlg = 2; break;
case ‘rs3’: if (SqlFlg < 3) SqlFlg = 3; break;
}
}
switch(SqlFlg){
case 1: result = alasql(“SELECT * FROM ? AS Person” , [obj.rs1]); break;
case 2: result = alasql(“SELECT * FROM ? AS Person LEFT JOIN ? AS Company ON Company.record_company = Person.record_company” , [obj.rs1, obj.rs2]); break;
case 3: result = alasql(“SELECT * FROM ? AS Person LEFT JOIN ? AS Company ON Company.record_company = Person.record_company LEFT JOIN ? AS Contract ON Company.ContractNo = Contract.ContractNo” , [obj.rs1, obj.rs2, obj.rs3]); break;
}
console.log(‘result’, JSON.stringify(result));
for (var i = 0, l = result.length; i < l; i++) {
console.log(result[i]);
};
}).catch(function(reason){
console.log(reason)
});
}
});
// アプリのレコードを取得する関数
function fetchRecords(appId, opt_where, opt_fields, opt_offset, opt_limit, opt_records) {
var where = opt_where || ‘’;
var offset = opt_offset || 0;
var limit = opt_limit || 100;
var allRecords = opt_records || [];
console.log(“offset =” + offset +", limit = " + limit);
var params = {app: appId, query: where + ’ limit ’ + limit + ’ offset ’ + offset};
if (opt_fields) params.fields = opt_fields;
return kintone.api(‘/k/v1/records’, ‘GET’, params).then(function(resp) {
allRecords = allRecords.concat(resp.records);
if (resp.records.length === limit) {
return fetchRecords(appId, where, opt_fields, offset + limit, limit, allRecords);
}
else{
return allRecords;
}
});
}
function convertToRows(records) {
var rows = records.map(function(record){
var keys = Object.keys(record);
var row = {};
keys.map(function(key){
row[key] = record[key].type === ‘NUMBER’ ? Number(record[key].value) : record[key].value;
});
return row;
});
return rows;
}