工作流
# 工作流
TaskRunner 可用作企業的業務流程管理(BPM),通過工作流的設定,可以實現任務的圖形化展示,向比較於程式碼,工作流的方式可以幫助使用者理解整個任務運行的總體狀況。
# 1. 建立工作流
在工作流
界面中,點選[新建]
按鈕,打開新建流程
視窗,填寫流程名稱與流程描述說明內容,點選[儲存]
按鈕。
選擇剛才建立的流程,點選[設計]
按鈕,進入流程圖設計器視窗。
# 2. 流程圖設計器
在流程圖設計器中,可以操作執行多項工作。以下是最常見的任務:
向圖示中新增節點
要向圖表中新增節點,請單擊節點工具欄中的某個節點,然後單擊圖表中要插入節點的位置(或者按下滑鼠按鈕,移動滑鼠並釋放按鈕,以插入具有指定大小的節點)。
在節點之間建立流轉連線
可以通過在工具欄中選擇以下圖示中的其中一種流轉連線型別來在節點之間建立流轉連線:
選擇流轉連線型別后,在源節點的任何流轉連線點(流轉連線點是圖表節點中顯示的藍色「x」)中按下滑鼠按鈕,拖動滑鼠,然後在目標節點的任何流轉連線點中鬆開滑鼠按鈕。將建立一個流轉連線,將源節點流轉連線到目標節點。
更改圖表節點的外觀
可以使用功能表和工具欄中的某些選項來更改圖表節點的視覺外觀。您可以更改背景顏色、邊框顏色、邊框樣式、畫筆樣式、筆寬、字型等。圖表節點的外觀不會影響工作流定義的行為方式,它只是爲了視覺美觀的目的。
儲存
構建圖表后,通過選擇功能表選項[檔案]
-[儲存]
,或按工具欄中的儲存按鈕。
工作流定義選項
點選功能表欄中的工作流
,可以操作工作流定義的特定選項,比如工作流變數與工作流附件。
工作流驗證
通過按 Ctrl+F9 或選擇功能表選項[工作流]-[檢查流程圖]
時,將呼叫工作流定義驗證器,該驗證器將檢查工作流中的問題。如果工作流定義有任何問題,編輯器底部將顯示一個包含錯誤和警告的面板:
# 3. 運行工作流
在TaskRunner中,可通過以下方式,實現工作流的運行:
- 使用RestAPI呼叫運行:RestAPI執行工作流
- 使用websocket呼叫運行:WebSocket執行工作流
- 使用MQTT呼叫運行:MQTT執行工作流
- 在自定程式中使用函式運行:UGCM.RunWorkFlow
- 在工作流中使用運行工作流節點運行:運行工作流節點
# 4. 流程圖節點
節點是您放置在工作流圖表中的內容。它可以是執行指定操作、流轉連線或控制執行流程的一些特殊節點。
# 4.1. 開始節點
- 概述:用於指示從哪個位置開始運行流程。
- 允許的輸入數量:0
- 允許的輸出數量:1
- 描述:一個工作流的流程圖中只能存在一個開始節點。
# 4.2. 結束節點
- 概述:用於指示結束流程運行的位置。
- 允許的輸入數量:多個
- 允許的輸出數量:0
- 描述:一個工作流的流程圖中只能存在一個結束節點。
# 4.3. 錯誤節點
- 概述:當在執行工作流時發生錯誤,將執行錯誤節點。
- 允許的輸入數量:0
- 允許的輸出數量:1
- 描述:一個工作流的流程圖中只能存在一個錯誤節點。每當在工作流執行過程中發生錯誤時,執行流程都會轉到錯誤塊,然後按照它指定的路徑(錯誤塊之後的下一個塊)進行操作。您可以使用錯誤塊來執行一些清理,然後完成工作流的執行。
# 4.4. 源聯結器
- 概述:源聯結器是一個直通模組,用來提高圖表的可讀性,用來將運行流程指向目標聯結器。
- 允許的輸入數量:多個
- 允許的輸出數量:0
- 描述:如果運行的流程到達源聯結器,則運行的流程會跳轉至與源聯結器相關聯的目標聯結器。源聯結器與目標聯結器之間的關聯是由它們內部設定的文字實現的,如果源聯結器與目標聯結器中顯示的文字相同,則建立起連線。比如,當流程圖運行至標記為
A
的源聯結器時,它會跳轉到標記為A
的目標聯結器。這樣,您可以在單個關係圖中擁有多個源-目標連線。
# 4.5. 目標聯結器
- 概述:目標聯結器是一個直通模組,用來提高圖表的可讀性,用來將運行流程指向源聯結器。
- 允許的輸入數量:0
- 允許的輸出數量:1
- 描述:如果運行的流程到達源聯結器,則運行的流程會跳轉至與源聯結器相關聯的目標聯結器。源聯結器與目標聯結器之間的關聯是由它們內部設定的文字實現的,如果源聯結器與目標聯結器中顯示的文字相同,則建立起連線。比如,當流程圖運行至標記為
A
的源聯結器時,它會跳轉到標記為A
的目標聯結器。這樣,您可以在單個關係圖中擁有多個源-目標連線。
# 4.6. 流轉連線
概述:將一個節點連線至另一個節點,用來指示圖示的執行流程。
描述:使用流轉連線將一個節點連線至另一個節點,表示執行的流程,就是從源節點流向目標節點。可以通過按住滑鼠按鈕在源塊的一個連線點(塊中的藍色"x")上,拖動滑鼠,並在目標塊的一個連線點上釋放按鈕來建立流轉連線。
箭頭指示的是執行的流程。建立的流轉連線型別有普通流轉連線、側邊流轉連線以及弧形流轉連線。他們的行為是相同的,僅在視覺效果上有差異。
根據節點允許的輸入和輸出數量,可能無法流轉連線到部分節點。比如,您無法建立一個目標為開始節點的流轉連線,因為開始節點不允許輸入。
一些節點允許多個流轉連線作為輸出,在這種情況下,每個流轉連線都需要被標記,以便流程圖根據指定的條件判斷要執行哪個流轉連線,流程在離開節點時只能執行其中一個流轉連線。比如兩個流轉連線都連線到了決策節點的輸出,其中一個被標記為
是
,另一個標記為否
,以便圖表知道根據決策條件的結果應該執行哪個連線。還可以為流轉連線指定運行的指令碼,當執行流轉連線的時候,其中的指令碼將被執行。在流轉連線的對話方塊中有一個名為指令碼的標籤,可以在其中編寫要使用的指令碼。當流轉連線中使用了指令碼,在流轉連線的起始位置可以看到一個小閃電的圖示。
# 4.7. 分叉對像
- 概述:建立並行執行的路徑。
- 允許的輸入數量:多個
- 允許的輸出數量:多個
- 描述:分叉對像用於建立並行執行路徑。當一個工作流實體的圖表啟動時,有一個單一的執行路徑(由開始節點啟動)。如果執行到達一個分叉對象,流程就會根據分叉的輸出數量被分割成多個並行路徑,並同時執行。最終,所有的執行路徑都必須在同一個合併對像處結束,否則圖表就是不正確的。一旦所有並行執行路徑完成,主執行路徑將再次從合併對像處開始。
# 4.8. 合併對像
- 概述:結束由分叉對像建立的並行執行路徑。
- 允許的輸入數量:多個
- 允許的輸出數量:1
- 描述:合併對像用於結束併合並並行執行路徑。當一個工作流實體的圖表啟動時,存在一個單一的執行路徑(由開始節點啟動)。如果執行到達一個分叉對象,流程會根據分叉的輸出數量被分割成多個並行路徑,並同時執行。最終,所有執行路徑都必須在同一個合併對像處結束,否則圖表就是不正確的。一旦所有並行執行路徑完成,主執行路徑將再次從合併對像處開始。主執行路徑將在合併對像處重新啟動,通過連線到其輸出的下一個節點繼續執行。只有在由分叉對像建立的所有執行路徑都完成後,主執行路徑才會重新啟動。
# 4.9. 決策節點
- 概述:根據布爾條件(是與否)更改執行流程。
- 允許的輸入數量:多個
- 允許的輸出數量:2(是或否)
- 描述:使用決策節點根據布爾條件改變執行流程。當執行流程到達決策節點時,會評估該節點的條件。如果條件為是,則執行路徑通過標記為「是」的流轉連線。如果條件為否,則通過標記為「否」的流轉連線。
# 4.10. 任務節點
概述:根據任意定義為使用者建立任務實體。
允許的輸入數量:多個
允許的輸出數量:多個(僅限於狀態列表)
描述:任務節點是關係圖中更重要的節點型別之一。 使用任務節點,您可以指定要為其建立的任務定義使用者。當執行流到達任務節點時,它會建立任務每個任務定義的實體。任務節點本身只不過是一組任務定義。因此,要使用任務節點,只需建立一個或多個任務定義並設定任務定義屬性。
工作流執行將在任務節點處暫停,直到所有任務實體完成。當任務實體的狀態變為完成狀態時,任務實體即被視為完成。所有任務實體完成後,執行流程將繼續,根據以下規則:
- 任務節點只有一個輸出:執行流程將通過該路徑。
- 任務節點有兩個或更多輸出:每個輸出流轉連線必須用一個完成狀態的名稱標記。執行路徑將通過標記與任務節點輸出相同文字的流轉連線,即任務實體的完成狀態,例如,如果任務實體以「批準」(一個有效的完成狀態)完成,則執行路徑將通過標記為「批準」的轉換。
如果任務節點建立了多個任務實體,無論是來自同一任務定義還是來自不同的任務定義,那麼任務節點的輸出將是任務實體中最普遍的完成狀態。例如,如果兩個任務實體完成為「拒絕」,而一個任務實體完成為「批準」,那麼任務節點的輸出將是「拒絕」,執行路徑將跟隨標記為「拒絕」的流轉連線。
# 4.10.1. 任務定義屬性
任務定義是在任務節點的任務定義編輯器(任務對話方塊)中建立的。當雙擊任務節點時,會顯示一個對話方塊。可以使用[新增]
或[刪除]
按鈕來新增或刪除任務定義。對話方塊左側的列表檢視顯示了節點現有的任務定義。任務定義的名稱會顯示出來。
左側顯示的內容為任務定義的名稱,它是唯一標識任務定義的有效識別符號。在以下示例為SetDateTask
。
常規
狀態:
- 狀態列表:包含任務有效狀態的列表。任務的初始狀態將是列表中的第一個狀態。通過勾選「完成」選項,一些狀態可以被標記為完成狀態。當任務實體的狀態變為完成狀態時,任務被認為已完成。您可以有多個狀態被標記為完成狀態。勾選了「隱藏」選項的狀態是任務的一個可能狀態,但不會在用戶界面中顯示以供更改任務狀態(比如在狀態下拉框中)。當任務實體被建立時,有效狀態會在任務列表對話方塊中的一個下拉框里顯示,然後使用者可以更改任務的狀態。如果您的應用程式中預定義了狀態模板,使用者將能夠使用
[增加]
按鈕右側的向下箭頭按鈕選擇其中一個模板。
- 狀態列表:包含任務有效狀態的列表。任務的初始狀態將是列表中的第一個狀態。通過勾選「完成」選項,一些狀態可以被標記為完成狀態。當任務實體的狀態變為完成狀態時,任務被認為已完成。您可以有多個狀態被標記為完成狀態。勾選了「隱藏」選項的狀態是任務的一個可能狀態,但不會在用戶界面中顯示以供更改任務狀態(比如在狀態下拉框中)。當任務實體被建立時,有效狀態會在任務列表對話方塊中的一個下拉框里顯示,然後使用者可以更改任務的狀態。如果您的應用程式中預定義了狀態模板,使用者將能夠使用
附件:定義了使用者在處理附件時的許可權。
- 顯示附件:在任務列表中顯示附件標籤。如果設定為未勾選,使用者將無法進行任何與附件相關的操作
[新增]
、[檢視]
等)。如果設定為勾選,使用者至少能夠打開並檢視附件。 - 允許移除附件:如果設定為勾選,允許使用者從任務實體中移除附件。
- 允許插入附件:如果設定為勾選,允許使用者向任務實體中插入新的附件。
- 允許編輯附件:如果設定為勾選,允許使用者打開現有附件進行編輯,並更新其內容。
- 顯示附件:在任務列表中顯示附件標籤。如果設定為未勾選,使用者將無法進行任何與附件相關的操作
欄位:待補充說明。
過期:待補充說明。
# 4.11. 審批節點
- 概述:這是一個特殊的任務節點,具有單個審批任務定義。
- 允許的輸入數量:多個
- 允許的輸出數量:多個(僅限於狀態列表)
- 描述:審批塊只是一個任務塊,它有一個 任務定義。此任務定義是審批任務定義,並且是常規任務 定義,不同之處在於某些屬性已經存在 已初始化,包含主題、描述,特別是狀態 列表。審批任務的狀態列表中有三個有效狀態:「已打開」、「已批準」和「已拒絕」。「已批準」和「已拒絕」狀態是任務的完成狀態。可以根據需要更改審批任務定義屬性,就像在任務塊中一樣。與任務塊的唯一區別是,您不能在審批塊中建立多個任務。
# 4.12. 指令碼節點
概述:執行指令碼程式碼。
允許的輸入數量:多個。
允許的輸出數量:1(如果指令碼不返回任何值)或多個(取決於可能的指令碼結果)。
描述:指令碼節點只執行一個指令碼程式碼。在大多數情況下,指令碼節點將只有一個輸出。但您也可以從指令碼節點中使用多個輸出,這將取決於指令碼結果。您可以定義使用
result
變數編寫Result
指令碼:result := 'result1';
1如果您有多個輸出,則每個離開流轉連線都應該有一個標籤,執行流將採取與指令碼結果相同的標籤的流轉連線。在上面的示例中,您必須有一個標記為
result1
的流轉連線,以便執行將遵循該路徑。
# 4.13. 運行工作流節點
概述:運行單獨的工作流實體。
允許的輸入數量:多個。
允許的輸出數量:1
描述:運行工作流節點允許運行新的工作流(子工作流), 與目前實體分離,採用同步或非同步方式。爲了在工作流實體之間交換資訊,一個變數對映應在節點定義中指定。
如果選中了
等待到結束
,則目前工作流將等待子工作流完成,以便繼續。在這種情況下,變數對映是雙向的。如果未選中
等待到結束
,則無論子工作流狀態如何,目前工作流都將繼續正常執行。變數對映只是單向的。變數對映列出了子工作流中的哪些變數將進行更新。在雙向對映的情況下,當子工作流完成時,子工作流中的變數將更新主工作流中對應的變數值。
# 4.14. 資料庫SQL節點
概述:在資料庫中執行SQL語句,僅支援TaskRunner配置資料庫的連線。
允許的輸入數量:多個
允許的輸出數量:1
描述:此節點允許在資料庫中執行查詢的SQL語句,可以在SQL語句中使用表達式。
參數:SQL語句:包含要在資料庫中執行的SQL語句。支援表達式。例如:
Update Invoice Set Status = 3 Where InvoiceId = [InvoiceId]
1
# 4.15. 發送郵件節點
- 概述:發送電子郵件。
- 允許的輸入數量:多個
- 允許的輸出數量:1
- 描述:此節點使用TaskRunner中預設的郵件設定實現郵件發送的功能。
# 4.16. MQTT發送節點
- 概述:發送MQTT訊息。
- 允許的輸入數量:多個
- 允許的輸出數量:1
- 描述:此節點使用TaskRunner中預設的MQTT連線設定實現MQTT訊息發送的功能。
# 4.17. 工具SQL節點
- 概述:執行SQL查詢。
- 允許的輸入數量:多個
- 允許的輸出數量:1
- 描述:用於執行SQL查詢,資料庫處填寫要連線的資料庫設定的名稱。SQL語句處填寫要執行的SQL語句。
# 4.18. WebSocket節點
- 概述:用於發送websocket訊息,使用TaskRunner的客戶端實現訊息的發送。
- 允許的輸入數量:多個
- 允許的輸出數量:1
- 描述:發送websocket訊息文字,使用TaskRunner的websocket客戶端實現訊息發送的功能。
# 4.19. 註釋節點
- 概述:顯示註釋。
- 允許的輸入數量:0
- 允許的輸出數量:0
- 描述:將視覺元素新增到包含固定文字的圖表中。此節點不影響圖表的行為,僅用於視覺指示。如果需要支援表達式的文字, 使用文字節點。
# 4.20. 文字節點
- 概述:在圖示中顯示動態的文字。
- 允許的輸入數量:0
- 允許的輸出數量:0
- 描述:使用此節點可在圖表的任何地方顯示文字,該文字可以根據工作流上下文進行更改。這兩者之間的主要區別:文字節點和註釋節點相比,支援表達式。所以你可以用它來顯示日期、變數值等,覆蓋或關閉任何其他圖表對象。
# 5. 變數
工作流變數在工作流中,名程為槽(slot)
,可以在其中儲存資訊,就像程式中的變數一樣。可以在工作流定義中建立變數,從工作流定義建立的每個工作流實體都將具有該工作流變數的副本。
如需要定義工作流中使用的變數,請執行以下操作。
打開工作流定義編輯器。
打開功能表選項
[工作流]-[變數]
,將顯示變數編輯器。
變數編輯器顯示已定義的工作流變數的列表。可以使用[新增]
和[刪除]
按鈕新增和刪除變數。需要做的就是為變數定義一個名稱,或者可以在值
編輯框中定義變數的起始值。還可以使用描述
欄位向變數新增註釋,解釋其用途(變數的文件)。定義工作流變數后,可以在表達式和指令碼中使用它們。也可以在使用外部呼叫運行工作流時向這些變數傳入初始值。
# 6. 附件
附件是一項強大的功能,它允許每個工作流實體具有一個或多個與之關聯的檔案。使用者可以在處理任務時新增、編輯或刪除附件(取決於他們的附件許可權)。
使用者可以將一個檔案(或一組檔案)附加到一個任務,然後可以為另一個使用者建立另一個任務,並且這個新使用者可以看到前一個附加的檔案。或者,使用者可以在工作流執行過程中編輯和更新附件。這使得在執行工作流實體時使用者之間的協作更加牢固。
附件實際上是一組檔案(附件項)的容器。可以在工作流定義中建立這些「容器」(附件),也可以建立多個附件。預設情況下,始終在工作流定義中建立一個名為「附件」的附件。
# 7. 表達式
表達式是自定義工作流定義的一種強大方法。您可以在某些節點的多個屬性中使用表達式,特別是在任務節點的任務定義屬性中使用表達式。當要使用該屬性時,文字中的所有表達式都將轉換為其值。表達式由括號[
和]
標識。以下是表達式用法的示例:
主題:這是一個關於訂單號 [OrderNo] 的主題。
描述:[UserName] 先生,請在 [DateToStr(StartDate + 30)] 前處理完成此任務。
2
在這些示例中,我們有三個表達式:OrderNo、UserName 和 DateToStr(StartDate + 30)。請注意,表達式使用工作流變數。工作流變數的值將在表達式中計算和使用。例如,在計算表達式后,結果文字為:
主題:這是一個關於訂單號 1042 的主題。
描述:李子明 先生,請在在 2020年5月12日 前處理完成此任務。
2
除了工作流變數,表達式還接受:
- 運算子:
+,-, /, *, div, mod
- 邏輯運算子:
and, or, not, xor
- 關係運算符:
<>, =, <, >, <=, >=
- 按位運算子:
shl, shr
- 數值常量:
153(整數), 152.43(十進制), $AA(十六進制)
- 字串常量:
'這是一串文字'
- 字元常量:
#13(返回字元)
- 類似pascal的函式與程式:可參考TaskRunner中的系統函式、系統程式。
# 8. 指令碼
可以在工作流程圖中使用指令碼。指令碼是自定義工作流定義的強大方法。您可以使用指令碼塊執行其他塊無法執行的各種任務。script 的預設語法語言是PascalScript。所以,你幾乎可以做你在普通Pascal中能做的所有事情。關於PascalScript的語法相關的內容請參考PascalScript基礎。工作流中的指令碼也同樣支援TaskRunner的系統函式、系統程式、自定函式和自定程式。
指令碼也是操作工作流變數的一種方式。在指令碼中,它們只是常規變數。例如,如果您定義了一個名為「TotalAmount」的工作流變數,則可以使用以下程式碼讀取變數值:
//Calculate comission for the sale
Comission := TotalAmount * 0.2;
2
並使用以下程式碼更改變數值:
//Increase TotalAmount by 15%
TotalAmount := TotalAmount * 1.15;
2
避免使用訊息框和其他對話方塊或視窗,這些對話方塊或視窗需要使用者互動才能繼續指令碼,這可能會導致問題。請記住,工作流線上程的後臺運行,工作流執行的所有操作都應該是靜默且流暢的。如果需要使用者互動,通常需要使用任務塊為使用者建立任務。
# 9. 變數對話方塊
在直觀地建立工作流定義時,您將使用對話方塊來編輯多個不同塊的屬性。這些塊中的每一個都可能具有接受表達式的參數。在每個具有支援表達式的參數的對話方塊中,您都會找到一個名為「變數...」的按鈕。,這將打開「變數」對話方塊。此對話方塊顯示可在表達式中使用的所有變數,並允許您將指定的變數拖放到參數控制元件中。這將在控制元件中建立一個具有變數名稱的表達式。