kintoneのアクション機能って便利だよね
あるkintoneアプリから別のアプリにレコードの内容をコピーしたい場合、ノンプログラミングで実現できてしまうのが「アクション」という機能(わからない人はこちら)。
これが結構便利で、プログラムが不要なのでメンテナンスもラクということで良く使う機能の1つです。
例えば、案件を管理しているアプリから顧客情報を引っ張ってきて別のアプリで請求書を作成したいという場合。
このように1クリックでコピーできちゃいます。
これがノンプログラミングで実現できてしまうなんて便利!素敵!ということで多用していたのですが、お客様からこんなご要望を頂きました。
コピーされるフィールドは編集不可にしてほしい
kintoneアプリの作成に慣れてくると、フィールドの数がどんどん増えていきます。
気づいてみると50個近くのフィールドが並んでいて、誰がどこまで入力したら良いのかとわかりづらく、使いづらいアプリになりがちです。
そこで編集不可や非表示の設定を細かく設定していくのですが、これもkintoneは標準で機能があり、管理画面にて設定をすることが可能です。
アプリの管理画面から「設定」タブを開き、「アクセス権」の「フィールド」を選択すると、上記のような画面が開かれます。
この画面でフィールドを選択し、編集のチェックボックスを外してしまえば、そのユーザは編集できなくなります。
とっても簡単!kintoneのアプリ開発なんて楽勝!と思って実行してみるとそこには落とし穴が。。。
アプリの管理画面からフィールドのアクセス権限を設定した場合、この制限は何よりも優先的に働くのでアクションによるコピーすらできなくなってしまいます。
例えば、アクセス権限の設定をしたフィールドに対してJavaScriptで更新しようとしても制限が優先されてしまうので、処理は失敗してしまいます。
このアクセス制限は結構厄介で、下手に設定してしまうと至るところに不具合が生じてしまいます(僕は極力アプリの管理画面からフィールドのアクセス権限の設定はしないようにしています)。
それでは、これを解決するためにJavaScriptでアクセス制限の処理を書いていきましょう!
JavaScriptでフィールドを編集不可にする
さて、早速JavaScriptで書いていきましょう。
下記がサンプルコードです(各フィールドコードはフィールド名と同じにしています)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
(function() { 'use strict'; // 新規登録・編集画面の編集権限設定 kintone.events.on(["app.record.edit.show", "app.record.create.show"], function(event) { var record = event.record; var user = kintone.getLoginUser(); // 各フィールドを編集不可にする record['案件No']['disabled'] = true; record['案件名']['disabled'] = true; record['企業名']['disabled'] = true; record['部署名']['disabled'] = true; record['郵便番号']['disabled'] = true; record['住所']['disabled'] = true; record['担当者名']['disabled'] = true; return event; }); })(); |
これをアプリに設置して実行してみると。。。
コピーされた上で、編集不可の設定も効いていますね!
今回は新規登録画面の表示時と編集画面の表示時をトリガーにしていますが、アクションによるコピーが行われた後にこのプログラムが実行されるため、アプリ管理で設定した時とは異なる挙動をしています。
さらにひと工夫!
今回は使用していませんが、
1 |
var user = kintone.getLoginUser(); |
これでユーザ情報を取得できるので、ゲストや特定のユーザのみ編集不可の設定にすることも簡単にできます。
お試しください!