iDempiere
iDempiere 開發者的「三明治」防禦術:如何阻止欄位被核心代碼偷偷抹除?
🥪 iDempiere 開發者的「三明治」防禦術:如何阻止欄位被核心代碼偷偷抹除? 發佈日期: 2026-04-19 標籤: #iDempiere #OSGi #插件開發 #Java #開發技巧 😱 遇見了「消失的數據」 在開發 iDempiere 的 Kanban 插件時,我們遇到了一個超級詭異的 Bug:我們明明在程式碼裡設定了 `R_Request` 的 `EndTime`(結束時間),也確實呼叫了 `save()`,但每次存檔後,那個欄位就像被施了「消失術」一樣,自動變回了 `NULL`。 原本以為是自己寫錯了,結果檢查了半天,發現罪魁敗鞍竟然不是我們。 🕵️♂️ 真凶竟然是... `RequestEventHandler` 我們檢查了 `MRequest.beforeSave()`,一切正常。但我們忽略了 iDempiere 核心裡的一個 OSGi 事件處理器:`RequestEventHandler`。 這個傢伙非常「熱心」,它會監聽 `R_Request` 的所有變動事件。最致命的是,它在執行 `beforeSaveRequest()` 時,為了清理暫存欄位,會無條件地執行這行代碼: r.setEndTime(null);...
2026-04-20 · 閱讀 3 分鐘