はじめに
「ルックアップ」とは kintone で配置できるフィールドの 1 つで、ルックアップフィールドを配置すると、他のアプリにあるレコードの情報を参照してデータを取得(コピー)することができます。同じ内容のデータを繰り返し入力せずに済むことで、入力ミスを防ぎ、入力時間を短縮できます。
たとえば、案件管理アプリにルックアップフィールドを配置して、関連付けるアプリとして顧客管理アプリを指定します。これにより、案件管理アプリでレコードを登録するときに、顧客管理アプリのデータをコピーして入力できるようになります。
この例では、案件管理アプリにおける「顧客名」は「ルックアップ」フィールドで、「部署名」「担当者名」は「ほかのフィールドのコピー」として設定されており、ユーザーは入力する必要がなく顧客名をコピーする時に同時に顧客管理アプリからコピーされます。
課題:ルックアップは存在するデータしか取得できない
非常に便利なルックアップの機能ですが基本機能の仕様通りに使う場合、次のような課題点もあります。
ルックアップでデータを取得するときには、必ずコピー元のアプリにデータが存在している必要があります。
もし、コピー元のアプリに存在しない場合には次のようなエラーとなります。
この場合、一度コピー元アプリを開いて該当のレコードを登録した後に、改めて「取得」ボタンを押すという操作が必要となり、非常に手間です。
この課題は、カスタマインを用いると解決する事ができます。
ルックアップで取得できるレコードがなく、エラーとなった場合には以下のようなダイアログを表示し、ダイアログに入力された内容に従って「顧客管理」アプリへのレコード追加を実現することが可能です。
それでは、これを実現するカスタマイズとそのポイントについて順に見ていきましょう。
カスタマイズに用いるアプリ構成
今回は、kintone アプリストアにある「営業支援パック」を使用してカスタマイズを作成します。「営業支援パック」では各アプリ間は以下のような関係となっています。
※フィールドコードを分かりやすくするため、フィールドコードは「フィールド名_アプリ名」に変更しています。
カスタマイズを行うアプリは「案件管理」になります。
カスタマイズ
この課題は、「ルックアップ先のマスタにレコードが無かった時には、マスタにレコードを追加し、ルックアップを再取得する」ことをカスタマイズで実現すれば、解決できます。
カスタマイズについては次のように設定してください。
ポイントについても都度説明していきます。
顧客名を入力するダイアログを表示
やること「入力ダイアログを表示する」、条件「ルックアップで取得が失敗した時」を用います。
今回の要件は「マスタにレコードが無い時に、レコードを追加する」です。
これをカスタマインの条件に置き換えると条件「ルックアップで取得が失敗した時」になります。これを使うと、ルックアップの取得が成功したときには「やること」は動かず、取得に失敗したとき(= マスタにデータが無い時)だけ「やること」が動くカスタマイズとなります。
kintone の制約によりルックアップフィールドでは、条件「フィールドの値を編集して値が変わった時」を使用することはできません。ルックアップフィールドの変更をきっかけに処理を動かしたい場合は、今回のように条件「ルックアップで取得が失敗した時」や条件「ルックアップで取得が成功した時」を使う点に注意してください。
カスタマインでは様々なダイアログを作成することが可能です。ダイアログは全部で8種類あり、単純に情報を出力するための「情報ダイアログ」や OK/キャンセルを選択させる「確認ダイアログ」などがあります。
今回使用している「やること」は、やること「入力ダイアログを表示する」。これを用いるとユーザーが任意のテキストを入力でき、入力された内容は $1 のようにアクション番号を指定することで参照し、他のアクションで用いることができます。
部署名を入力するダイアログを表示
やること「入力ダイアログを表示する」、条件「確認・入力ダイアログで「OK」を押した時」を用います。
複数のアクションを繋げて動かす場合には、条件「他のアクションの実行が完了した時」や条件「いずれかのアクションの実行が完了した時」を使います。
また今回のように、やること「入力ダイアログを表示する」など、OKとキャンセルのいずれかを選択できる「やること」の場合、ダイアログで「OK」が押された時と「キャンセル」が押された時でその後の動きを変えたいケースが多いですが、こういった時には条件「確認・入力ダイアログで「OK」を押した時」や、条件「確認・入力ダイアログで「キャンセル」を押した時」 を使用します。
担当者名を入力するダイアログを表示
やること「入力ダイアログを表示する」、条件「確認・入力ダイアログで「OK」を押した時」を用います。
入力した内容でレコードを追加
やること「レコードを追加する」、条件「確認・入力ダイアログで「OK」を押した時」を用います。
POINT:マッピング画面の使用方法
他アプリへレコードを追加・更新する時や自アプリにおいても複数のフィールドに一度に値をセットしたい場合には、「マッピング」という設定項目で設定を行います。
「マッピング」をクリックすると表示される、フィールドマッピング画面は以下のような構成になっています。
画面の要素を簡単に説明すると次の通りです。
①:入力補助用プルダウン
②:入力エリア
③:適用先フィールド
フィールドマッピング画面の基本的な動きとしては「②に入力された値が③のフィールドにセットされる」です。
それぞれの動きについてもう少し詳細に説明します。
③に表示されているフィールド名は使用するやることによって異なりますが大きく2つのパターンに分かれます。レコードの追加や更新で使用する際には「アプリ名」で指定したアプリのフィールドが表示されます。今回だと、レコード追加先として指定している「顧客管理」アプリのフィールド一覧が表示されています。[やること:フィールド値をまとめてセットする] など自アプリに適用するやることを使用する場合には、③には自アプリのフィールド一覧が表示されます。
②は③で表示されているフィールドに何をセットするか?を指定するための領域です。
また、①は②への入力を補助するためのプルダウンメニューになっています。
例として、以下のようにプルダウンで「フィールド」を選択した場合には、アプリのフィールドに既に入力されている値を参照することができます。今回だと「案件管理」アプリで現在開いているレコードのフィールドの値を使用できます。
上の画面で「フィールド」を選択すると、以下のようにフィールド一覧が表示されるため、使用したいフィールドを選択するとマッピング画面にセットされます。
この状態で、「案件管理」アプリの「顧客名」フィールドに入っている値が、顧客管理アプリの顧客名にセットされます。
挿入プルダウンで「他のアクションの結果」を使用すると、アクション番号を指定して他のアクションの実行結果を参照することができます。今回のカスタマイズのようにやること「入力ダイアログを表示する」のアクションを指定すると、ユーザーがダイアログで入力した値を参照できます。
今回のカスタマイズでは次のように設定されており、これによってアクション1〜3の結果を参照し、レコード追加を行なっています。
また、今回のカスタマイズでは使用していませんが、 = “文字列” と入力することで固定値をセットすることも可能です。
上記の例では、常に「アールスリーインスティテュート」という値が顧客名としてセットされます。ラジオボタンやドロップダウンなど選択肢の中の値を指定したい場合などに有用です。
その他、式の使用方法については次のドキュメントも併せてご覧ください。
関数についてはこちらを併せてご覧ください。
また、今回ご紹介したフィールドマッピングの記述方法についてもドキュメントがありますので、併せてご覧ください。
入力した内容でルックアップフィールドに値をセット
やること「フィールドに値をセットする」、条件「他のアクションの実行が完了した時」を用います。
今回のカスタマイズでは「やること」の「値」が「$1」となっていますが、これはアクション1(顧客名を入力するダイアログを表示)の入力ダイアログで入力された内容を参照しています。
ルックアップを改めて取得
やること「ルックアップを取得しなおす」、条件「他のアクションの実行が完了した時」を用います。
なおkintone の仕様により、ルックアップフィールドに新たに値を設定した場合は、必ず「取得」ボタンを押した後に保存する必要があります。これは、やること「ルックアップを取得しなおす」を使うと自動で設定してくれます。
お時間のある方は、ぜひ試しにこのアクション(アクション6)を無効にした状態で、動作確認をしてみましょう。そうすると、値のセットまでは問題なく動くのですが、次のようなエラーが表示され、保存ができません。
なお、このエラーは一度ルックアップの「取得」ボタンを押すと保存できるようになります。
おわりに
この記事では、ルックアップで取得できるレコードがなく、エラーとなった場合にダイアログで値を入力してもらい、レコードをその場で追加するカスタマイズをご紹介しました。
ぜひ、このカスタマイズを使ってレコード入力をやりやすくしてみてください。
また、ご不明点等ございましたら、チャットにてご質問ください!