3年ほどkintoneを標準/JavaScript/サポート範囲外のゴリ押し問わずカスタマイズしてきましたが、わかった事は、kintoneは標準機能だけでも大体の事はできるという事。
ルックアップ、関連レコード一覧で他のアプリを参照したり、ワークフローを設定したり、アクセス権を設定したり・・・etc
ただ、大体の事ができる、という事はできない事もある。というわけで、「これってkintoneでできる?」という質問に「(大体の事はできるし)できます」と答えてしまい、結果できない(少なくとも標準機能では)。という事が何回か・・・。
というわけでkintoneカスタマイズ未経験者がハマりそうな注意点について、幾つか覚えがあるので、今回はそれをシェアしたいと思います。問題を挙げるだけではなんなので、解決策も挙げていきます。
標準機能でできると思ったら意外とできなかった事
文字列結合フィールドを重複禁止に設定する
kintoneでは標準機能で「アプリ内の特定のフィールドに対して重複を禁止する」という設定が可能です。
ただし、「項目Aと項目Bを結合した項目Cの重複を禁止する」という設定はできません。
以下添付画像のように、「自動計算する」にチェックすると、「重複を禁止する」が設定できないんですよね。
解決方法
解決方法としては以下が挙げられます。
項目Aと項目Bを連結した値を項目Cに設定するJavaScriptカスタマイズをする。
※項目Cは自動計算をしない通常の文字列1行フィールド。自動計算をしないので、重複禁止が設定できる。
カスタマイズの難易度としては低いです。また、文字列結合のサンプルプラグインも存在する為、プラグインを使用しても良いでしょう。
自アプリをルックアップする
ケースとしては、例えば以下の様な問い合わせ管理アプリがあるとします。
「1レコード:1問い合わせ」で管理しますが、中には似たような問い合わせもあるでしょう。問い合わせを紐付ける為、サブテーブルで自アプリの問い合わせNoをルックアップしたいのですが・・・
「関連付けるアプリ」に自アプリが出てこない為、ルックアップできない。
関連レコード一覧は自アプリの参照ができるけど、ルックアップはできないのが気になるところですが・・・。
解決方法
解決方法は以下が挙げられます。
自アプリを参照するJavaScriptカスタマイズ、もしくはプラグインを使用することになります。対象レコードの絞込み、対象レコード選択の為のポップアップウィンドウ表示と、やや込み入ったカスタマイズとなります。
ルックアップの拡張プラグインも幾つかサードパーティからリリースされているので、そちらを利用しても良いでしょう。
関連レコード一覧の紐付けにルックアップフィールドを設定する
これといったケースが思いつかない。
確か「これできないのか・・・」と悩んだ記憶があるのですが、どんなケースだったか忘れてしまいました・・・!
解決方法
解決方法は覚えていました。以下の通りです。
ルックアップのコピー先に、ダミーの紐付け用フィールドを設定します。つまり標準機能で解決可能。ちょっと気に食わないのは意味の無い(紐付けの為だけの)フィールドが存在してしまうと言う事。可能であればダミーフィールドは編集不可にしたい所。
自力でゴリゴリと、ルックアップフィールドで紐付け可能な関連レコード一覧相当のフィールドを描画する、というのも可能ですが、中々高度。現実的には前者の対応になるかと思います。
スペースのウィジェットをカスタマイズする
2019年7月のアップデートでポータルのカスタマイズAPIは実装されましたが、記事執筆時点ではスペースのカスタマイズについては未対応。
実際の運用では各部署毎にスペースを切って運用する事がほとんどかと思います。そうなるとアプリのデータを取得して独自の内容を描画するところもポータルではなくスペースにしたいところなのですが・・・。
解決方法
これに関しては以前記事を書いたので、以下が参考になるかと思います。
ドメイン全体に適用するJavaScriptを使用してカスタマイズしますが、少しコツがいります。
レコードのアクセス権で日付フィールドと「当日」と比較する
これも何故できないんだろう、と疑問。
kintoneでは標準機能で「アプリ」「レコード」「フィールド」に対して柔軟にアクセス権を設定できますが、「レコード」に対してのアクセス権で日付フィールドと「当日」の比較ができないんですよね。
アクセス権の設定画面を見ると、比較対象の日付を固定で設定する形です。
これだと、現在日付 > 公開期限 になったらレコードを非表示にしたい、とかができない。
解決方法
これに関しては胸を張って解決方法と言えるものが思いつかない・・・。
JavaScript/プラグインでのカスタマイズとなりますが、現在日付と日付フィールドを比較し、アクセス権を設定する、という中々高度な内容。また、ざっとプラグインを探してみましたが見つかりませんでした・・・。
考えてみると、現在日付とは結局の所端末の日付から取得する為、変更が可能。つまりアクセス権設定の強行突破が可能と言えば可能。だから実装されていない・・・?
おわりに
解決方法を挙げていてなんですが、「自分がやりたい事、でも仕組み上できない事」は、そもそもやり方が違うか、やる必要が無い事、という可能性もあるので、ゴリゴリとJavaScriptカスタマイズをする前にアプローチを変えてみる、というのも良い手かと思います。