はじめに
kintoneのサブテーブルはリスト状の入力項目を簡単に実現できて便利です。サブテーブルの入力項目を分担する場合など、部分的に項目値を固定したい場合があります。そこで、今回は列単位で項目内容の固定化(編集無効化)を行うサンプルコードを作成します。
サンプルアプリ
"明細固定"項目の変更で明細テーブルの列の項目内容の固定化、固定化解除を行うことを想定しています。アプリのフィールドのアクセス権で"明細固定"項目の編集権を特定ユーザのみに付与することで、
付与されたユーザ以外は明細テーブルを変更できなくすることができます。明細テーブルの内容の承認単量ユーザにのみ、"明細固定"項目の編集権を与えておけば、簡易的ですが承認システムになります。
サブテーブルの項目内容の固定化を行うタイミング(イベント)について
サブテーブルの項目内容の固定化を行うためには、サブテーブルの行内の項目が実際に生成されていなければなりません。何が言いたいかというと、レコードの新規作成画面でサブテーブルが初期状態(空欄の行が1行表示されているだけ)の場合、サブテーブル内のレコードデータが存在しないため、項目の無効化ができません。このため、基本的にレコード編集画面のshowイベントか、レコード編集画面で項目値のchangeイベントが発生した場合タイミングでレコード項目の固定化処理を行う形になります。
全体のソースはこんな感じです。
(function() {
"use strict";
var events = [
'app.record.edit.change.明細固定'
];
kintone.events.on(events, function(event) {
// イベントからレコード取得
var record = event.record
// サブテーブル項目のdisabledプロパティへの設定値を格納
var disabledflg;
//明細固定のモード判定
if(record['明細固定'].value == '固定'){
disabledflg = true;
}else{
disabledflg = false;
}
//サブテーブル項目(列)の編集無効化設定
record['明細テーブル'].value.forEach((r) => {
r.value.品目コード.disabled = disabledflg;
r.value.品名.disabled = disabledflg ;
});
return event;
});
})();
サンプルアプリでは、"明細固定"項目の変更で、固定と固定解除を切替える想定のため、'app.record.edit.change.明細固定'イベントを対象として、サブテーブル項目内容の固定化(編集無効化)を行います。
サブテーブル項目のvalueは行の配列となっており、項目の固定化(無効化)プロパティは項目単位で行う必要があります。今回のサンプルではforEachで行を取得し、行の項目(列)単位でdisabledプロパティ値の設定を行っています。列単位での固定化の例として、数量列は固定されないようにしています。(数量のみ変えられる想定)
実際にレコード編集画面で確認すると以下のように表示が切り替わります。
'明細固定'項目を「固定」に変更した場合
'明細固定'項目を「固定解除」に変更した場合
おわりに
今回の例では、サブテーブルの列単位での項目内容の固定化を行いましたが、項目単位でdisabledプロパティが存在するため、行単位やテーブル内の特定の項目だけ固定化する等の応用が可能です。