應用情境 - ERP 採購單自動觸發 BPM 流程
「外部起單」功能用於讓外部系統的資料直接起單,建立 UOF X 的表單。在與 ERP、CRM 等外部系統進行整合時,若需要透過這些系統輸入資料來觸發 UOF X 的流程,就需要使用「外部起單」功能,以下會展示一個應用情境:「ERP 採購單自動觸發 BPM 流程」,並提供具體的實作步驟與方法作為參考。
應用情境¶
採購人員原採用於 ERP 系統輸入採購單後,列印紙本單據進行內部簽核,審核過後再於 ERP 系統將正式採購單向供應商進行訂購。
然而,現有作業中的紙本簽核和流程追蹤較為繁瑣,容易出現延誤或錯誤。採購單簽核中如需修改採購單資訊,更是容易發生資訊未更新至 ERP 的狀況。
透過 UOF X 外部起單功能,資訊部門開發將 ERP 系統輸入採購單後,可自動將採購單拋轉至 UOF X 系統進行電子簽核,根據設定的簽核條件(如採購金額或部門)簽核完成後,再將狀態更新回 ERP,進行後續採購作業。
UOF X 與 ERP 整合優勢¶
- 自動化審核流程:減少人為錯誤,提高工作效率。
- 流程透明:管理層可以於 UOF X 隨時查看採購單審查進度,方便控管。
- 數據一致性:通過 ERP 與 UOF X 系統的整合,確保採購單資訊的準確性和一致性。
- 流程設定彈性:於 UOF X 可根據不同的採購條件,自動選擇不同的審核流程。
實作¶
在繼續往下說明之前,請確認您下列事項皆已經準備完成:
- 透過 Visual Studio 建立一個新的主控台應用程式 (Console App)
- 已將專案透過 NuGet 安裝 SDK,並設定好 SDK 參數
- 已取得 UOF X
站台網址
- 已取得
金鑰
- 已匯出一份
API 起單檔案
(可參考上方示意圖),參考取得 API 起單檔案
以下為此情境中外部起單的完整程式範例,分為四大部分:
- 設定金鑰、站台網址: 可參考 SDK 參數設定
- 設定申請者資料: 可參考 使用說明
- 填寫表單欄位資料: 欄位資料格式可參考支援欄位
- 呼叫站台進行起單: 可參考呼叫 X 站台進行起單
using Ede.Uofx.FormSchema.UofxFormSchema;
using Ede.Uofx.PubApi.Sdk.NetStd.Service;
//設定金鑰
UofxService.Key = "xxx";
//設定 UOF X 站台網址
UofxService.UofxServerUrl = "https://myuofx.com.tw";
//建立 外部起單物件
var doc = new Ede.Uofx.FormSchema.UofxFormSchema.UofxFormSchema()
{
//申請者帳號
Account = "Justin",
//申請者部門代號
DeptCode = "RD",
};
//建立 表單欄位物件,填寫表單欄位資料
doc.Fields = new Ede.Uofx.FormSchema.UofxFormSchema.UofxFormSchemaFields()
{
// 採購單號
C002 = "PO20241014",
// 申請人
C003 = new List<AccountItem>
{
new AccountItem { DeptCode = "RD", Account = "Justin" }
},
// 供應商名稱
C023 = "OO工業有限公司",
// 採購日期
C006 = DateTimeOffset.Parse("2024/10/14"),
// 採購類型
C008 = "緊急採購",
// 交貨地點
C007 = "高雄市前鎮區復興四路2號2樓之2",
// 請購明細
C012 = new List<C012Row>
{
new C012Row
{
C016 = "P-1001",
C017 = "高速列印紙",
C018 = "A4 / 80gsm / 500張",
C019 = "箱",
C020 = 10,
C021 = "急件,需於本週五前交貨"
},
new C012Row
{
C016 = "P-2003",
C017 = "工業級螺絲刀組",
C018 = "5支組 / 含十字與一字",
C019 = "組",
C020 = 5,
C021 = "需提供保固兩年"
},
new C012Row
{
C016 = "P-3010",
C017 = "無線滑鼠",
C018 = "2.4G無線 / 含電池",
C019 = "個",
C020 = 20,
C021 = "需提供產品說明書"
}
},
// 請購單位需求說明
C013 = "本次申請旨在補充辦公室耗材與常用工具,確保業務進行順暢。列印紙需求為緊急採購,請協助加速處理。",
// 採購單位說明
C015 = "滑鼠、螺絲刀組已向供應商確認庫存充足,預計三天內可交貨。列印紙的交貨時程已交代供應商儘量配合需求時限。"
};
try
{
//呼叫站台進行起單
var traceId = await UofxService.BPM.ApplyForm(doc);
Console.WriteLine($"Trace Id: {traceId}");
}
catch (Exception e)
{
//將 exception 轉換成較容易判斷的 model
var model = UofxService.Error.ConvertToModel(e);
//將 model 轉成 json 格式印出
Console.WriteLine(UofxService.Json.Convert(model));
}
簽核中修改採購單資訊
若在簽核中需要修改採購單資訊,請參考欄位設定與權限來設定需修改的欄位
簽核完成後將狀態更新回 ERP 系統
若在簽核完成後需要將表單資訊更新回 ERP 系統,可以使用簽核站點中的「外部程式站點」
非 .NET 平台的解決方案
若開發環境非 .NET,但仍需使用 SDK 提供的外部起單功能,可考慮將 .NET SDK 包裝成 Web API。透過此方式,其他非 .NET 平台也能透過 HTTP 請求存取該 API,實現跨平台的外部起單功能。