kintoneアプリストアで提供されている営業支援パックを使って、kintone Promiseを実装してみました。
できるだけそのまま動くような資料にしたいと思います。
#概要
- 営業支援パックについてはこちらをご覧下さい。https://jp.cybozu.help/k/ja/user/basic/sales_pack.html
- 案件管理アプリに顧客番号フィールドを追加して、顧客番号の入力をトリガーにして顧客情報と活動履歴を取得し表示します。
- changeイベントとPromiseの使い方のサンプルになっています。
#アプリの準備
- kintoneアプリストアから営業支援パックを追加します。
- 案件管理アプリにフィールドを追加します。フィールドコードは"顧客番号"とします。
- 案件管理アプリにサブテーブルを追加します。
#サンプルコード
(function() {
"use strict";
// 新規レコード詳細画面にて、フィールド値のchangeイベントで発火
kintone.events.on('app.record.create.change.顧客番号', function(event) {
console.log(event);
let changes = event.changes;
console.log(changes.field.value);
// 処理A: 顧客管理アプリから情報を取得する処理
let getDataA = new kintone.Promise(function(resolve, reject) {
// 顧客データを取得する
let body = {
"app": 100, // 顧客管理アプリのID
"id": changes.field.value
};
console.log(body);
kintone.api(kintone.api.url('/k/v1/record', true), 'GET', body, function(resp){ resolve(resp) });
});
// 処理B: 顧客管理アプリから情報を取得する処理
let getDataB = new kintone.Promise(function(resolve, reject) {
// 顧客データを取得する
let body = {
"app": 101, // 活動履歴アプリのID
"query": "顧客管理レコード番号_関連レコード一覧紐付け用 = " + changes.field.value,
"fields": ["$id", "対応日時", "対応内容", "商談メモ"],
"totalCount": true
};
console.log(body);
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp){ resolve(resp) });
});
// 上記の2つの処理を繋げて実行
kintone.Promise.all([getDataA, getDataB]).then(function(results) {
console.log(results);
// 処理Aの結果を取得
let result1 = results[0];
console.log(result1);
// 処理Bの結果を取得
let result2 = results[1];
console.log(result2);
// 案件管理アプリのレコードオブジェクトを取得
let obj = kintone.app.record.get();
console.log(obj);
// 案件管理アプリのレコードを更新
obj.record['顧客名'].value = result1.record['顧客名'].value;
console.log(result2.records.length);
for (let i = 0, len = result2.records.length; i < len; i++) {
console.log(result2.records[i].$id.value);
if (i+1 < len) {
let newRow = {
value: {
tbレコード番号: {type: "NUMBER", value: undefined},
tb商談メモ: {type: "MULTI_LINE_TEXT", value: undefined},
tb対応内容: {type: "SINGLE_LINE_TEXT", value: undefined},
tb対応日時: {type: "DATETIME", value: undefined}
}
};
obj.record.Table.value.push(newRow);
}
obj.record.Table.value[i].value['tbレコード番号'].value = result2.records[i].$id.value;
obj.record.Table.value[i].value['tb商談メモ'].value = result2.records[i]['商談メモ'].value;
obj.record.Table.value[i].value['tb対応内容'].value = result2.records[i]['対応内容'].value;
obj.record.Table.value[i].value['tb対応日時'].value = result2.records[i]['対応日時'].value;
}
kintone.app.record.set(obj);
console.log("処理完了!");
console.log(obj);
// changesイベントではPromiseをリターンしない
}).catch(function(error) {
console.error(error);
});
});
})();
#説明
- サンプルコード中にコメントやデバッグコードを残してあります。ご確認ください。
- アプリのIDは環境に合わせて変更してください。
#参考リンク