※この記事は古くなっています。最新の顧客ごとの自動採番はこちら。
Cybozu developer networkのTipsのURL:
https://developer.cybozu.io/hc/ja/articles/203236240
顧客ごとの自動採番については、以前のTipsでご紹介しましたが、今回は別のアプローチで同じ機能を作成してみました。前回のTipsよりも便利なうえ、アプリ自体の変更が少なくなっていますよ!
Customineの基本的な事柄は、こちらの「はじめてのカスタマイズ」をご参照ください。
以前のTipsからの改善点
アプリの変更が案件管理アプリにフィールドを2つ追加するだけでよく、ルックアップの設定変更も必要ありません。また、顧客管理アプリには手を加える必要はありません。
以前のTipsでは案件管理アプリで別のレコードを再利用してレコードを作成した場合、ルックアップを取得しなおして、最新の連番を取得する必要がありましたが、本Tipsでは自動で最新の連番を取得するので、ルックアップの取得のし直しが必要なくなりました。
アプリのフォーム
アプリはkintone アプリストア の「営業支援パック」の「顧客管理」と「案件管理」のアプリを使います。
ただし、案件管理アプリに2つフィールドを追加します。
案件管理
以下の2フィールドを加えます。
案件種類:ドロップダウンフィールド。項目は「新規」「追加」「変更」。
案件連番:数値フィールド。
「案件種類」は案件名を充実させるために追加したフィールドです。他に案件名に入力したい項目があれば、追加しても構いません。
「案件連番」は手入力しないフィールドなので、グループに入れて隠しておきましょう。
やりたいこと
案件レコード作成時に、顧客ごとの連番を作成し、「案件名」に「顧客名-連番(0埋めありの5桁)-案件種類」の形式で入力する。
実現する手法
案件アプリで新規レコード保存時に、顧客が同じ全案件レコードを全て取得し、それらの中の「案件連番」の最大値に1加えた値を最新の連番として、新しいレコードの「案件連番」に入力します。
その後、入力された「案件連番」に「顧客名」と「案件種類」を結合して「顧客名-連番-案件種類」の形で「案件名」に入力します。
Customineの設定
新規レコード保存時に同じ顧客のレコードを全件取得する
まずは、その顧客の今までの案件の中で一番新しい連番を取得するために、その顧客の今までの案件レコードを全て取得します。
やること
「キーを指定してレコードを取得する」を使用します。今回は同じ顧客レコードをルックアップしているレコードを取得したいので、顧客レコードのレコード番号をキーとします。
案件アプリは、顧客アプリからルックアップ取得時に顧客レコードのレコード番号を「顧客管理レコード番号(関連レコード紐付け用)」というフィールドにコピーするように設定されているので、それを利用します。
取得先アプリ:= 案件管理(営業支援パック)
キーとなるフィールド:顧客管理レコード番号(関連レコード紐付け用)
キーの値:=顧客管理レコード番号_関連レコード紐付け用_
条件
レコードが作成されるときに実行したいので、「レコードを保存する直前(削除時は除く)」を選択します。
ただし、これだけだとレコードを保存するたびに新しい番号に更新されてしまうので、レコードを作成するときの一度しか実行されないように、条件を追加します。
条件「フィールド値が特定の値ならば」を追加し、対象となるフィールドを「案件名」に、条件を「等しい」に設定します。比較値は空欄にしておきます。
こうすることで、「案件名」が空白の時のみ実行されます。
取得したレコードが0件の場合の案件連番
上のレコード取得で取得したレコードが0件の場合、つまり、今作成しようとしているレコードがこの顧客の最初の案件レコードのため、「案件連番」は「1」となります。
やること
「フィールドに値をセットする」を使用します。
フィールド:案件連番
値:1
条件
連番の作成に続けて実行したいので、「他のアクションの実行が完了した時」を使用します。さらに、取得したレコードが0件の時に限定したいので、「レコード件数が0件ならば」を追加します。
取得したレコードが1件以上の場合の案件連番
取得したレコードが1件以上の場合、それらの中の「案件連番」の最大値に1加えた値が新しいレコードの「案件連番」になります。まずは「案件連番」の最大値を導き出します。
やること
「レコード中のフィールド最大値を計算する」を使用します。事前に取得したレコードを対象に、指定したフィールドの最大値を導き出すことができます。
レコード選択アクション:対象となるレコードを取得したアクションを選択します。画像では7番のアクションでレコードを取得しているため、「7」を選択しています。
計算するフィールド:案件連番
結果をセットするフィールド(省略可):連番に1を足してからセットしたいので空欄にしておきます。
条件
こちらも連番の作成に続けて実行したいので、「他のアクションの実行が完了した時」を使用します。こちらは取得したレコードが1件以上の時に限定したいので、「レコード件数が1件以上ならば」を追加します。
次は導き出した最大値に1を足して「案件連番」にセットします。
やること
「フィールドに値をセットする」を使用します。
フィールド:案件連番
値:$11+1(11番のアクションの計算結果に1を足すことを意味しています)
条件
最大値の計算に続けて実行したいので、「他のアクションの実行が完了した時」を使用します。
案件名の作成
連番が作成されたので、作成された連番を使って案件名を作成します。
数値をゼロ埋め有りの5桁にフォーマット→「顧客名」と「案件種類」を結合して「案件名」にセット、という流れは前回と同じですが、今回はすでに、取得したレコードが0件の時と1件以上の時の2つに場合分けしているので、アクションの数は倍になります。
取得したレコードが0件の時
取得したレコードが1件以上の時
設定が完了したら、「kintoneアプリへ登録」し、動作チェックしてみましょう。
※動作チェックをする前に、案件管理アプリ内のサンプルレコード(アプリストアからアプリパックを追加する際に元から入っているレコード)をすべて削除してください。
サンプルレコードには「案件連番」が入力されていないので、アクション11で求める最大値も空、つまり数値でないため、アクション12の「$11+1」が計算できず、エラーになってしまいます。
案件名が自動で入力されましたね!何件か同じ顧客の案件レコードを作成して、連番が進んでいくことを確認しましょう!
編集不可設定
今回も自動で入力される「案件名」は編集不可にしておきましょう。もしどうしても「案件名」を編集できるようにしたいなら、条件を「追加画面を表示した時」に変えて、レコード新規作成の時だけ編集不可にしてもいいですよ。
まとめ
kintoneの標準機能とCustomineをうまく組み合わせれば問題を解決する方法は幾通りも見えてきます。色々試してみて、最適なカスタマイズを探し出してください!
Customineヘルプやサポートもぜひご活用ください。