使用 TraceId 查詢起單結果
呼叫起單方法後會取得一組 Trace ID,這是不重複唯一值,可用此來查詢起單的結果。其原因為外部起單為**非同步**的方法,呼叫起單後僅是將需求放入排程,待背景程式處理正式起單。
有效性
Trace ID 只有 24hr 的有效期,過期後將無法查詢。
起單流程¶
flowchart LR
A(SDK 發送起單請求) --> B(系統接收並放入排程)
B --> C(系統初步檢查起單請求)
C --> D(發送請求給 BPM 模組)
C --> E(發現異常,起單失敗)
D --> F(放入 BPM 模組排程)
透過 OpenApi 或 SDK 起單後的流程如上,一直到 放入 BPM 模組排程 就已經結束,後續由該模組接手後續處理。
使用方法¶
透過起單拿到的 trace id 查詢即可,詳細請參考 取得外部起單結果
var result = await UofxService.BPM.Apply.GetApplyResult(new ApplyFormTraceRequestModel()
{
TraceId = traceId
});
問題1: 外部起單結果顯示 "1:已送進 BPM 模組",卻沒有看到單據?¶
透過此方法確認起單結果是 成功 的,還是有可能發生一些特例導致異常,例如: 找不到下一站簽核者,這時可以透過 表單管理員 在管理介面查看並試著排除。
外部起單的成功,僅代表已經成功將需求送入 BPM 模組,但無法保證一定能成功產生表單。
問題2: 為什麼不要等真正起單成功,再回覆結果呢?¶
因為在 BPM 模組處理起單請求時失敗,也是有可能經調整後而成功。例如因找不到下一站部門主管而失敗,則可以等設定部門主管後成功起單。這些排程處理期間的情況,可能會導致一些誤判,例如:
- BPM 模組處理顯示失敗,所以透過 SDK 又重新起單,結果第一次的失敗被排除後又成功起單,變成重複起單。
- BPM 模組因許多表單在排隊起單,所以等待處理時間較長,被誤認為沒收到起單請求。
因此,OpenApi 或 SDK 外部起單就如同模擬人員自己申請單據,在申請 送出 當下如果沒有錯誤,就已經完成任務,後續的問題應該由表單管理者根據管理介面來監控,並手動對失敗的表單進行適當的處置。
flowchart LR
D(BPM 模組起單請求序列)
D --> F(處理起單請求)
F --> G(發現異常,起單失敗)
F --> H(起單成功)
G --> I(表單管理員修復成功)
I --> H
G --> J(表單管理員無法修復) --> G