別のkintoneアプリや同じアプリの別レコードが持つテーブルの行について、ルックアップで他のフィールドと一緒にまとめて取得できたらなあ、なんて思われたことはありませんか?
テーブルの行はルックアップでの取得対象にならないため、単純なフィールドのように「コードを入れたら名前を取得」のようなことが標準の機能ではできず、別の方法で実現するのもなかなか大変です。
でもそんなとき、Customineを使えば簡単に実現できます!
なおこのカスタマイズは、ルックアップ時に限らず、条件を変えれば他のレコードや別のアプリのテーブル行を現在のレコードに取得する用途にお使いいただけます。
Customineの基本的な事柄は、こちらの「はじめてのカスタマイズ」をご参照ください。
アプリのフォーム
「部品マスタ」アプリと「部品材料発注」アプリを用意しました。
フィールド名とフィールドコードは同じに設定してあります。
部品マスタアプリ
部品の情報を登録するマスタ用アプリを作成しました。
テーブルには、部品を制作するのに必要な材料を登録できるようになっています。
テーブルのフィールドコードは「material」と指定しました。
部品材料発注アプリ
部品の材料を発注する際に使用するアプリです。
部品コードでルックアップ取得すると、部品名が取得されます。
テーブルのフィールドコードは「HachuList」と指定しました。
ルックアップフィールド「部品コード」は、下記のように設定しました。
やりたいこと
「部品材料発注」アプリで商品コードで「部品マスタ」アプリから「部品名」をルックアップ取得した時に、「制作に必要な材料」のテーブル行も取得したい。
ルックアップフィールドがクリアされた時は、テーブルもクリアしたい。
※「部品マスタ」アプリから「部品名」がルックアップ取得された際に、「部品名」が変わった時にテーブル行を取得するカスタマイズです。
もし、ルックアップ取得した結果、部品名が変わらないときは再取得されませんのでご注意ください。
やりたいことの実行例:
あらかじめ「部品マスタ」にレコードを登録しておきます。
「部品材料発注」アプリで部品コードを入力して「取得」を押すと・・・
ルックアップのコピー対象に指定したフィールド「部品名」と共に、「制作に必要な材料」のテーブル行のデータが取得され、テーブルに追加されます。
それでは、カスタマイズを作成していきます!
Customineの設定
Customineに部品材料発注アプリのカスタマイズを追加します。
ルックアップフィールドと同じ条件でレコードを取得する
やること
テーブルの行を取得するには、まずテーブルが含まれるレコードを取得する必要があります。
やること「キーを指定してレコードを取得する」を使用して、部品コードを元に部品マスタからレコードを取得します。
ルックアップフィールド「部品コード」で取得されたものと同じレコードを取得したいので、
取得先アプリは「部品マスタ」、キーとなるフィールドは「部品コード」を指定し、キーの値には「= 部品コード」を指定します。
条件
ルックアップで値が取得されたタイミングで処理したいので、フィールド「部品名」の値が変わった時、を条件に設定します。
条件「フィールドの値を編集して値が変わった時」を選択し、フィールドには「部品名」を指定します。
もし、テーブル取得をルックアップ以外の別のタイミングで実行したい場合は、この条件を変更してみてください。
もう一つ、条件を「ルックアップで値が取得された時」に限定するため、「フィールド値が特定の値ならば」を追加します。
フィールドは「部品名」、条件は「等しくない」、比較値には何も指定しません。
比較値に何も指定しないことで、「未入力でなければ」つまり「値が取得された時は」の条件とすることができます。
レコードからテーブルを取り出し、テーブル行をレコードに変換する
やること
ルックアップと同じ条件で取得したレコードから、テーブルを取り出します。
その際に、テーブルのまま使うよりレコードとして扱った方ができることが多く扱いやすいので、やること「他のレコード内のテーブルをレコードとして取得する」を指定してテーブルをレコードに変換します。
テーブルを含むレコードは、「ルックアップフィールドと同じ条件でレコードを取得する」のアクションNo.5を指定し、テーブルには「部品マスタ」アプリのテーブルのフィールドコード「material」を指定します。
空の行を取得するかどうか、は今回は「空の行は取得しない」と指定しました。
条件
「ルックアップフィールドと同じ条件でレコードを取得する」の処理が完了し、レコードの取得ができてからテーブルを取り出す処理を行いたいので「他のアクションの実行が完了した時」を指定します。
アクションには、「ルックアップフィールドと同じ条件でレコードを取得する」のアクションNo.5を指定します。
テーブルに書き出す
やること
「レコードからテーブルを取り出し、テーブル行をレコードに変換する」でレコードに変換したテーブルの行を、部品材料発注アプリのテーブルに書き出します。
テーブルへの書き出しには「レコードをテーブルに書き出す」を指定します。
書き出し先テーブルには、部品材料発注アプリのテーブルのフィールドコード「HachuList」を指定しました。
レコードは、書き出し対象となるレコードを指定します。
今回は「レコードからテーブルを取り出し、テーブル行をレコードに変換する」で変換後のレコードを書き出したいので、そのアクションのアクションNoである「6」を指定しました。
フィールドマッピングは、下記のように指定しました。
今回は取得元と書き出し先のテーブルの項目に差がないのですべての項目をマッピングしましたが、書き出し不要な項目は指定を省いてもかまいません。
※書き出し先のテーブルで必須項目になっているフィールドについては、何かしら値を指定しないければ実行時にエラーになります。
条件
「他のアクションの実行が完了した時」を指定します。
「レコードからテーブルを取り出し、テーブル行をレコードに変換する」が完了後に書き出しを行いたいので、アクションNo.6を指定しました。
ルックアップフィールドがクリアされた時はテーブルもクリアする
やること
テーブルの行をすべてクリアするために「フィールド値をクリアする」を指定します。
フィールドにはテーブルのフィールドコードである「HachuList」を指定しました。
このように指定することで、指定したテーブルの値をすべてクリアできます。
条件
ルックアップで値がクリアされたタイミングで処理したいので、フィールド「部品名」の値が変わった時、を条件に設定します。
条件「フィールドの値を編集して値が変わった時」を選択し、フィールドには「部品名」を指定します。
条件を「ルックアップで値がクリアされた時」に限定するため、「フィールド値が特定の値ならば」を追加します。
フィールドは「部品名」、条件は「等しい」、比較値には何も指定しません。
比較値に何も指定しないことで、「未入力であれば」つまり「値がクリアされた時は」の条件とすることができます。
これですべての設定は完了です。
「kintoneアプリへ登録」し、動作を確認してみましょう!
想定通り、テーブルがコピーされるようになったでしょうか?
また、ルックアップをクリアした時テーブルもクリアされるようになりましたでしょうか。
まとめ
ルックアップ取得時に限らず、他のレコードのテーブルの行を現在のレコードのテーブルにコピーしたい時に、このカスタマイズはご利用いただけます。
色々試してみてくださいね!