
你的 EndTime 被偷了:iDempiere Model Sandwich Pattern 完全指南 🥪
序章:你的三明治內餡不見了 某個尋常的下午,你打開 iDempiere,滿心歡喜地在 Kanban 看板上設好了工單的 EndTime,按下儲存—— 然後那個欄位就消失了。 不是 UI 的 bug。不是你手殘打錯。資料庫裡確確實實是 NULL。 你重做一次。消失。你再重做。還是消失。你盯著螢幕,沉默了三秒,開始懷疑人生。 歡迎進入本文的主題:有人在廚房裡偷吃你三明治的內餡,而且每次都得逞。 第一章:找到那個偷餡料的傢伙 嫌疑犯列表一開始很長。MRequest.beforeSave()?查過了,清白。你的 Plugin 邏輯?翻遍了,沒問題。Kanban Form?無辜。 真正的犯人躲在核心代碼深處,掛著一個無害的名字: RequestEventHandler,來自 org.adempiere.base。 它悄悄登記了 R_Request 的四個存檔事件: registerTableEvent(IEventTopics.PO_BEFORE_NEW, I_R_Request.Table_Name); registerTableEvent(IEventTopics.PO_BEFORE_CHANGE, I_R_Request.Table_Name); registerTableEvent(IEventTopics.PO_AFTER_NEW, I_R_Request.Table_Name); registerTableEvent(IEventTopics.PO_AFTER_CHANGE, I_R_Request.Table_Name); 每當 PO_BEFORE_CHANGE 觸發,它跑 beforeSaveRequest(),記錄審計歷史、發送通知……然後在最後,毫不猶豫地把你的內餡挖走: // RequestEventHandler.beforeSaveRequest() —...
2026-04-20 · 閱讀 14 分鐘