以 .NET 整合舊有 ERP 的五個實務原則
作者 Eva Lin
這篇文章適合誰
- 營運/IT 主管:評估是否該「整批換 ERP」,還是以 .NET 漸進整合;需要向管理層說明投資優先順序。
- 架構師/開發:負責訂單、庫存、生產排程與舊 ERP 介接的 .NET 團隊。
問題背景
製造業客戶的 ERP 往往已運行十年以上,模組深度客製、報表與結帳流程綁在一起,一次汰換的停機與資料遷移風險難以接受。同時,電商接單、客製報價、即時庫存查詢等新需求又必須上線——於是常見做法是「新系統也寫一份、舊 ERP 也改一份」。
這種雙寫在平日測試可能正常,卻常在月結、出貨尖峰或促銷檔期才暴露:兩邊訂單狀態不一致、庫存被重複扣減、某筆出貨單只存在其中一個系統。承辦人只好人工對帳,IT 被問「到底是哪個系統的錯」。
決策者摘要:整合失敗多半不是 .NET 技術不夠新,而是寫入責任與系統邊界沒定清楚;先定規則再寫程式,比急著上線 API 更省後續維護成本。
原則一:單一寫入來源——避免雙寫
決策者關注: 若訂單狀態兩套系統都能改,出錯時沒有人能負責「最終版」;稽核與客訴都難收斂。
技術重點:
- 為每個業務實體(訂單、庫存異動、出貨單)指定唯一寫入系統;其他系統僅能讀取或透過明確指令請求變更
- 新 .NET 服務若需更新 ERP 資料,應走單一整合通道(API、訊息佇列或批次檔),禁止業務人員同時在兩個畫面手動修改
- 狀態機要文件化:例如
已確認 → 已排產 → 已出貨,並標註哪個狀態轉換由哪個系統觸發
常見陷阱: 為了「先上線」讓新前台直接寫入 ERP 資料表——短期省事,長期每次 ERP 小改版都可能弄斷前台。
原則二:以 .NET API 層包裝舊 ERP
決策者關注: 舊系統介面可能是 COM、預存程序或夜間批次檔,直接讓新模組依賴這些細節,等於把技術債複製到新專案。
技術重點:
- 建立 Integration API(ASP.NET Core):對內提供 REST 或 gRPC,對外封裝 ERP 查詢與寫入邏輯
- 將 ERP 欄位對照、單位換算、客製驗證規則集中在這一層,新功能只呼叫穩定契約
- 對無即時 API 的舊模組,以輪詢佇列 + 狀態回寫取代直接跨庫寫入
- 版本化 API 契約;ERP 升級時先在 staging 驗證對照表,再切換正式流量
相關實績:製造型客戶 ERP 與訂單整合
原則三:定義清楚的系統邊界
決策者關注: 「全部串在一起」聽起來整合度高,實務上卻讓任何小改動都要協調三個廠商。
技術重點:
- 畫出系統邊界圖:哪些流程留在 ERP(結帳、成本核算)、哪些放在 .NET(接單、追蹤、對外 API)
- 跨邊界只交換已驗證的 DTO 或事件,不共用資料庫連線或隱性依賴「某張暫存表」
- 明訂主檔歸屬:客戶主檔在 ERP 還是 CRM?料號以誰為準?歧義處先寫進整合規格
- 排程與即時查詢分離:月結批次不應與白天訂單 API 搶同一連線池
| 邊界類型 | 建議歸屬 | 理由 |
|---|---|---|
| 財務結帳、成本分攤 | ERP | 法遵與既有報表 |
| B2B/B2C 接單、物流追蹤 | .NET 服務 | 變動快、需對外 API |
| 庫存餘額(權威) | 單一指定系統 | 避免雙寫 |
原則四:非同步與事件驅動降耦合
決策者關注: 尖峰時若同步呼叫 ERP 逾時,整個接單流程卡住,營收損失比整合專案預算更明顯。
技術重點:
- 接單流程採非同步:先寫入本地 outbox,背景工作者再推送至 ERP
- 使用訊息佇列(Azure Service Bus、RabbitMQ 等)傳遞「訂單已建立」「庫存已預留」等領域事件
- 實作 outbox pattern:確保資料庫交易與事件發布一致,避免「訂單有、事件沒出去」
- ERP 回寫結果以事件或 webhook 通知下游,而非讓每個模組輪詢同一張表
- 設計冪等鍵(idempotency key),重試時不會重複建立出貨單
實務節奏: 先讓讀取(庫存查詢、訂單狀態)走 API;寫入改為佇列;最後才評估即時雙向同步的必要性。
原則五:可觀測性——每筆整合可追蹤
決策者關注: 出貨延遲時,若只能說「系統有問題」,無法區分是 ERP、網路還是新模組,協調成本會拖垮專案時程。
技術重點:
- 每筆跨系統請求帶 correlation id / trace id,從前台一路追到 ERP 呼叫與佇列訊息
- 記錄請求 payload 摘要、回應碼、耗時;敏感欄位遮罩後留存
- 儀表板區分:同步 API 錯誤率、佇列堆積深度、ERP 維護窗口內暫停次數
- 建立對帳作業:每日比對「.NET 已出貨」與「ERP 已過帳」筆數,差異自動開工單
- 整合層要有斷路器與降級策略:ERP 不可用時,接單仍可暫存並顯示預計處理時間
上線前檢查清單
| 項目 | 通過標準 |
|---|---|
| 寫入責任 | 每個實體有文件化的單一寫入系統 |
| API 契約 | 有版本號與 staging 驗收紀錄 |
| 尖峰演練 | 模擬 2× 訂單量,佇列與 API 仍在 SLA 內 |
| 失敗重試 | 冪等、退避、死信佇列與人工處理流程 |
| 對帳 | 至少一種自動比對報表,差異可追溯到 trace id |
下一步
若貴單位正規劃「不換 ERP、但要上新前台或電商」,建議先從邊界圖與單一寫入規則工作坊著手,再評估 .NET 整合層的範圍。我們在製造業訂單、庫存與電商串接有多起實績——歡迎透過網站聯絡,討論現況盤點與分階段導入。
相關文章
-
.NET 舊系統接手維護:上線前必做的七項檢核
原廠離場、文件不全、排程只有某台機器「記得怎麼跑」——接手 .NET 舊系統時,最貴的不是改功能,而是不知道現況就動手。以下整理我們在銀行轉檔、補助公示與企業後台專案中,接手維護前會先完成的七項檢核。
-
派工營運 KPI:從現場派任到績效指標的六個檢核點
派任時段靠人工比對、回報與費用分開處理,年度 KPI 又另用試算表彙整——現場營運與績效管理若各做各的,主管很難回答「這季支援成效如何」。以下整理我們在跨境派任與 HR 績效專案中,串接派工營運 KPI 的六個實務檢核點。
-
政府補助公示上傳:從人工轉檔到 API 排程的五個檢查點
每到申報截止就熬夜轉檔、還是漏上傳?補助公示若仍靠 Excel 人工整理,格式錯誤與時程延誤難以避免。以下整理我們在類似非營利與公部門案件中,從人工轉檔導入 API 排程前的五個實務檢查點——含決策者與技術雙視角。