kintoneのフィールドをリードオンリーにする

ある程度まではアプリの設定→アクセス権で実現可能なのですが、どうしても権限設定の組み合わせではうまくいかないことがあります。そんな時にはJavaScriptカスタマイズ。

フィールドの全ての要素を編集不可にする


function disableAllFields(record, excludedSubTable) {
    for (let field in record) {
        let f = record[field];
        // 網羅できてないかも
        if (f.type == 'SINGLE_LINE_TEXT' ||
            f.type == 'MULTI_LINE_TEXT' ||
            f.type == 'DATETIME' ||
            f.type == 'USER_SELECT' ||
            f.type == 'FILE' ||
            f.type == 'RADIO_BUTTON'
        ) {
            f.disabled = true;
        } else if (f.type == 'SUBTABLE' && !excludedSubTable) {
            disableSubTable(f);
        }
    }
}

サブテーブルの全ての要素を編集不可にする

サブテーブル右側に表示されている行追加、削除ボタンを非表示にするapiは提供されていません。よってボタンのclassを調査して、classに対し、disable:noneを定義しています。よってkintoneの仕様が変わってしまうと、うまく動きません。


function disableSubTable(subTable) {
    for (let i = 0; i < subTable.value.length; i++) {
        let r = subTable.value[i].value;
        for (let v in r) {
            r[v].disabled = true;
        }
    }

    // サブテーブル右側に表示されている行追加、削除ボタンを非表示にする
    // kintone apiでは機能提供されていないので、HTMLのheadにstyleタグを挿入している
    let el = document.createElement('style');
    el.id = "hidden-subtable-button";
    el.textContent = ".subtable-operation-gaia .add-row-image-gaia, .subtable-operation-gaia .remove-row-image-gaia  { display: none; }";
    let head = document.getElementsByTagName('head');
    head[0].appendChild(el);
}