kintoneアプリストアの営業支援パックを使ってkintone Promise を実装してみる

kintoneアプリストアの営業支援パックを使ってkintone Promise を実装してみる:

kintoneアプリストアで提供されている営業支援パックを使って、kintone Promiseを実装してみました。

できるだけそのまま動くような資料にしたいと思います。


概要

  • 営業支援パックについてはこちらをご覧下さい。https://jp.cybozu.help/k/ja/user/basic/sales_pack.html
  • 案件管理アプリに顧客番号フィールドを追加して、顧客番号の入力をトリガーにして顧客情報と活動履歴を取得し表示します。
  • changeイベントとPromiseの使い方のサンプルになっています。


アプリの準備

  • kintoneアプリストアから営業支援パックを追加します。
  • 案件管理アプリにフィールドを追加します。フィールドコードは"顧客番号"とします。


    スクリーンショット 2018-10-14 20.40.57.png
  • 案件管理アプリにサブテーブルを追加します。


    スクリーンショット 2018-10-14 19.52.20.png
  • 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は環境に合わせて変更してください。


参考リンク

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)