kintone フィールドを一括で非活性化する方法について

# はじめに
kintoneアプリ開発でフィールドを一括で非活性化したい事はないでしょうか。例として案件アプリのステータスが受注確定したタイミングで、それ以降はアプリの内容を編集できない様にしたいといったケースです。
kintone標準機能ではアクセス権の設定という機能があり、レコードやフィールド単位で参照可否を設定することは可能です。ただしレコード単位の設定では一部のみフィールドを活性化とすることは出来ません。またフィールド単位の設定では１フィールドずつ設定する必要があり、フィールド数が多いアプリでは設定が大変です。そこでjavasqriptを利用して比較的簡単に実現できる方法を紹介します。

# サンプルアプリ
実際にサンプルアプリを利用して実践してみたいと思います。
サンプルアプリの案件ステータスが「引き合い」の状態から「受注」に更新後、編集画面を開いた際に各フィールドが非活性になる事を確認したいと思います。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705941/daa83be3-5eda-cbfc-d9e5-c5d2026b64ca.png)

＜js実装前の編集画面＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705941/081df1f0-2974-ceaf-b2af-54ee61d26799.png)


＜サンプルコード＞
```javascript
(function () {
    "use strict";

    kintone.events.on('app.record.edit.show', function(event) {
        var record = event.record;              // レコード情報

                // 項目非活性制御
                if(record['案件ステータス'].value === "受注" ){

                    // フィールドタイプの設定
                    var types = ['SINGLE_LINE_TEXT','MULTI_LINE_TEXT','RICH_TEXT','NUMBER','DATE','DATETIME','TIME',
                                 'DROP_DOWN','RADIO_BUTTON','CHECK_BOX','MULTI_SELECT','USER_SELECT','ORGANIZATION_SELECT','GROUP_SELECT','LINK','FILE'];

                    // アプリ内のフィールドコードを取得し、指定のフィールドタイプであれば非活性とする。
                    var arr = Object.keys(record);
                    arr.forEach(function(fcode) {
                        if (types.indexOf(record[fcode].type) >= 0) {
                            record[fcode].disabled = true;
                        }
                    });
                }
        return event;
    });
})();
```

＜js実装後の編集画面＞
　案件ステータスが受注の場合、各フィールドが非活性になる事が確認できると思います。
　全て非活性とするのであればアプリのアクセス権で設定すれば良いので、案件名だけ活性とするように修正したいと思います。
　また、テーブルに関しては別途、設定が必要の為、合わせて修正したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705941/94ad2029-a1cd-34dd-e613-1d26882348cb.png)

＜サンプルコード２＞
```javascript
(function () {
    "use strict";

    kintone.events.on('app.record.edit.show', function(event) {
        var record = event.record;              // レコード情報

                // 項目非活性制御
                if(record['案件ステータス'].value === "受注" ){

                    // フィールドタイプの設定
                    var types = ['SINGLE_LINE_TEXT','MULTI_LINE_TEXT','RICH_TEXT','NUMBER','DATE','DATETIME','TIME',
                                 'DROP_DOWN','RADIO_BUTTON','CHECK_BOX','MULTI_SELECT','USER_SELECT','ORGANIZATION_SELECT','GROUP_SELECT','LINK','FILE'];

                    // アプリ内のフィールドコードを取得し、指定のフィールド意外、非活性とする。
                    var arr = Object.keys(record);
                    arr.forEach(function(fcode) {
                        if (types.indexOf(record[fcode].type) >= 0) {

                            // 特定項目を指定して非活性化対象外とする
                            if(!(fcode === "案件名") ){
                                record[fcode].disabled = true;
                            }
                        }
                    });

                    // テーブル項目の非活性化
                    record['テーブル'].value.forEach((r) => {                  
                        r.value.製品.disabled = true;
                        r.value.数量.disabled = true;
                        r.value.単位.disabled = true;
                        r.value.単価.disabled = true;
                        r.value.金額.disabled = true;
                    });
                }
        return event;
    });
})();
```

＜js実装後の編集画面２＞
　案件名だけ活性状態のままである事が確認できたと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2705941/7cb899fe-278c-1e8d-60c5-7f77c502c5d3.png)

# おわりに
kintone標準機能だけでも出来ないことはないですが、設定の効率化やメンテナンス性を考えた場合にjavascriptを利用して
カスタマイズする事も一つの選択肢かと思います。簡単なコーディングですぐに実装できるので一度試してみてはどうでしょうか。