在 kintone 應用程式中,其實已經內建相當完整的「通知」機制。
透過「記錄的通知條件」,我們可以設定:當某個欄位的值符合指定條件時,通知特定人員。
但在實務上,常會遇到一個落差:
在以下這類場景中,就會顯得有些不夠用:
本文將介紹如何透過簡單的客製化程式碼,搭配「記錄的通知條件」,來實現「欄位值變動時通知」的效果。
關鍵觀念只有一個:
通知條件只能判斷「欄位目前的值」,
那我們就自己準備一個「變動旗標欄位」,在有變動時讓它「從不符合 → 符合」。
實作步驟大致如下:
接下來用兩個實際案例來說明。
在應用程式中新增一個數值欄位:
0
在「記錄的通知條件」中設定:

(() => {
'use strict'
// 編輯送出前:計算金額差異
kintone.events.on(['app.record.edit.submit'], async event => {
try {
const record = event.record
const amount = Number(record['金額'].value)
// 取得編輯前的記錄資料
const kres = await kintone.api(
kintone.api.url('/k/v1/record'),
'GET',
{
app: kintone.app.getId(),
id: record.$id.value
}
)
const previousAmount = Number(kres.record['金額'].value)
// 將差額存入變動欄位
record['金額變動'].value = amount - previousAmount
} catch (error) {
window.alert(error.message)
console.error(error)
}
return event
})
// 編輯成功後:將變動欄位歸零
kintone.events.on(['app.record.edit.submit.success'], async event => {
try {
await kintone.api(
kintone.api.url('/k/v1/record'),
'PUT',
{
app: kintone.app.getId(),
id: event.record.$id.value,
record: {
金額變動: { value: 0 }
}
}
)
} catch (error) {
window.alert(error.message)
console.error(error)
}
return event
})
})()
kintone 的通知邏輯是:
只有在「條件從不符合 → 符合」時,才會發送通知
如果「金額變動」一直維持非 0:
因此,在通知送出後主動歸零,是這個做法能反覆運作的關鍵。

(() => {
'use strict'
kintone.events.on(['app.record.edit.submit'], async event => {
try {
const record = event.record
const users = record['關聯人員'].value
// 取得編輯前的記錄
const kres = await kintone.api(
kintone.api.url('/k/v1/record'),
'GET',
{
app: kintone.app.getId(),
id: record.$id.value
}
)
const previousUsers = kres.record['關聯人員'].value
let usersChanged = 0
if (users.length !== previousUsers.length) {
usersChanged = 1
} else {
const previousUserIds = previousUsers.map(u => u.code)
for (const user of users) {
if (!previousUserIds.includes(user.code)) {
usersChanged = 1
break
}
}
}
record['關聯人員變動'].value = usersChanged
} catch (error) {
window.alert(error.message)
console.error(error)
}
return event
})
kintone.events.on(['app.record.edit.submit.success'], async event => {
if (Number(event.record['關聯人員變動'].value) === 0) {
return event
}
try {
await kintone.api(
kintone.api.url('/k/v1/record'),
'PUT',
{
app: kintone.app.getId(),
id: event.record.$id.value,
record: {
關聯人員變動: { value: 0 }
}
}
)
} catch (error) {
window.alert(error.message)
console.error(error)
}
return event
})
})()
此做法的特性是:
如果你的業務邏輯中,人員的順序本身就具有意義(例如第一順位負責人、第二順位備援人員),
則可以改為直接比對整個陣列內容與順序,而不採用此種「忽略順序」的判斷方式。
⚠️ 操作者本人不會收到通知
這是 kintone 原本的通知設計邏輯:
「自己做的操作,自己已經知道了,不需要再通知一次」
因此在開發與測試時,請務必注意:
建議測試方式:
透過以上做法,我們僅需透過少量前端程式碼,即可活用 kintone 本身的通知機能,同時實現更精細的「欄位值變動通知」。
如果公司內部常有這類的使用場景,甚至可以考慮將功能外掛化,更方便重複利用與設定。