kintone(キントーン)の標準機能では実現することができない、ちょっとしたことについてその2です。
【参考】前回の数値・計算フィールドについてはこちらを参照ください。
今回はルックアップについてです。ルックアップの概要は次の通りです。
ルックアップとは、アプリに入力するデータを他のアプリから取得できるようにする機能です。データ入力の手間を省き、入力ミスも防げます。
ルックアップはkintoneを利用する上で欠かせない機能でありとても便利です。しかし使ってみると、出来ると思っていた部分が実は仕様でできかったり、想定していた動きとは異なると思ったことは無いでしょうか。ルックアップは便利な機能である反面、仕様として出来ない部分も多く定義されています。今回の内容を確認することで、ルックアップの特徴を少しでも掴んでいただき、kintone初心者脱却の足がかりにしていただければと思います。
ルックアップで取得した項目は、元アプリ(参照元マスタ)が変更されても更新されない
ルックアップで他アプリの情報を取得後に、参照元アプリのデータを更新するケースというのは多々あります。その際、参照元アプリを更新すれば自動的にルックアップで取得した項目の情報も更新されるものだと思ったのですが、実際はそうではありません。
この例では、ルックアップの元アプリを「マスタ」、ルックアップを使用するアプリを「自アプリ」として定義しています。
次に、マスタ側の名前を「ああああああ」→「ああああああ1」に変更後、自アプリを再表示してみます。
このように、マスタのデータを変えても、自アプリのマスタからルックアップして取得したフィールドのデータは変更されません。
kintoneのヘルプを見ると、次のように書いてあります。
ルックアップ機能を使⽤してコピーしたデータは、コピー元のアプリから独⽴して保存されます。
コピー元のアプリのデータを変更したり、削除したりしても、再度[取得]をクリックするまでは、前回取得したデータが保持されます。
この仕様は、良い面と悪い面の両方を持っています。
良い面としては、保存時の状態を保持しているということです。コピー元アプリを変更しても自アプリのデータが自動的に値が変わることはないため、「なぜか勝手に変更されている」ということがありません。データがユーザ操作以外によって自動的には変わらないという部分が保障されます。
悪い面としては、自動的に変わらないということです。ルックアップ使った場合に多くの人は、「他アプリの情報を参照して取得しているのだから、参照元のアプリの値が変わったら自動的に自アプリの値も変わるだろう」と思ったのではないでしょうか。そのように思っている状態でこの仕様について初めて気付いた際、「なぜ?使いにくい!」と感じてしまいました。
RDBのSQLでイメージすると、自アプリのルックアップ項目を取得する際は内部的に
SELECT A.ID, B.NAME
FROM 自アプリ A, 元アプリ B
WHERE A.ID = B.ID(+)
となっているだろうと思っていたのですが、実際は
SELECT A.ID, A.NAME
FROM 自アプリ A
となっています。ここは、システム開発に携わっている人でもkintoneに触り始めた際は躓くポイントでは無いでしょうか。
このように、ルックアップのコピー元のデータを更新しても自アプリのデータは更新されませんので、kintone標準機能で更新させたい場合は、1つ1つレコードを編集画面を開き、取得をクリックしてデータを最新化するということが必要です。しかし、ルックアップの代用として「関連レコード」フィールドをうまく使うことで解消できる場合もあります。
上記例では、「マスタのID」とは別にフィールド(マスタのID(関連レコード用))を用意し、そのフィールドを条件に関連レコードでマスタの内容を表示しています。関連レコード一覧には画面表示時点の情報が表示されるため、名前が「ああああああ1」と表示されているのがお分かりになるかと思います。
この方法で行った場合、関連レコードは表示時の情報を常に取得するため元アプリのデータが変わっても「取得」を押しなおす必要はありませんが、関連レコードの項目でのグラフ表示での集計が出来ません(検索条件の指定だけであれば可能)。ルックアップで取得したフィールドを集計に利用したい、合わせて元アプリが更新されたら自動的に自アプリのフィールドも更新したい、というような場合は、
- JavaScriptカスタマイズにより、コピー元アプリのデータを変更(保存)した際に、ルックアップを使用している他アプリを一括更新する処理を入れる。
- プラグインを利用する
のどちらかで対応する必要があります。しかし考え方を変えれば「保存時の状態が担保されている」ため、元アプリのデータが変わったからといって自アプリのデータを更新しなおす必要はないかもしれません。必要度によってどうするかを判断しましょう。
ルックアップの取得ボタンクリック時に表示される一覧の検索条件に、アプリの項目を指定できない
この見出しではイメージがつきにくいかもしれませんが、ルックアップの取得ボタンをクリックした際に子ウィンドウが表示されると思います。この子ウィンドウに表示されるデータを抽出する際の条件に、自アプリのフィールドを指定できません。
例えば、次のように自アプリに「区分」というラジオボタンフィールドがあったとします。
ルックアップの子ウィンドウでは、「区分」フィールドと一致する情報のみ表示したいと思っています。これぐらい出来るだろうと思ってルックアップの設定をしてみると・・・出来ません。
固定値では条件指定できますが、画面の内容によって動的に条件を変えるということが出来ません。(2019年7月時点)
この部分はkintone標準機能として機能拡張を大いに期待する部分でもあります。対応するにはJavaScriptカスタマイズかプラグインの利用ですが、カスタマイズは結構ハードルが高いと想定されるため、プラグインの利用をお勧めします。
ルックアップの他フィールドのコピーでは、チェックボックスは取得できない
ヘルプを見ずにまずは触ってみようということが多いのですが、この点は盲点でした。ルックアップで他アプリから情報を取得できますが、フィールドの中にはルックアップで対応していないものがあります。ヘルプを見るとこのような記載があります。
ルックアップパーツの項目「ほかのフィールドのコピー」では、コピー元とコピー先に次のフィールドを指定できます。
コピー先 | コピー元 |
---|---|
文字列(1行) |
|
数値 |
|
文字列(複数行) |
|
リッチエディター |
|
ラジオボタン | ラジオボタン |
ドロップダウン | ドロップダウン |
リンク | リンク ※入力値の種類が同じの場合のみ |
日付 | 日付 |
時刻 | 時刻 |
日時 |
|
ユーザー選択 |
|
組織選択 | 組織選択 |
グループ選択 | グループ選択 |
見落としてしまいがちですが、チェックボックスは書いてありません。同様に、計算、複数選択、添付ファイル、関連レコード一覧、ルックアップ、スペースもコピーできません。(2019年7月時点)
アプリを作成する場合、「他アプリにてルックアップの”ほかのフィールドにコピー”に使用する可能性があるか」を考慮してフィールドの種類を選ぶ必要があるかもしれません。特に、チェックボックスと複数選択フィールドを利用する際は少し注意してみましょう。
ルックアップで自アプリを指定できない
ルックアップでは、「関連付けるアプリ」に自アプリを指定できません。関連レコードフィールドでは自アプリを指定できるため、ルックアップでも自アプリを指定できると思いがちですが、実際はそうではありません。
利用頻度は多くないかもしれませんが、自アプリを指定できるようになるといいですね。
まとめ
キントーンのルックアップは便利な反面、出来ない部分も多少あります。仕様を理解して使うことでアプリ作成時の手戻りも減らせますし、運用開始後に「想定と違う!」ということも減らせます。一度ヘルプをよく読んでみることがいいかもしれません!