什麼是工作流
在我剛學習軟件開發時,都會接觸到程序流程圖。在這裏我們先複習一下程序流程圖
處理框、判斷框、起止框、連接點、流程線、註釋框等構成,結合相應的算法,構成整個程序流程圖。
任何複雜的算法。都可以由順序結構、分子結構和循環結構這三種基本結構組成
-
順序結構
順序結構是簡單的線性結構,各框按順序執行。其流程圖的基本形態如圖所示,語句的執行順序爲
-
選擇(分支)結構
這種結構是對某個給定條件進行判斷,條件爲真或假時分別執行不同的框的內容。其基本形狀有兩種
-
循環結構
循環結構有兩種基本形態: while型循環和do - while型循環。a. while 型循環:其執行序列爲:當條件爲真時,反覆執行A,一旦條件爲假,跳出循環,執行循環緊後的語句。b. do-while型循環:執行序列爲:首先執行A,再判斷條件,條件爲真時,一直循環執行A,一旦條件爲假,結束循環,執行循環緊後的下一條語句
-
實例分析
計算長方形面積的問題:
可分爲以下幾個步驟:
(1)設置num1和num2兩個變量,接收用戶輸入的長度和寬度,並存儲到num1和num2兩個變量;
(2)判斷num1和num2是否大於0,如果大於0,繼續下一個步驟,否則提示用戶長度和寬度輸入錯誤,算法結束;
(3)計算num1和num2的乘積,並將乘積結果存儲到result變量;
(4)顯示result變量的值到屏幕。
其計算流程圖爲:
代碼如下:
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入長方形的長:");
int num1 = sc.nextInt();
System.out.println("請輸入長方形的寬:");
int num2 = sc.nextInt();
if(num1 == 0 || num2 ==0){
System.out.println("長方形長,寬必須大於0");
}else{
int result = areaFunction(num1,num2);
System.out.println("長方形面積是"+result);
}
}
public static int areaFunction(int num1,int num2){
return num1 * num2;
}
}
我們總結下程序流程圖,它包含一個開始節點,多箇中間處理結點,多個結束節點。
處理節點可以是等待用戶輸入(scanf),實際處理(areaFunction),判斷(if/else),
輸出(println),變量(num1,num2,result)。
等待用戶輸入是和外部的交互,輸出是告訴外部處理結果。
num1、num2是用戶外部的輸入變量,result是中間變量
上面的代碼定義了邏輯,我們可以執行代碼,根據輸入變量(num1,num2)會得到不同的結果
講了這麼多程序流程圖,他和工作流什麼關係呢?我認爲實際上,工作流是一種特殊的程序流程圖。
Activiti工作流
我這裏我就不介紹工作流的書面定義,它只考慮了嚴謹性,很難理解
現在我們使用activiti工作流實現一下長方形面積求和算法
下面是activiti工作流和程序結構流程圖的對比
程序結構流程圖元素 | activiti工作流元素 | 說明 |
---|---|---|
Java的運行環境Jre | 流程引擎 | |
代碼 | 流程定義/流程模型/流程圖 | |
代碼執行 | 流程執行實例 | |
啓動事件 | 啓始框 | |
結束任務 | 終止框 | |
用戶活動 | 等待用戶輸入(scanf) | |
互斥網關 | 判斷(if/else) | 只有一個執行路徑 |
並行網關 | 多線程 | 多個執行路徑 |
子流程 | 子函數(areaFunction) | |
變量num1,num2 | 變量在activiti中無需定義,可以在發起流程和用戶活動處理時傳入 |
上面關於activity工作流的介紹。實際上涵蓋了我們實際工作中80%的業務情況。
下面我着重介紹一下用戶活動。
在我們的工作流使用當中。接觸最多的就是流程審批,而流程審批中,最重要的就是用戶活動。
什麼是用戶活動呢?需要用戶參與的活動,如果一個節點需要用戶參與,我們需要
- 定義節點審批人
- 提供頁面、按鈕供審批人操作
- 根據審批人操作驅動流程執行
一.定義節點審批人方式
編號 | 方式 | 優缺點 | 舉例 |
---|---|---|---|
1 | 具體人 | 簡單、容易理解;當人員變動時都需要修改流程定義,對業務人員要求比較高;流程帶版本,修改流程後,執行中流程還會到原審批人 | 總經理 |
2 | 單崗位單審批人 | 簡單、容易理解;當人員變動時無需修改流程定義,修改流程後,執行中流程還會到新審批人,是【1】中版本的優化,推薦 | 總經理崗位 |
3 | 每個部門崗位類別單審批人 | 部門助理 | |
4 | 單崗位多審批人,需要簽收,簽收後任務認領到具體人 | 副總裁 | |
5 | 單崗位多審批人,會籤,任意一人審批即可 | 和【3】類似,但不需要簽收 | |
6 | 單崗位多審批人,會籤,所有人都審批後進入下一節點 | ||
7 | 單崗位多審批人,會籤,投票,比例審批人同意進入下一節點 | 【5】,【6】是【7】的特殊情況 | |
8 | 定義變量,通過外部程序傳入流程 | 最靈活,滿足所有情況 |
二.提供頁面、按鈕供審批人操作。
編號 | 方式 | 優缺點 | 舉例 |
---|---|---|---|
1 | 內置頁面設計器 | 業務人員可以自己設計、修改頁面,適用於簡單頁面 | |
2 | 外置頁面 | 程序員開發頁面、靈活、工作量大 | |
3 | 外置頁面,提供頁面設計功能 | 兼具【1】,【2】優點,工作量大 |