kintone では、アプリ間の連携を実現するために、関連レコード一覧やルックアップフィールドが用意されています。
その中でもルックアップフィールドは、kintone にアプリを作る上でリレーションを保つため重要な役割を持ちます。
ルックアップの対象は変更されることのない一意なキーとなるフィールドを指定するのが望ましいですが、これにはいくつかの問題があります。
意味の持たない一意なキーが、どのレコードに紐づいているか分からないわけですから、取得ボタンを押して即取得、とするためには、「09742」のような文字列を覚えておかなければならないということになります。
また、ルックアップはあくまでコピーとなるため、元のフィールドの値が変更された場合、自動で更新されるような仕様はありません。ルックアップしたタイミングの値が残り続けます。
さらに、ルックアップフィールドには参照制約が存在し、CSV 取込などを行う際に、ルックアップ先のレコードが存在しないとエラーが発生します。
できることなら、取得する参照元は「顧客名」のような分かりやすいものとし、アプリ間の紐づけは別の方法で行いたいところです。
そこで今回は、ルックアップの使い勝手だけを残して、関連付け機能を削除したプラグインを作成したのでご紹介します。
プラグインは無料で利用できます。また、ソースコードは全て GitHub に公開しているため、どのように実装されているかも確認できます。
プラグインでできること
標準機能の再現
レコード作成・編集時、プラグインに設定した対象フィールドの右側に、ルックアップフィールドにある「取得」「クリア」ボタンを再現したものを表示します。
入力値から自動取得
フィールドに入力した値に一致するレコードが 1 件だけだった場合、標準機能と同様に、「取得」ボタンを押す、もしくは Enter キーを押すことで、ルックアップ先のレコードの値を取得します。
また、標準機能のルックアップの場合、入力値との比較は参照先のフィールドの値のみで行われますが、 当プラグインでは、参照先のフィールドの値だけでなく、参照先のレコードの他のフィールドの値とも比較を行います。
そのため、名称だけでなくコードでも検索したいといったニーズにも対応することができます。
高速なレコード検索
フィールドに入力した値に一致するレコードが複数件存在する場合、専用のダイアログが表示され、取得するレコードを選択することができます。
ダイアログには独自の検索機能を実装しており、曖昧検索や 1 文字検索も可能となっています。これにより、対象のレコードを素早く見つけることができます。
何も入力せず「取得」ボタンを押した場合
フィールドに何も入力しない状態で「取得」ボタンを押した場合も、専用のダイアログが表示されます。
設定画面
活用のヒント
標準のルックアップフィールドと併用する
当プラグインを活用することで、一意でないフィールドをルックアップの対象にすることができます。
しかし、ルックアップフィールドは、アプリ間のリレーションを保つ役割も持っています。ルックアップフィールドの使い勝手を当プラグインで解決しつつ、アプリ間のリレーションを保つためには、以下のような設定を行うことができます。
- 文字列 1 行フィールド(利用者が参照しやすいフィールド)を用意し、当プラグインの対象フィールドに設定
- 標準機能のルックアップフィールド(ID やコードとなるフィールド)を用意し、当プラグインのコピー先に設定
- 「コピー先に標準のルックアップフィールドが存在する場合、取得完了後自動的にルックアップを実行する」を有効にする(デフォルトで有効)
- 標準機能のルックアップフィールドのコピー先として、1 で用意した文字列 1 行フィールドを指定
当プラグインのコピー先には、ルックアップフィールドを指定することもできます。さらに、オプションを有効にすることで、ルックアップフィールドが指定された場合は自動的にルックアップの取得を実行します。
これらを組み合わせることで、以下のような動作を実現することができます。
- プラグインが参照元から値を取得
- 標準機能のルックアップフィールドに値をコピー
- 標準のルックアップを実行
これにより、ルックアップの利便性を生かしつつ、アプリ間の紐づけも保つことができます。また、標準機能のルックアップには ID を使用しているため、CSV 取込などを行った際にもエラーが発生しにくくなります。
お問い合わせ
プラグインに不具合があれば修正します。
ナビゲーションの「コンタクト」からご連絡をお願いします。
また、「こんなプラグインが欲しい!」という要望も募集しています。お声をいただければ、いつの間にか、プラグイン一覧に追加されているかもしれません。
リリースノート
ルックアップボタンを設置するフィールドが数値フィールドの場合、Enterキーイベントが登録されていない問題を修正
予め値を入力した状態で「取得」ボタンを押し、ヒットするレコードが0件の場合のふるまいを変更
レコードを選択するダイアログ表示時、検索フィールドをフォーカスされるように変更
検索フィールドがフォーカスされている状態で、対象レコードが1件だけの場合、Enter キーで選択できるように変更
他のフィールドのコピーで指定したフィールドの編集可否を制御する機能を追加
他のフィールドのコピーで、参照元と反映先のフィールドタイプが異なっていても、条件を満たす場合にコピーできるように変更
ルックアップ時の検索パフォーマンスの改善
レコードを選択するダイアログのレコード一覧のUIを改善
レコードが完全にキャッシュされていない状態で、存在しない値をルックアップしようとした際にエラーが発生する問題を修正
レコードを選択するダイアログのヘッダーにフィールドコードではなくフィールド名を表示するように変更
ルックアップをクリア後、処理を元に戻すボタンを追加
対象フィールドを選択するダイアログの並び順を変更する設定を追加
プラグイン設定が不十分な場合、警告を表示するように変更
フェールソフトモードを追加
レコード取得時に使用していたカーソルAPIを廃止し、レコード番号を使用するように変更