kintoneアプリストアの営業支援パックを使ってkintone Promise を実装してみる
kintoneアプリストアの営業支援パックを使ってkintone Promise を実装してみる:
kintoneアプリストアで提供されている営業支援パックを使って、kintone Promiseを実装してみました。
できるだけそのまま動くような資料にしたいと思います。
kintoneアプリストアで提供されている営業支援パックを使って、kintone Promiseを実装してみました。
できるだけそのまま動くような資料にしたいと思います。
概要
- 営業支援パックについてはこちらをご覧下さい。https://jp.cybozu.help/k/ja/user/basic/sales_pack.html
- 案件管理アプリに顧客番号フィールドを追加して、顧客番号の入力をトリガーにして顧客情報と活動履歴を取得し表示します。
- changeイベントとPromiseの使い方のサンプルになっています。
アプリの準備
- kintoneアプリストアから営業支援パックを追加します。
- 案件管理アプリにフィールドを追加します。フィールドコードは"顧客番号"とします。
- 案件管理アプリにサブテーブルを追加します。
- tbレコード番号は数値フィールド
- tb対応日時は日時フィールド
- tb対応内容は文字列1行
- tb商談メモは文字列複数です。(どれもフィールドコードはフィールド名と同じ)
サンプルコード
(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は環境に合わせて変更してください。
コメント
コメントを投稿