お世話になっております。
表題の件で質問させてください。
プロセス管理のアプリで承認のステータスになった場合にKintoneのレコードのアクセス権で更新不可にしております。
しかし、運用上どうしてもAというフィールドのみ承認後も編集する必要があります。
この場合、修正方法として思いつくのは「承認時にA以外のフィールドをJavaScriptで更新不可にする。」という方法ですが、今後の運用を考えた場合、A以外のフィールドすべて&今後追加するフィールドも更新不可にしていくとなるとメンテナンスが大変です。
よりよい方法がないかこちらでお知恵をお貸しください。
takokichi さん
JavaScript で、“A” 項目以外を更新不可にしてはいかがですか?
コードは、切り貼りしただけで未検証ですが、考え方はわかると思います。
(function() {
"use strict";
var ftypes = [' __ID__',' __REVISION__','RECORD_NUMBER', 'CREATED_TIME', 'UPDATED_TIME', 'CREATOR', 'MODIFIER', 'CALC', 'STATUS'];
kintone.events.on(['app.record.edit.show','app.record.create.show','app.record.index.edit.show'], function(event) {
var record = event.record;
if (record['ステータス'].value === '承認') {
var fcodes = Object.keys(record);
fcodes.forEach(code) {
if (code !== 'A' && ftypes.indexOf([record[code].type]) < 0) {
record[code]['disabled'] = true;
}
};
}
retuen event;
});
})();
あとは、項目検証プラグインで項目ごとにステータス=="承認"で、入力不可設定する等がありますが、
項目追加の都度、プラグイン設定も追加する必要があります。
rex0220さん
いつも回答していただきありがとうございます。
回答内容確認しました。
2案提示していただきありがとうございました。
JavaScriptの実装方法いいですね。メンテナンスも不要ですしこちらで実装しようと思います。
ありがとうございました。
rex0220さん
お世話になっております。
実装してみたのですが、テーブルフィールドのdisableの実装が他と違ったため以下の通り、
テーブルの時のみ実装を変更するようにしました。
その際、’テーブルカラム’を指定する必要があるため可変での実装が実現できません。
if (code !== ‘コード’ && ftypes.indexOf([record[code].type]) < 0) {
if ([record[code].type] == ‘SUBTABLE’) {
record[code].value[0].value[‘テーブルカラム’].disabled = true;
}else{
record[code][‘disabled’] = true;
}
}
可変で取得する方法があればご教授願います。
サブテーブルも同様にループ処理できます。
切り貼りしただけですので、検証してください。
見直したら、前回もあちこち間違ってました。
(function() {
"use strict";
var ftypes = [' __ID__', ' __REVISION__', 'RECORD_NUMBER', 'CREATED_TIME', 'UPDATED_TIME', 'CREATOR', 'MODIFIER', 'CALC', 'STATUS'];
kintone.events.on(['app.record.edit.show', 'app.record.create.show', 'app.record.index.edit.show'], function(event) {
var record = event.record;
if (record['ステータス'].value === '承認') {
var fcodes = Object.keys(record);
fcodes.forEach(function(code) {
if (code !== 'A' && ftypes.indexOf(record[code].type) < 0) {
if (record[code].type === 'SUBTABLE') {
var subtable = record[code].value;
subtable.forEach(function(row) {
var tcodes = Object.keys(row.value);
tcodes.forEach(function(tcode) {
if (ftypes.indexOf(row.value[tcode].type) < 0) {
row.value[tcode]['disabled'] = true;
}
});
});
} else {
record[code]['disabled'] = true;
}
}
});
}
return event;
});
})();