Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@sy250f

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

参考リンク

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What is going on with this article?