フィールドの入力制限・可否の変更
ここでは kintone における、アプリの各フィールドの入力可否を操作する方法を解説します。
ルックアップと関連付けたフィールドなど、強制的にフィールドが入力不可になる設定がありますが、今回紹介する方法で手入力可能にできます。
ルックアップについては、再度ルックアップを取得したタイミングや、データの取り込みを行ったタイミングで手入力部分は消えてしまうため、その点は注意してください。
ソースコード
フィールドの入力可否はkintone JavaScript APIを利用することで実現できます。
kintone.events.on のコールバック関数内で実行する場合
kintone.events.on('...', (event) => {
event.record['フィールドコード'].disabled = false;
return event;
});
予め設置したボタンのクリック時など、独自のタイミングで実行する場合
/** 実行時のレコード情報 */
const { record } = kintone.app.record.get();
// フィールドの入力可否を設定
record['フィールドコード'].disabled = false;
// レコード情報をセット
kintone.app.record.set({ record });
上記のコードで実装可能です。
注意点
kintone JavaScript API には実行時点のフィールド情報を取得する機能がいくつか用意されていますが、フィールド情報を操作した場合、必ず変更後のフィールド情報を API に返さなければなりません。
kintone.events.onのコールバック関数では、return event の部分。ボタンクリック時では、kintone.app.record.set({ record });の部分がないと、正しく反映されません。
kintone.app.record.getで取得できるオブジェクトの直下に各フィールドがあるのではなく、recordプロパティの中に各フィールドがあります。kintone.app.record.setには、取得したときと同じ構造のオブジェクトを渡す必要があります。
// レコード情報を取得
const { record } = kintone.app.record.get();
// フィールドの入力可否を設定
record['フィールドコード'].disabled = false;
// レコード情報をセット
kintone.app.record.set(record); // これはNG (recordプロパティを持つ構造ではない)
kintone.app.record.set({ record }); // これはOK
実行できるイベント
disabledの変更は、レコード追加・編集画面の表示イベント(app.record.create.show、app.record.edit.show)や、フィールド値の変更イベント(app.record.create.change.フィールドコードなど)といった、画面上のレコードを操作できるイベントで有効です。一覧画面など、編集できない画面では反映されません。
なお、disabledに指定するのは「フィールドコード」です。コードは、アプリの設定画面で各フィールドに設定されている値を確認してください。