更新報價與成本分析
# 產生報價與成本分析
# 1. 說明
- 產生報價與成本分析的工作流實現產生報價與成本分析的數據,通過呼叫Flying實現報表圖片的產生,下載並經過編碼后,將圖片通過郵件發送出來,同時向初始發送的地址傳遞工作流已結束的資訊。
- 在報價與成本分析經過計算處理后,會產生報價單編號,可用於進行單據數據提取,實現報表的報價單產生的功能。
- 郵件發送的圖片檔案是經過編碼處理的,可以直接寫入郵件正文。
- 提供了回撥的指令碼,用來提醒工作流已處理完成。
# 2. 設計工作流
新建一個工作流,流程名稱為
wf_sdquote
,如下圖所示。建立完成後,點選[儲存]
按鈕完成儲存。打開工作流設計畫面。設計的工作流如下圖所示。接下來對工作流的節點依照順序進行說明。
增加公共變數,這些公共變數將用於工作流流轉。變數說明如下:
變數名稱 說明 companyid 公司ID customercode 客戶編號 customerquote 客戶報價單編號 depcode 部門編號 empid 業務員編號 partno 產品編號 pcbid 參數樣板 quoteclass 報價大類 saleqty 銷售數量 sdquote_analyzeurl 報價單成本分析報表URL sdquote_data 報價單報表檔案base64文字 sdquote_url 報價單報表URL sdquoteanalyze_data 報價單報表分析檔案base64文字 userid 使用者編號 增加開始節點。
增加指令碼節點,該指令碼節點用於執行產生報價單與成本分析的內容。將會引用工作流中引入的參數。將呼叫
fasterp2_sdquote
自定程式,並獲取運行完成後的報價單編號的變數,作為公共變數傳遞給下一個節點使用。增加指令碼節點,用來產生指定的報價單編號的報表檔案,將檔案URL傳遞給下一個節點。
增加指令碼節點,用於下載報表檔案,將檔案轉換為base64文字。
增加郵件發送節點,填寫收件人,主題,訊息等資訊。將base64文字插入至訊息正文中。
增加指令碼節點,用於發送restapi訊息,向目標伺服器發送工作流運行完成的訊息,同時傳遞已產生的報表檔案。
# 3. 呼叫工作流
設計完成的工作流可使用以下方式來呼叫執行。
# 3.1. RestAPI
使用瀏覽器或RestAPI 客戶端,訪問以下地址,執行自定程式呼叫。請將 {ip}
修改爲運行 TaskRunner 主機的IP地址,{port}
修改爲 TaskRunner WebSocket 服務端監聽的地址。
http://{ip}:{port}?restapi=workflow
請求的主體如下:
{"name":"wf_sdquote","params":[{"name":"companyid","value":"{companyid}"},{"name":"partno","value":"{partno}"},{"name":"userid","value":"{userid}"},{"name":"depcode","value":"{depcode}"},{"name":"saleqty","value":"{saleqty}"},{"name":"pcbid","value":"{pcbid}"},{"name":"quoteclass","value":"{quoteclass}"}]}
# 3.2. WebSocket
使用WebSocket客戶端,連線至 TaskRunner 中的 WebSocket 服務端。向 WebSocket 服務端發送以下文字實現自定程式的呼叫。
{"action":"workflow","name":"wf_sdquote","params":[{"name":"companyid","value":"{companyid}"},{"name":"partno","value":"{partno}"},{"name":"userid","value":"{userid}"},{"name":"depcode","value":"{depcode}"},{"name":"saleqty","value":"{saleqty}"},{"name":"pcbid","value":"{pcbid}"},{"name":"quoteclass","value":"{quoteclass}"}]}
# 3.3. MQTT
使用 MQTT 客戶端,連線至 TaskRunner 連線的 MQTT 伺服器。MQTT 客戶端向 TaskRunner 訂閱的主題發送以下文字實現自定程式的呼叫。
{"action":"workflow","name":"wf_sdquote","params":[{"name":"companyid","value":"{companyid}"},{"name":"partno","value":"{partno}"},{"name":"userid","value":"{userid}"},{"name":"depcode","value":"{depcode}"},{"name":"saleqty","value":"{saleqty}"},{"name":"pcbid","value":"{pcbid}"},{"name":"quoteclass","value":"{quoteclass}"}]}
# 3.4. 程式碼呼叫
可以在TaskRunner的其他功能程式碼(自定程式、MQTT自定程式、自動化作業、其他工作流)中呼叫這個自定程式。使用方法如下:
var params = new TStringList();
params.Values["companyid"] = {companyid};
params.Values["partno"] = {partno};
params.Values["userid"] = {userid};
params.Values["depcode"] = {depcode};
params.Values["saleqty"] = {saleqty};
params.Values["pcbid"] = {pcbid};
params.Values["quoteclass"] = {quoteclass};
UGCM.RunWorkFlow("wf_sdquote",params);
2
3
4
5
6
7
8
9
params := TStringList.Create();
params.Values['companyid'] := {companyid};
params.Values['partno'] := {partno};
params.Values['userid'] := {userid};
params.Values['depcode'] := {depcode};
params.Values['saleqty'] := {saleqty};
params.Values['pcbid'] := {pcbid};
params.Values['quoteclass'] := {quoteclass};
UGCM.RunWorkFlow('wf_sdquote',params);
2
3
4
5
6
7
8
9