※この記事は古くなっています。最新の顧客ごとの自動採番はこちら


Cybozu developer networkのTipsのURL:

https://developer.cybozu.io/hc/ja/articles/203236240


自動採番については、以前のTipsで通常の採番年次ごとの採番の方法をご紹介しましたが、今回は案件に対して顧客ごとに採番する方法をご紹介します!


今回はなんと「自動採番を行う」を使用しません!

別の方法で連番を作成していきます。


Customineの基本的な事柄は、こちらの「はじめてのカスタマイズ」をご参照ください。


アプリのフォーム

アプリはkintone アプリストア  の「営業支援パック」の「顧客管理」と「案件管理」のアプリを使います。


ただし、アプリに少し手を加えます。


顧客管理


一番下に以下のフィールドを加えます。

  • 案件連番:数値フィールド。初期値は0。


手入力しないフィールドなので、グループに入れて隠しておきましょう。


案件管理


以下の2フィールドを加えます。

  • 案件種類:ドロップダウンフィールド。項目は「新規」「追加」「変更」。

  • 案件連番:数値フィールド。初期値は0。


こちらの案件連番も手入力しないフィールドなので、グループに入れて隠しておきましょう。

上記2フィールドを追加した後、ルックアップフィールド「顧客名」の設定の「ほかのフィールドのコピー」で、「案件連番」の値を取得するように設定します。



やりたいこと

案件レコード作成時に、顧客ごとの連番を作成し、「案件名」に「顧客名-連番(0埋めありの5桁)-案件種類」の形式で入力する。


実現する手法

顧客レコードに最新の案件の連番の値を持たせておきます(案件がない場合は0)。その値を入れておくのが顧客アプリに加えた「案件連番」フィールドです。


案件レコード新規作成時は、

  • まず、ルックアップで前回の案件の連番を取得し、案件アプリに加えた「案件連番」フィールドに入力します。(上で設定済み)

  • レコードを保存するときに「案件連番」に1加えた値で、「案件名」に「顧客名-連番-案件種類」を入力します。

  • その後、顧客レコードの「案件連番」の値を最新の値に更新します。


Customineの設定

数値のフォーマット

まずは「案件連番」に1加えた値で、「案件名」に「顧客名-連番-案件種類」を入力する部分を設定していきたいところですが、

その前に、今回の連番は0埋め有りの5桁なので、「案件連番」に1加えた値を0埋め有りの5桁に変換する必要があります。

1アクションで設定できますよ!


やること

数値をフォーマットする」を使用します。数値をいろいろな形に変換できます。

今回は案件連番に1足してから、0埋め有りの5桁に変換したいので、

以下のように設定します。

  • 数値:= 案件連番 + 1

  • 桁区切り:表示しない

  • 整数部の桁数:5

  • 整数部のゼロ埋め:する

  • 小数点以下の桁数:空白

  • 小数部のゼロ埋め:しない

  • セット先フィールド:空白


条件

レコードが作成されるときに実行したいので、「レコードを保存する直前(削除時は除く)」を選択します。


ただし、これだけだとレコードを保存するたびに新しい番号に更新されてしまうので、レコードを作成するときの一度しか実行されないように、条件を追加します。


条件「フィールド値が特定の値ならば」を追加し、対象となるフィールドを「案件名」に、条件を「等しい」に設定します。比較値は空欄にしておきます。


こうすることで、「案件名」が空白の時のみ実行されます。


案件名のセット

新しい 連番ができたので、「顧客名」・「案件種類」とともに「案件名」にセットしましょう。


やること

フィールドに値をセットする」を使用します。

  • フィールド:案件名

  • 値:= 顧客名 & “-” & $1 & “-” & 案件名

「$1」で1番のアクションの結果の値、つまり先ほど作成した連番を参照しています。


条件

連番の作成に続けて実行したいので、「他のアクションの実行が完了した時」を使用します。


顧客レコードの案件連番の更新

新しい案件が登録され、連番が進んだので、顧客アプリのレコードの連番も進ませる必要があります。


やること

レコードを更新する(キーの値をフィールドで指定)」を使用します。指定したレコード番号の顧客アプリのレコードを更新します。

  • 更新先アプリ:顧客管理

  • キーとなる更新先のフィールド:レコード番号

  • キーの値となるこのアプリのフィールド:顧客管理レコード番号(関連レコード紐付け用)

  • マッピング:案件連番=案件連番+1(前の「案件連番」は顧客アプリの、後ろの「案件連番」は案件アプリ 内のフィールドを指しています。)

  • 更新の競合:チェックする


条件

「案件名」のセットに続けて実行したいので、「他のアクションの実行が完了した時」を使用します。


設定が完了したら、「kintoneアプリへ登録」し、動作チェックしてみましょう。


案件名が自動で入力されましたね!


仕上げ

さて、基本の機能はできました。あとはトラブルの予防のために少し機能を足しましょう。


編集不可設定

「案件名」は空の時に自動で入力されるようになりました。逆に言うと、新規レコード追加時でも「案件名」に何か値を手入力していると、連番は進まず、次回以降に自動で入力される「案件名」の連番と整合性が取れなくなってしまいます。


そこで、「案件名」は編集不可にしておきましょう!



やることは「フィールドを無効化する」、条件は「追加画面・編集画面を表示した時」を使用します。

もしどうしても「案件名」を編集できるようにしたいなら、条件を「追加画面を表示した時」に変えて、レコード新規作成の時だけ編集不可にするのもいいでしょう。


レコード再利用時の対応

案件レコードを再利用してレコードを作成する場合、次のような問題が発生します。

一つは案件名がコピーされてしまうので、新しい案件名が入力されず、重複によるエラーが発生する点です。この問題はレコード再利用時に「案件名」をクリアするアクションを追加することで対応できます。


もう一つは「案件名」が空であっても、最新でない「案件連番」がコピーされてしまうので、保存時の連番も最新にならず、重複エラーが発生する点です。これを防ぐには、保存前にルックアップを取得し直せばよいのですが、忘れやすいと思います。


これにはいくつか対応方法が考えられます。

その例をいくつかご紹介します!

  • ラベルフィールドを用意し、「レコード再利用時はルックアップを再取得してください」と表示する。

  • スペースフィールドを用意し、「スペースに文字を表示する」を使用して、レコード再利用時だけ「ルックアップを再取得してください」と表示する。

  • 再利用時に「顧客名」をクリアし、強制的に再度取得させる。

  • 再利用ボタンを非表示にする。


最適な対応方法は用途によって変わります。

他にも方法があると思うのでぜひ考えてみてください!


まとめ

一見実現できないように見える機能も、kintoneの標準機能とCustomineをうまく利用すれば、発想次第で簡単に実現できてしまうことがあります。

Customineヘルプサポートのページにそのヒントがあるかもしれませんよ!

ぜひご活用ください。