在 kintone 的客制化开发中,经常需要透过 Event Object 来操作栏位,包括取得和更新栏位值、限制栏位是否可编辑、以及在栏位下方显示错误提示等。
使用 Event Object 操作栏位非常简单,只需在事件处理器(Event Handler)中透过 event.record.栏位代码 取得栏位物件,然后对其属性进行修改,即可完成相关操作。
范例程式码:
kintone.events.on(\'app.record.create.show\', event => {
const { record } = event
// 取得栏位
const fieldA = record.fieldA
const fieldB = record.fieldB
fieldA.value = \'N\' // 将栏位 fieldA 的值设为 \'N\'
fieldB.disabled = true // 禁止编辑栏位 fieldB
return event
})
上述程式码示范了如何修改栏位的值与属性,但若遇到栏位代码不存在的情况,就可能发生以下错误:
Uncaught TypeError: Cannot read properties of undefined (reading \'value\')Uncaught TypeError: Cannot set properties of undefined (setting \'disabled\')
这是因为当 event.record.栏位代码 不存在时,对应的栏位物件为 undefined,因此无法存取其属性如 value 或 disabled,导致程式码抛出错误并中断执行。
此外,若登入使用者不具备栏位的存取权限,Event Object 中也不会包含该栏位,这点在开发时需要格外注意。
善用可选串连运算子与条件判断避免错误
kintone 的弹性设计让使用者可以随时依照需求调整应用程式内容,包含栏位和权限设置。然而,这些变更若未同步更新客制化程式码,就可能引发错误。例如栏位代码被修改、栏位被删除、新增了栏位权限使部分使用者无法存取该栏位等,就是造成客制化程式码出错的常见原因。
因此,在操作栏位物件时,应加入条件判断,避免因栏位不存在而中断程式运行。
以下范例展示几种解决方法:
范例一:使用可选串连运算子
kintone.events.on(\'...\', event => {
const { record } = event
const fieldA = record.fieldA?.value || \'\'
// ...
return event
})
此写法会在存取 record.fieldA.value 前,先检查 record.fieldA 是否存在。如果不存在,则回传 undefined,而不会抛出错误。后续可搭配 OR 运算子 || 设定预设值,确保程式正常运作。
范例二:检查多个栏位并设置错误讯息
kintone.events.on(\'app.record.edit.submit\', event => {
const { record } = event
const targetFields = [\'fieldA\', \'fieldB\', \'fieldC\']
targetFields.forEach(field => {
if (record[field]?.value === \'-\') {
record[field].error = \'请选择项目\'
}
})
return event
})
此范例针对选项按钮栏位进行必填检查。由于选项按钮不像下拉选单可以选择未填作为预设值,如果要让选项按钮也有必填的效果,需自行定义未填值(如: \'-\'),并透过程式检查。利用 forEach 方法可有效简化逻辑,让多个栏位的检查变得更直观。即使某栏位不存在,程式也能顺利执行,避免错误。
范例三:根据条件动态禁用栏位
kintone.events.on(\'app.record.edit.show\', event => {
const { record } = event
const progress = record.progress?.value
const disableFields = fields => fields.forEach(field => {
if (record[field]) {
record[field].disabled = true
}
})
if (progress === \'A\') {
disableFields([\'fieldA\', \'fieldB\', \'fieldC\'])
} else {
disableFields([\'fieldD\', \'fieldE\'])
}
return event
})
此范例根据 progress 栏位的值动态决定需禁用的栏位。disableFields 函式负责检查栏位是否存在,若存在则禁用。将重复逻辑抽象为函式,能提升程式码的可读性与可维护性。
结语
处理栏位操作时必须考量栏位不存在或存取权限不足的情况。透过可选串连运算子与条件判断,可以有效避免错误,提升程式稳定性。进一步将重复逻辑模组化,则能大幅改善程式的易读性与可扩充性,打造更稳健的客制化应用程式。透过这些技巧,不仅能提升开发效率,也能提供使用者更佳的体验。