LoginSignup
2
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-14

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

参考リンク

2
2
0

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
  3. You can use dark theme
What you can do with signing up
2
2