顧客ごとの自動採番

著者名:佐藤 紅志(サイボウズ)

目次

年次ごとの自動採番については、以前の 年次ごとの自動採番を行うワザ ですでに紹介されていますが、今回はこれを案件毎に採番する方法を解説させていただきます。
とは言っても、利用するアプリは 2 つです。

具体的には、アプリストアの「 営業支援(SFA)パック (External link) 」を利用します。
案件情報を登録する時の「案件名」に、任意のフィールド情報とともに、ルックアップで取得された「顧客ごとの連番」を文字列連結したうえで、デフォルト表示するというものです。

ご利用される場合は、このアプリパックを kintone アプリストア (External link) から追加してください。

デモ環境

デモ環境で実際に動作を確認できます。

ログイン情報は cybozu developer network デモ環境 で確認してください。

フォームイメージ

顧客情報アプリのフォームのイメージは次のとおりです。

採番フォーマット

採番フォーマットは、[顧客名]-[連番 5 桁]-[案件種類]です。

フィールドの設定

顧客情報アプリ

顧客ごとの連番を管理する必要があるので、顧客情報アプリに採番管理用のフィールドを以下の内容で追加します。 普段必要なフィールドではないので、グループパーツで隠しておくのもよいかと思います。

追加するフィールド フィールド名 初期値 フィールドコード
数値 案件連番 0 案件連番

次に、上記案件連番を更新するため、顧客情報のアプリ ID が必要になります。
この ID 検索をするためのアプリコードを設定します。
設定は、アプリの設定 > 詳細設定 > 高度な設定より行います。

案件情報アプリ

案件情報アプリにも、上記の顧客情報アプリ同様の数値パーツフィールドを追加します。
また、のちほど顧客情報アプリの更新時に必要なレコード番号を取得するため、以下のフィールドを追加します。

追加するフィールド フィールド名 初期値 フィールドコード
数値 案件連番 0 案件連番
数値 顧客情報レコード番号 - 顧客情報レコード番号

上記 2 フィールドを追加した後、顧客名ルックアップフィールドの設定、[ほかのフィールドのコピー]にて、[案件連番]および[顧客情報レコード番号]の値を取得するように設定します。

次に[案件名]に付与する任意のフィールドとして、以下を追加します。
現在の API バージョンでは、ルックアップフィールドのイベント取得ができないため、追加するフィールドのイベントで案件名を設定します。

追加するフィールド フィールド名 項目と順番 フィールドコード
ドロップダウン 案件種類 新規,追加,変更 案件種類

案件連番の取得と編集を行うソースコード

まず、レコード追加・編集画面で"案件種類"を変更した際に、「案件名」に採番を行うサンプルです。
JavaScript ファイルができたら、「案件情報」アプリに適用しましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
 * sample program
 * Copyright (c) 2014 Cybozu
 *
 * Licensed under the MIT License
 * https://opensource.org/license/mit/
 */

(function() {
  'use strict';

  // 案件種類フィールドの更新イベントを登録します
  const events = [
    'app.record.create.change.案件種類',
    'app.record.edit.change.案件種類'
  ];

  kintone.events.on(events, (event) => {
    const record = event.record;
    const matterName =
            record['ルックアップ'].value +
            '-' +
            ('00000' + record['案件連番'].value).slice(-5) +
            '-' +
            record['案件種類'].value;
    // フィールド名「案件名」のフィールドコードを「matter」に変更した場合
    record.matter.value = matterName;
    return event;
  });

})();

連番を更新するソースコード

次に、レコードを追加した際に連番を更新するサンプルです。
JavaScript ファイルができたら、先ほど同様 「案件情報」アプリに適用していきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
 * sample program
 * Copyright (c) 2014 Cybozu
 *
 * Licensed under the MIT License
 * https://opensource.org/license/mit/
 */

(function() {
  'use strict';

  // Register the events.
  const events = [
    'app.record.create.submit'
  ];

  kintone.events.on(events, (event) => {

    const app_code = 'AppIdClient001'; // 顧客情報アプリのアプリコード

    kintone.api(kintone.api.url('/k/v1/apps', true), 'GET', {codes: [app_code]
    }, (resp) => {
      const app_id = resp.apps[0].appId;
      const record = event.record;
      const rec_id = record['顧客情報レコード番号'].value;
      const seq = parseInt(record['案件連番'].value, 10) + 1;

      // 案件連番更新リクエスト
      kintone.api(kintone.api.url('/k/v1/record', true), 'PUT',
        {
          app: app_id,
          id: rec_id,
          revision: -1,
          record: {
            案件連番: {value: seq}
          }
        }, (resp2) => {
          let errmsg = 'An error occurred while updating records.';
          if (resp2.message !== undefined) {
            errmsg += '\n' + resp2.message;
            alert(errmsg);
          }
        }
      );
    }, (resp) => {
      let errmsg = 'An error occurred while getting records.';
      if (resp.message !== undefined) {
        errmsg += '\n' + resp.message;
        alert(errmsg);
      }
    });
  });
})();

ソースコードの解説

顧客ごとの連番を適用する部分については、ルックアップフィールドの設定内容にある、取得先の情報を利用しているため、ソースコードはとても簡単なコードとなっています。

連番を更新するソースコードについても同様で、ルックアップフィールド設定時に、顧客情報レコード ID を取得するようにしていますので、レコードの特定には画面上の項目を利用しています。

アプリ ID につきましては、本記事執筆中にリリースされました 2014/9/14 リリースバージョンから、 複数のアプリの情報を取得する が追加されましたので、それを利用しました。
名称や複数のコードを利用して、一括取得が可能になりましたが、ここでは設定したアプリコードから、アプリ ID を取得しています。

注意事項など

顧客情報の案件連番更新に関する一連の処理は、案件登録時の'app.record.create.submit'イベントを元に、別のアプリのフィールドを更新します。
しかし、顧客情報が更新中だったり削除されていた場合は当然のことながら、更新はされません。
また案件変更時も、イベント自体が対象外で、また顧客が変更されたという情報も捕捉しておりませんので、手作業の修正による対応が必要となります。

以上のように、顧客ごとの連番整合性は比較的緩く維持されていることをご理解の上、ご活用くださいませ。

information

この Tips は、2014 年 9 月版 kintone で動作を確認しています。