こんにちは!
バックエンドエンジニアのコバックです。
バックエンド
エンジニア
コバック
今回は、最近案件で使用していたkrewData(kintoneプラグイン)についてお話をしたいと思います。
krewDataとは
今kintoneプラグインの一種で、アプリのデータはもちろん、
外部ファイルなどからもデータを取得し、集計・計算・出力などを行うことができます。
KrewData公式サイトはこちら
発生した現象
アプリA、B、Cがあります。
アプリAにある数値フィールドをアプリBのルックアップフィールドでキーとして参照しており、
さらにそのルックアップフィールドをアプリCのルックアップフィールドでキーとして参照しています。
なぜアプリCからアプリAへ直接ルックアップを行わないのかというと、
アプリCにてルックアップのリンクを押下した際、アプリBへ遷移してほしいからです。
また、大本となるアプリAの数値フィールドに、「値の重複を禁止する」というオプションを設定しておきます。
これを設定したフィールドは、レコード間で重複する値を登録できなくなるので、
レコードを特定するキーとして使用できるようになります。
この状態でkrewDataの出力アプリ設定にて、
アプリCの当該ルックアップフィールドを更新キーとして設定すると・・・
なんか怒られました。
直接のルックアップ先になっているアプリBにも「値の重複を禁止する」を設定する必要があるのかな?
アプリBの設定画面を開いて、ルックアップフィールドの設定を変更します。
「値の重複を禁止する」の設定項目がない・・・
どうやらルックアップフィールドには「値の重複を禁止する」を設定することができないようです。
どうしようもないので公式に問い合わせ
色々試してみましたがどうしようもなくなり、krewDataのサポートページから問い合わせることに。
数日後いただいた回答の要点をまとめると
- ルックアップフィールドの値を変更(今回の場合、アプリCのルックアップフィールド)する際には、
コピー元フィールド(アプリBのルックアップフィールド)の「値の重複を禁止する」を設定する必要がある。 - これはkintone APIの仕様のため、変更することはできない。
詰みました。前述の通りルックアップフィールドには「値の重複を禁止する」を設定できないため、どうしようもありません。
代替案もいくつか添えていただいていましたが
- アプリCからアプリAを直接参照する
- アプリCをルックアップフィールドではなく文字列(1行)にする。
これは前述の通り。アプリC→アプリBへ遷移できなくなるため×。
アプリAの内容をルックアップで取得する必要があるため×。
と、いずれもやりたいこととは少しマッチしない内容でした。
仕方がないので妥協案を考える
できないことはできないので、妥協案を考えることに。
まず今回の必須要件と、変更不可の仕様を整理します。
-
必須要件
- アプリA→B→Cとルックアップフィールドで紐づけ、
アプリCからアプリAの情報を取得できるようにする。 - ルックアップフィールドのリンクを押下した際、
アプリCからアプリB、アプリBからアプリAへ遷移できるようにする。
-
変更不可の仕様
- ルックアップフィールドの値を変更する場合、
コピー元フィールドの「値の重複を禁止する」を設定する必要がある。 - 「値の重複を禁止する」は数値や文字列フィールドにしか設定できず、
ルックアップフィールドに設定することはできない。
まず、要件を満たすため、アプリA→B→Cのルックアップを解除することはできません。
そして、仕様のため、コピー元には「値の重複を禁止する」を設定する必要があり、
これはルックアップフィールドに設定することはできません。
つまり、
アプリ間のルックアップの関係性は保ったまま、アプリB→Cのルックアップ元を数値フィールドにすれば
実現できそうです。
とはいえアプリBのルックアップを解除するわけにもいかないので、
ルックアップでキーとして設定しつつ、同じ値をアプリBに新設した数値フィールドにセット。
アプリCのルックアップからはそちらを参照するようにしました。
新設した数値フィールドに「値の重複を禁止する」を設定することも忘れずに。
この状態でkrewDataの設定を再度確認すると・・・
無事エラーが消えました!
実際に出力してみても問題なく、
アプリC→B→Aとルックアップのリンクを押下して遷移することも可能に。
目的を達成できた代償として、アプリBにルックアップフィールドの内容と重複するフィールドが増えてしまいましたが、
アプリの最下部に【krewData集計用】みたいな名前をつけて置いておいてもいいし、JSやプラグインで非表示にしてもいいし、
そこまで影響は大きくないのではないかと思います。
最後に
kintoneやkrewDataはすごく便利で使いやすいツールですが、こんな感じで仕様の壁にぶつかることもよくあります。
それをうまく回避しながら、最小の影響で要件を満たす方法を考える必要があり
そこが難しくも面白いところだなと思います!
ロジカルスタジオではエンジニアを募集しています。
気になる方は↓こちら↓をチェック!!