カスタマインはルックアップの機能をどこまで再現できる?

公開日:

こんにちは!「ルックアップにするべきか、せぬべきか、それが問題だ」という言葉でおなじみ(言ったことない)、システム開発グループのすずきです。

kintoneにおいて、「ルックアップ」は無くてはならない機能ですよね!

他のアプリの任意のレコードからデータをコピーすることができる、「関連レコード一覧」「アプリアクション」と共にkintoneに用意された3つのアプリ間連携機能の1つですね。

この大変便利なルックアップという機能ですが、要件によっては基本機能のルックアップでは対応しきれないケースもあります。例えば以下のようなものです。

  • 他のフィールドで入力した値によってルックアップで取得するレコードを絞り込みたい
  • キーとなるフィールド(会社コードなど)以外のフィールド(会社名など)で検索したい
  • 複数のアプリからレコードを取得できるようにしたい

こういった場合の対応手段の一つとして、ルックアップのような機能を自作する、という方法があります。JavaScriptで作ろうと思うと時間がかかりますが、弊社のノーコードカスタマイズツールのgusuku Customine(以下カスタマインと呼称)を使えば数倍の速度で作ることができます!

そこでは今回は、カスタマインで基本機能のルックアップの機能を、無理のない範囲でできるだけ再現してみたいと思います!

下が今回再現したい基本機能のルックアップです。これをもとにカスタマインで同等の機能を再現してみます。

フィールド設置とボタン設置

まずは以下のようにフィールドを設置します。

なんだかフィールドが一つ多いですね。実はこれがコツなんです!

元のルックアップは、検索ワードを入れる欄とルックアップのキーの値がコピーされる欄が一体になっています。ですがルックアップの機能を再現しやすくするには、この2つは分離しておいた方が都合がいいのです(後で効いて来ます)。

商品検索フィールドが検索ワードを入れるためのフィールドなので、「取得」「クリア」ボタンは「商品検索」フィールドに設置しましょう。「ボタンをフィールド名の右に配置する」を使えば省スペースになります!

「商品コード」はルックアップのキーとなるフィールドの値が入るフィールドです。「商品名」とともに編集不可にしておきましょう。

レコード取得機能

『取得』といっても、処理にはいくつかのパターンがあります。

  • 検索ワードを入力せずに「取得」ボタンを押した場合、レコードを全て取得しポップアップで表示、選択したら各フィールドにコピー
    • レコードが0件の場合は「データがありません。」というエラーを表示
  • 検索ワードを入力して「取得」ボタンを押した場合、部分一致で検索してレコードを取得
    • レコードが1件のみの場合はポップアップを表示せずすぐに各フィールドにコピー
    • レコードが複数件の場合はポップアップで表示、選択したら各フィールドにコピー
    • レコードが0件の場合は「データがありません。」というエラーを表示

この動きは問題なく再現できます!

「クリア」ボタン

「クリア」ボタンは、押すと「参照先から取得した値もクリアされます。よろしいですか?」という確認ダイアログが表示され、OKを押すと各フィールドの値がクリアされます。

この動きも問題なく再現できます。

コピー元のレコードにアクセスできるようにする

基本機能のルックアップは、詳細画面ではコピー元のレコードへのリンクの機能も備えています。

これを一番近い形で再現できるのは「アプリコード」を設定する方法です。アプリコード付きのレコード番号であればリンクになります。ただ、自動的に振られるレコード番号はキーには不向きなのであまりオススメできません。

ここは簡単にリンクが実現できる「関連レコード一覧」を設置するのがいいでしょう。

関連レコード一覧だと一覧画面には表示できないので、もし一覧画面上でもリンクにする必要があるならアプリコードの利用も検討しましょう。

「取得」押し忘れ防止機能

基本機能のルックアップには、ルックアップフィールドの値を編集した場合、「取得」か「クリア」を押さないとレコードを保存できないようにエラーを出す、という機能があります。つまり、ルックアップで取得したレコード情報とルックアップフィールドの値が食い違うのを防いでくれる仕組みです。

この機能を再現するのに、最初に「検索ワードを入れるフィールド」と「ルックアップのキーを保存するフィールド」を別々に設置していたことが活きてきます!

「ルックアップのキーを保存するフィールド」である「商品コード」を編集不可にしているので、キーの値とキー以外のルックアップでコピーされたフィールドの内容が食い違う、ということが発生しないようになっています。

また、検索ワードを入力したのに「取得」ボタンを押し忘れることを防ぎたい場合は、

  • 「取得」ボタンを押してレコードの取得に成功したら、「検索ワードを入れるフィールド」を自動的に空にする
  • 「検索ワードを入れるフィールド」に値が入っている状態でレコードを保存しようとしたらエラーを出す

としておくと実現できます。

再現できない機能

残念ながら全く実現できない機能もあります。

CSV読み込みやREST APIを使って、ルックアップフィールドを更新したら、自動でルックアップを取得する機能です。

こちらはどうにもならないので、CSV読み込みやREST APIによる更新時に、各コピー先フィールドの値もそれぞれ指定する必要があります。

テーブル内のルックアップの場合

テーブル内のルックアップを入れる場合は、少々難易度が上がりますが不可能ではありません。

ボタンを設置できないため、「取得」や「クリア」はチェックボックスフィールドで代用する必要があります。

こちらも紹介したいところですが、説明が長くなってしまうので、また別の機会にご紹介したいと思います。

まとめ

いかがでしたでしょうか?

形が少し変わった部分もありますが、元の機能のほとんどを再現できたのではないでしょうか?

ルックアップの機能は思いのほか複雑ですので、カスタマインをもってしても、再現にはかなりの手間がかかります。

ただ、拡張性は高いので、基本機能のルックアップではどうにもならない、という時にこの記事を思い出していただければ幸いです。

投稿者プロフィール

アバター画像
すずき
kintoneがメインのエンジニアです。空き時間の半分を合気道に使います。