LoginSignup
2

More than 3 years have passed since last update.

posted at

updated at

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は環境に合わせて変更してください。

参考リンク

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2