跳轉到

應用情境 - ERP 採購單自動觸發 BPM 流程

「外部起單」功能用於讓外部系統的資料直接起單,建立 UOF X 的表單。在與 ERP、CRM 等外部系統進行整合時,若需要透過這些系統輸入資料來觸發 UOF X 的流程,就需要使用「外部起單」功能,以下會展示一個應用情境:「ERP 採購單自動觸發 BPM 流程」,並提供具體的實作步驟與方法作為參考。

應用情境

採購人員原採用於 ERP 系統輸入採購單後,列印紙本單據進行內部簽核,審核過後再於 ERP 系統將正式採購單向供應商進行訂購。

然而,現有作業中的紙本簽核和流程追蹤較為繁瑣,容易出現延誤或錯誤。採購單簽核中如需修改採購單資訊,更是容易發生資訊未更新至 ERP 的狀況。

透過 UOF X 外部起單功能,資訊部門開發將 ERP 系統輸入採購單後,可自動將採購單拋轉至 UOF X 系統進行電子簽核,根據設定的簽核條件(如採購金額或部門)簽核完成後,再將狀態更新回 ERP,進行後續採購作業。

Image open-form-manager

示意圖

UOF X 與 ERP 整合優勢

  • 自動化審核流程:減少人為錯誤,提高工作效率。
  • 流程透明:管理層可以於 UOF X 隨時查看採購單審查進度,方便控管。
  • 數據一致性:通過 ERP 與 UOF X 系統的整合,確保採購單資訊的準確性和一致性。
  • 流程設定彈性:於 UOF X 可根據不同的採購條件,自動選擇不同的審核流程。

實作

在繼續往下說明之前,請確認您下列事項皆已經準備完成:

  1. 透過 Visual Studio 建立一個新的主控台應用程式 (Console App)
  2. 已將專案透過 NuGet 安裝 SDK,並設定好 SDK 參數
  3. 已取得 UOF X 站台網址
  4. 已取得 金鑰
  5. 已匯出一份 API 起單檔案(可參考上方示意圖),參考取得 API 起單檔案

範例表單下載: https://github.com/UOfficeForceX/SDK-Quickstart

以下為此情境中外部起單的完整程式範例,分為四大部分:

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,實現跨平台的外部起單功能。