在 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
函式負責檢查欄位是否存在,若存在則禁用。將重複邏輯抽象為函式,能提升程式碼的可讀性與可維護性。
處理欄位操作時必須考量欄位不存在或存取權限不足的情況。透過可選串連運算子與條件判斷,可以有效避免錯誤,提升程式穩定性。進一步將重複邏輯模組化,則能大幅改善程式的易讀性與可擴充性,打造更穩健的客製化應用程式。透過這些技巧,不僅能提升開發效率,也能提供使用者更佳的體驗。