在設計 kintone 應用程式時,我們經常需要為每筆記錄指定一個「唯一鍵」,以便於後續資料查找、關聯或更新。然而,許多開發者在初期設計時,往往會直接使用 kintone 自動產生的「記錄號碼」(Record Number)作為唯一鍵值,但這樣的做法其實存在潛在風險,不建議作為長期且穩定的設計方式。
kintone 的「記錄號碼」是由系統自動產生的欄位,且只會遞增,因此它雖然能夠在同一個應用程式內保持唯一,但這個數值的生成方式,決定了它無法在不同環境或資料移轉時保持一致,主要原因包括:
記錄號碼是系統自動賦予的流水號
每新增一筆記錄,kintone 會自動給予一個新的記錄號碼,數值只會不斷增加,並且不會因為刪除記錄而回補編號。例如:新增了 10 筆記錄後刪除第 5 筆,下一筆新增的記錄號碼將會是 11,而不是補上被刪除的 5。
匯入順序會影響記錄號碼
當將某個應用程式的資料匯出後,再匯入到另一個相同結構的應用程式時,記錄號碼是由目標應用程式根據匯入的順序自動產生的,因此無法與來源應用保持一致。例如:若先匯入 A、B、C 三筆資料,A 會是編號 1,但若改為先匯入 B、A、C,B 會變成編號 1,這就產生了差異。
應用程式曾有刪除記錄的歷史
如果來源應用程式中,曾經有部分資料被刪除,原有的記錄號碼會出現跳號現象,而當這些資料匯入到新的應用程式時,新應用會從當前最新記錄號碼往後遞增,完全無法對應原有的記錄號碼。
因此,不論是手動使用 CSV、利用 cli-kintone 批次匯入、或者是透過 API 進行資料還原,這些作業都無法保證記錄號碼的一致性。一旦應用之間有 Lookup 欄位、或需要以記錄號碼作為唯一識別鍵,將面臨資料對應錯誤、參照失效等風險。
為了避免記錄號碼在不同環境下不一致的問題,我們強烈建議在應用程式設計階段,就為每筆記錄建立一個「自行定義的唯一鍵值欄位」(建議使用單行文字方塊欄位)。
常見的設計方式包括:
例如以「日期+客戶代碼+流水號」的組合產生鍵值,可透過以下方式實作:
使用單行文字方塊的「自動計算」功能
透過公式將多個欄位的值自動結合,實作簡單,無需撰寫程式碼即可完成。
⚠️ 然而需特別注意:啟用自動計算後,該欄位將無法啟用「值為唯一」設定,因此必須確保結合邏輯本身能保證唯一性,以避免重複鍵值。
使用客製化程式碼或外掛
透過 JavaScript 或外掛功能,將多個欄位的內容結合並輸出至另一個單行文字方塊。此種方式雖需額外實作,但可啟用「值為唯一」設定,較適合作為正式的唯一鍵值使用。
💡 Cybozu 台灣提供的「文字結合外掛(Text Connect Plug-in)」 可協助自動結合多欄位文字,並寫入指定欄位。為免費資源,如有需求可向您的業務負責人或授權經銷商申請使用。
撰寫客製化 JavaScript 程式碼
可透過 kintone REST API 查詢現有資料,再根據需求邏輯產生新的流水號並寫入欄位。
⚠️ 此方式需確保執行程式的使用者具備「存取所有記錄」的權限,否則可能因資料不足而造成重複編號。實務上建議使用具備適當權限的 API Token 進行操作,以避免權限不足問題。
使用外掛
使用官方或第三方提供的外掛,根據條件自動產生遞增編號。其實作原理與客製化程式類似,也需注意使用者權限。多數外掛設計會要求填入 API Token,或提醒使用者設定適當權限。
💡 Cybozu 台灣亦提供免費的「自動編號擴充外掛(Auto-Numbering Plug-in)」,支援五種編碼組合形式:
① 編號 ② 日期+編號 ③ 日期+文字+編號
④ 文字+編號 ⑤ 文字+日期+編號
可依照業務需求彈性設定。如有需求,可洽詢您的業務負責人或授權經銷商申請使用。
「記錄號碼」雖然在單一應用程式中具備唯一性,且可用於排序或基本識別用途,但由於其生成方式與應用環境密切相關,並不適合作為跨應用或長期使用的唯一鍵值設計。若未事先建立可控的識別邏輯,將導致資料在備份、匯入、還原或環境移轉時,產生對應錯誤甚至參照失效等問題。
因此,我們建議在應用程式設計初期即規劃一個穩定且可控的唯一鍵值欄位。無論是透過公式結合、外掛工具、或自訂程式碼實作,只要能確保鍵值的唯一性與可重現性,皆能有效提升資料一致性與系統維護效率,為未來擴充、整合與自動化奠定穩固基礎。