小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

技術干貨:基于Activiti5 定制化中國式工作流架構設計

 昵稱34195792 2019-05-19

1. 簡介

工作流底層是基于 Activiti 進行開發(fā)完成的,易于開發(fā)者對現有工作流進行升級改造。

關于Activiti

Activiti項目是一項新的基于Apache許可的開源BPM平臺,從基礎開始構建,旨在提供支持新的BPMN 2.0標準,包括支持對象管理組(OMG),面對新技術的機遇,諸如互操作性和云架構,提供技術實現。 創(chuàng)始人Tom Baeyens是JBoss jBPM的項目架構師,以及另一位架構師Joram Barrez,一起加入到創(chuàng)建Alfresco這項首次實現Apache開源許可的BPMN 2.0引擎開發(fā)中來。 Activiti是一種輕量級,可嵌入的BPM引擎。 它將提供寬松的Apache許可2.0,以便這個項目可以廣泛被使用,同時促進Activiti BPM引擎和的BPMN 2.0的匹配,該項目現正由OMG通過標準審定。 加入Alfresco Activiti項目的是VMware的SpringSource分支,Alfresco的計劃把該項目提交給Apache基礎架構,希望吸引更多方面的BPM專家和促進BPM的創(chuàng)新。

  • Activiti用戶手冊: http:///userguide/index.html

  • Activiti文檔下載 : http:///download.html

2. 依賴關系

2.1 軟件環(huán)境

JDK 6+

Activiti需要運行在JDK 6或以上版本上。 進入 Oracle Java SE 下載頁面 點擊 '下載 JDK'按鈕。頁面上也提供了安裝的方法。 為了驗證是否安裝成功,可以在命令行中執(zhí)行 java -version。 它將會打印出安裝的JDK的版本。

IDE

Eclipse、IntelliJ IDEA等

IE

由于我司銀行用戶使用工作流較多,需提供對IE瀏覽器支持,除了流程設計器最低版本要求IE9,工作流其他模塊兼容IE8、IE9、IE10。

Spring

工作流采用 Spring 注解方式管理資源和Bean對象,與Spring無縫結合。開發(fā)者需在項目中集成工作流時,注意Spring版本。

Maven

安裝工作流相關開發(fā)包

Activiti

工作流是基于Activiti-5.18.0版本開發(fā),所以依賴如下:

<dependencies> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.18.0</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-modeler</artifactId> <version>5.18.0</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>5.18.0</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-explorer</artifactId> <version>5.18.0</version> <exclusions> <exclusion> <groupId>com.vaadin</groupId> <artifactId>vaadin</artifactId> </exclusion> <exclusion> <groupId>com.vaadin.addons</groupId> <artifactId>dchats-widget</artifactId> </exclusion> <exclusion> <groupId>com.vaadin.addons</groupId> <artifactId>activiti-simple-workflow</artifactId> </exclusion> </exclusions> </dependency> ... </dependencies>

2.2 工作流軟件包

開發(fā)者在使用工作流軟件包時,分為兩種模式。 如下:

  • 開發(fā)模式

  • 開發(fā)者需要在項目POM文件中引入工作流依賴項

  • 離線模式

  • 由于客戶現場環(huán)境限制,需要要手動拷貝工作流相關資源。如jar、css、js、數據庫腳本、頁面等等。

一. 開發(fā)模式

首先,在POM中引用工作流jar

把app-workflow-core開發(fā)包放在對應的X-X-core工程POM文件中。

 <dependencies> 	<dependency> 		<groupId>com.vprisk.workflow</groupId> 		<artifactId>app-workflow-core</artifactId> 		<version>3.0.0</version> 	</dependency>  	... </dependencies>

把app-workflow-mvc放在X-X-mvc工程POM文件中。

<dependencies> <dependency> <groupId>com.vprisk.workflow</groupId> <artifactId>app-workflow-mvc</artifactId> <version>3.0.0</version> </dependency> ... </dependencies>

其次,在POM中引用視圖資源

把app-workflow-web開發(fā)包放在對應的X-X-web工程POM文件中。

<dependencies> 		 	<dependency>		<groupId>com.vprisk.workflow</groupId>		<artifactId>app-workflow-web</artifactId>		<version>3.0.0</version>		<type>war</type>	</dependency>	<dependency>		<groupId>com.vprisk.workflow</groupId>		<artifactId>app-workflow-web</artifactId>		<version>3.0.0</version>		<type>warpath</type>	</dependency>	...</dependencies><build>	<plugins>		<plugin>			<groupId>org.apache.maven.plugins</groupId>			<artifactId>maven-war-plugin</artifactId>			<configuration>				<packageExcludes>WEB-INF/web.xml</packageExcludes>				<overlays>					<overlay>						<groupId>com.vprisk.workflow</groupId>						<artifactId>app-workflow-web</artifactId>						<includes>							<!-- <include>ec/**</include> --> <!-- 不引用該war的某些路徑下文件 -->							...						</includes>					</overlay>					...				</overlays>			</configuration>		</plugin>	</plugins></build>

二. 離線模式: 由開發(fā)者直接拷貝工作流相關文件

首先,在POM中引用工作流jar

技術干貨:基于Activiti5 定制化中國式工作流架構設計

拷貝工作流 jar文件

  • app-workflow-core

  • MVC模式下的工作流服務層,負責工作流流程定義、任務審批、歷史查詢以及參與人等。

  • app-workflow-mvc

  • MVC模式下的工作流控制層

關于MVC模式理解,參考MVC

拷貝工作流引擎配置類

在app-workflow-web下:

com.vprisk.config.WorkflowApplicationConfig

拷貝工作流JSP文件

技術干貨:基于Activiti5 定制化中國式工作流架構設計

拷貝流程設計器文件

在app-workflow-web工程的/workflow目錄下,其中stencilset.json是流程設計器組件配置庫。

技術干貨:基于Activiti5 定制化中國式工作流架構設計

在app-workflow-web/webapp/flowdesigner目錄下是流程設計器的頁面、css、javascripts、圖片。

技術干貨:基于Activiti5 定制化中國式工作流架構設計

2.3 數據庫腳本

1. 數據庫

目前工作流支持Oracle和DB2

2. 理解數據庫表的命名

工作流的表都以ACT_開頭。 第二部分是表示表的用途的兩個字母標識。

ACT_ID_*: 'ID'表示identity。 這些表包含身份信息,比如用戶,組等等。ACT_HI_*: 'HI'表示history。 這些表包含歷史數據,比如歷史流程實例,參數,任務等等。ACT_GE_*: 通用數據, 用于不同場景下。ACT_RE_*: 'RE'表示repository。 這個前綴的表包含了流程定義和流程靜態(tài)資源(圖片,規(guī)則,等等)。ACT_RU_*: 'RU'表示runtime。 這些運行時的表,包含流程實例,任務,參數,異步任務,等運行中的數據。		 Activiti只在流程實例執(zhí)行過程中保存這些數據, 在流程結束時就會刪除這些記錄。 這樣運行時表可以一直很小速度很快。ACT_EX_*: 'EX'表示extension。 這個前綴的表包含了代理人設置、觸發(fā)器、審批歷史、流程和任務定義擴展屬性等。

3. 數據庫腳本

分為兩部分

  • 一、工作流引擎表

  • 二、工作流擴展表

工作流引擎表在工作流軟件開發(fā)包中。在系統初始化時,工作流引擎自動初始化數據庫腳本,不需要人為干預。

工作流引擎腳本在activiti-engine-5.18.0.jar中:

技術干貨:基于Activiti5 定制化中國式工作流架構設計

而工作流擴展表是針對工作流引擎表做的一些定制化配置的表,需要開發(fā)者手動整合到業(yè)務系統。

4. 擴展表數據庫腳本

擴展的數據庫腳本文件存放在工作流app-workflow-web工程的db/mini目錄下:

技術干貨:基于Activiti5 定制化中國式工作流架構設計

在實際的業(yè)務系統開發(fā)過程中,根據使用的數據庫類型,開發(fā)者可以直接把db/mini/db2或者db/mini/oracle目錄下的workflow-table.sql和workflow-data.sql文件拷貝到業(yè)務系統初始化腳本目錄下。

創(chuàng)建表

workflow-table.sql

擴展表說明

代理表 ACT_EX_AGENT 代理流程列表 ACT_EX_AGENT_SCOPE 流程任務歷史擴展表 ACT_EX_HISTORY 流程和任務觸發(fā)器擴展表 ACT_EX_LISTENER 流程和任務定義擴展表 ACT_EX_NODE_VARIABLE 

在創(chuàng)建DB2表時,需要指定表空間,如:

CREATE TABLE TEST ( COL1 VARCHAR(20) NOT NULL, ...)in 指定表空間名index in 指定表空間名

初始化數據

workflow-data.sql 

包括字典參數和流程菜單兩部分

1、 字典參數

技術干貨:基于Activiti5 定制化中國式工作流架構設計

技術干貨:基于Activiti5 定制化中國式工作流架構設計

2、 流程菜單

技術干貨:基于Activiti5 定制化中國式工作流架構設計

3. 集成工作流

3.1 模塊說明

  • app-workflow-core

工作流核心服務接口,負責流程定義更新與查詢、流程實例更新與查詢、任務審批與查詢,參與人查詢、流程代理更新與查詢、流程歷史查詢等。

技術干貨:基于Activiti5 定制化中國式工作流架構設計

  • app-workflow-mvc

負責工作流數據傳遞,頁面地址跳轉

技術干貨:基于Activiti5 定制化中國式工作流架構設計

  • app-workflow-web

負責數據庫配置,事務管理、數據展示以及頁面展示。

技術干貨:基于Activiti5 定制化中國式工作流架構設計

3.2 工作流引擎配置

工作流引擎采用Spring注解配置類,管理工作流引擎數據源-dataSource配置、數據庫事務-transactionManager:

com.vprisk.config.WorkflowApplicationConfig

技術干貨:基于Activiti5 定制化中國式工作流架構設計

以及配置Activiti審批服務接口,如流程定義以及流程相關靜態(tài)資源RepositoryService:

技術干貨:基于Activiti5 定制化中國式工作流架構設計

流程實例RuntimeService

技術干貨:基于Activiti5 定制化中國式工作流架構設計

任務服務TaskService

技術干貨:基于Activiti5 定制化中國式工作流架構設計

歷史服務HistoryService

技術干貨:基于Activiti5 定制化中國式工作流架構設計

等服務接口,更多詳細信息請參考Activiti用戶手冊。

http:///userguide/index.html

3.3 工作流事務管理

工作流通過Spring的注解方式管理事務,一般事務控制在Service服務類的方法級別上,如保存流程定義:

@Transactionalpublic void saveProcessDefinition(ProcessDefinitionDto dto){	...}

通過@Transactional來標識需要事務,這時候與Spring事務管理結合起來呢。

3.4 流程引擎的API和服務

技術干貨:基于Activiti5 定制化中國式工作流架構設計

1. 流程定義服務接口

流程定義是工作流核心功能之一,流程定義服務提供了管理和控制流程定義的操作。 包括新增、編輯、復制、鎖定、激活、導入、導出、刪除。它包含了一個流程每個環(huán)節(jié)的結構和行為。

2. 流程實例服務接口

流程實例服務是工作流核心功能之一。 包括啟動流程,掛起、激活、刪除、復位發(fā)起、查詢、流程進度圖等。

流程實例服務負責啟動一個流程定義的新實例。 流程定義定義了流程各個節(jié)點的結構和行為。 流程實例就是這樣一個流程定義的實例。對每個流程定義來說,同一時間會有很多實例在執(zhí)行。 流程實例服務可以用來獲取和保存流程參數。 這些數據是特定于某個流程實例的,并會被很多流程中的節(jié)點使用 (比如,一個決策器常常使用流程參數來決定流轉到指定分支走流程)。 流程實例服務也能查詢流程實例和執(zhí)行。 最后,流程實例服務可以在流程實例等待外部觸發(fā)時使用,這時可以用來繼續(xù)流程實例。 流程實例可以有暫停狀態(tài),而服務提供了激活方法來“激活”實例, 接受外部激活后,流程實例就會繼續(xù)向下執(zhí)行。

流程進度圖

技術干貨:基于Activiti5 定制化中國式工作流架構設計

其中標紅的箭頭是已走完的,標紅任務節(jié)點是當前要審批節(jié)點。

3. 任務實例接口

任務實例是由系統中真實人員執(zhí)行的,它是工作流核心功能之一。包括任務審批,查詢用戶任務、任務改派,任務駁回等。

4. 歷史查詢服務接口

流程歷史是一個組件,它可以捕獲發(fā)生在進程執(zhí)行中的信息并永久的保存,與運行時數據不同的是,當流程實例運行完成之后它還會存在于數據庫中。

歷史查詢服務提供了工作流的所有歷史數據。 在執(zhí)行流程時,引擎會保存很多數據,比如流程實例啟動時間,任務的參與者, 完成任務的時間,每個流程實例的執(zhí)行路徑等等。 這個服務主要通過查詢功能來獲得這些數據。

5. 觸發(fā)器服務接口

工作流擴展服務接口之一。 基本功能包括新增,編輯、刪除、查詢;

觸發(fā)器可以理解為流程審批過程中,中間嵌入的一段小程序,他的主要用途在于可以做一些審批任務之外的一些事情,如操作業(yè)務數據,分配下一節(jié)點審批人、記錄日志,消息提醒等等。

  • 在任務審批前或審批完成后,開發(fā)者可自定義前置觸發(fā)器或者后置觸發(fā)器,

  • 在決策器走流轉分支時,指定流轉分支路由

觸發(fā)器包括前置觸發(fā)器和后置觸發(fā)器

觸發(fā)器分類

  • 任務觸發(fā)器

  • 決策器觸發(fā)器

7. 流程參與人服務接口

工作流擴展服務接口之一,流程參與人服務可以查詢流程審批相關審批人,機構、角色。

8. 歷史任務擴展服務接口

工作流擴展服務接口之一。 基本功能包括新增,編輯、刪除、查詢;

在任務審批前或審批完成后,開發(fā)者可自定義前置任務觸發(fā)器或者后置任務觸發(fā)器,在觸發(fā)器中可記錄一些與業(yè)務相關的日志信息或者審批任務消息提醒等。

9. 流程代理服務接口

工作流擴展服務接口之一。 基本功能包括新增,編輯、刪除、查詢;

有些時候有的領導在一段時間內有事不能審批,比如出差。那問題來了,如果領導不能審批任務,整個流程將會停滯不前。所以這個時候需要有人代領導審批任務,流程代理服務就派上用場了。流程代理服務允許領導指定代理人在一段之間內,代理指定流程,審批任務。

10. 任務定義擴展服務接口

工作流擴展服務接口之一,流程設計器擴展了流程定義屬性,而這些屬性不屬于工作流引擎本身,需要額外用數據庫表存儲。主要用途在于流程審批時,可以把流程定義屬性(參數)當作流程審批權重,影響任務完成。比如回退規(guī)則、審批人、是否會簽、允許改派等。

3.4 流程觸發(fā)器

1. 觸發(fā)器觸發(fā)條件類型(type)

任務級別

  • create 任務實例創(chuàng)建前觸發(fā)

  • complete 任務實例完成后觸發(fā)

流程級別

  • start 節(jié)點實例創(chuàng)建前觸發(fā)

  • end 節(jié)點實例完成后觸發(fā)

2. 自定義任務觸發(fā)器

開發(fā)者自定義任務觸發(fā)器需要實現任務級觸發(fā)器接口,如:

public class WorkflowTaskListenerA implements WorkflowTaskListener{ public void notify(DelegateTask delegateTask){ //.... }}

開發(fā)者自定義決策器觸發(fā)器需要實現流程級觸發(fā)器接口,如:

3. 自定義決策器觸發(fā)器

public class WorkflowTaskListenerB implements WorkflowTaskListener{			public void notify(DelegateExecution execution){		//....	}}

4. 自定義觸發(fā)器安裝

開發(fā)者需編寫SQL插入腳本進行手動安裝,如:

技術干貨:基于Activiti5 定制化中國式工作流架構設計

技術干貨:基于Activiti5 定制化中國式工作流架構設計

然后在新建流程定義頁面的屬性欄顯示,如:

技術干貨:基于Activiti5 定制化中國式工作流架構設計

3.5 流程設計器

在app-workflow-web工程目錄下

技術干貨:基于Activiti5 定制化中國式工作流架構設計

其中stencilset.json是流程設計器組件配置庫。

技術干貨:基于Activiti5 定制化中國式工作流架構設計

webapp/flowdesigner包含網頁版流程設計器頁面、css、script等資源。

網頁版流程設計器

網頁版流程設計器主要由Angularjs,SVG矢量圖 開發(fā)而成。對IE最低版本要求是IE9,請開發(fā)者注意。

技術干貨:基于Activiti5 定制化中國式工作流架構設計

3.6 示例

假設已經把工作流集成完畢并運行起來,演示公司簡單的請假申請流程:

保存請假申請流程定義

在流程設計器定義一條流程編號為VC_1001的請假申請流程

技術干貨:基于Activiti5 定制化中國式工作流架構設計

為了讓工作流引擎知道這個流程,我們必須先進行 >創(chuàng)建>激活>發(fā)布。 發(fā)布意味著引擎會把流程定義解析成可以執(zhí)行的流程定義文件, 并且該流程定義會被添加到數據庫中。 這樣,當引擎重啟時,該流程定義依然存在。代碼如下:

@Autowiredprivate ProcessDefinitionService processDefinitionServiceProcessDefinitionDto dto = ...;processDefinitionService.saveProcessDefinition(dto)

掛起,激活一條流程定義

我們可以掛起一條流程定義。當掛起流程定義時,就不能創(chuàng)建新流程實例了。

String processDefinitionKey = 'VC_1001';processDefinitionService.suspendProcessDefinition(processDefinitionKey);

要想重新激活一條流程定義,可以調用:

String processDefinitionKey = 'VC_1001';processDefinitionService.activateProcessDefinition(processDefinitionKey)

啟動一條流程實例

把流程定義發(fā)布到工作流引擎后,我們可以基于它發(fā)起新流程實例。 對每個流程定義,都可以有很多流程實例。 流程定義是“藍圖”,流程實例是它的一個運行的執(zhí)行實例。

所有與流程運行狀態(tài)相關的數據都可以通過ProcesInstanceService獲得。 有很多方法可以啟動一個新流程實例。在下面的代碼中,我們使用定義在流程定義文件中的流程編號來啟動流程實例。 我們也可以在流程實例啟動時添加一些流程參數,因為第一個用戶任務的表達式需要這些參數。 流程參數經常會被用到,因為它們賦予來自同一個流程定義的不同流程實例的特別含義。 簡單來說,流程參數是區(qū)分流程實例的關鍵。代碼如下:

@Autowiredprivate ProcessInstanceService processInstanceServiceMap<String, Object> variables = new HashMap<String, Object>();variables.put('employeeName', 'duanzhijund');variables.put('numberOfDays', new Integer(4));variables.put('descr', '請假四天!');String processDefinitionKey = 'VC_1001'ProcessInstanceDto dto = processInstanceService.startProcessInstanceByLatestVersionKey(processDefinitionKey, variables);

查詢審批任務

流程啟動后,第一步就是用戶任務。這是必須由系統用戶處理的一個環(huán)節(jié)。 通常,用戶會有一個“任務列表”,展示了所有必須由該用戶處理的任務。 下面的代碼展示了對應的分頁查詢:

@Autowiredprivate TaskInstanceService taskInstanceService// 分頁查詢Pageable pageable = ...;Map<String, Object> params = ...;params.put('processName', '') params.put('taskName', '') params.put('createdTmBegin', '')params.put('createdTmEnd', '')Page<TaskInstanceDto> = taskInstanceService.pageTaskPending(pageable, params) for (Task task : tasks) { Log.info('Task available: ' + task.getName());}

完成任務

為了讓流程實例繼續(xù)運行,我們需要完成整個任務。下面的代碼展示了如何做這件事:

@Autowiredprivate TaskInstanceService taskInstanceServiceMap<String, Object> taskVariables = new HashMap<String, Object>();taskVariables.put('resultFlag', 'Y'); // or 'N'taskVariables.put('comment', '審批意見!');...Task task = tasks.get(0);String nextTaskCode = ...; // 下一任務節(jié)點編號taskInstanceService.pass(task.getId(), nextTaskCode , taskVariables);

流程實例會進入到下一個環(huán)節(jié)。在這里例子中, 下一環(huán)節(jié)允許員工通過表單調整原始的請假申請。員工可以重新提交請假申請, 這會使流程重新進入到第一個任務。

掛起,激活一個流程實例

也可以掛起一條流程實例。掛起時,流程審批不能繼續(xù)執(zhí)行。

String processInstanceId = '';processInstanceService.suspendProcessInstance(processInstanceId);

激活流程實例可以調用:

String processInstanceId = '';processInstanceService.activateProcessInstance(processInstanceId);

更多詳細服務接口可以參考工作流服務接口。

4. 工作流服務接口

4.1 核心服務接口

4.1.1 任務實例服務接口

com.vprisk.workflow.core.TaskInstanceService@Autowiredpublic TaskInstanceService taskInstanceService

4.1.1.1 任務詳細查詢

根據任務實例UUID查詢任務實例。

String taskId = ...; // 任務實例UUIDTaskInstanceDto task = taskInstanceService.find(String taskId)

4.1.1.2 待辦任務分頁查詢

待辦任務分頁

Pageable pageable = ...;Map<String, Object> params = ...;params.put('processName', '') params.put('taskName', '') params.put('createdTmBegin', '')params.put('createdTmEnd', '')public Page<TaskInstanceDto> = taskInstanceService.pageTaskPending(pageable, params)

4.1.1.3 查詢任務候選人

根據流程定義UUID、任務Code以及流程實例UUID,查詢任務審批候選人。

String procDefId = ...; // 流程定義UUIDString nextTaskCode = ...; // 下一個任務定義CodeString procInstId = ...; // 流程實例UUIDString candidates = taskInstanceService.findCandidatesByRollbackRule(procDefId, nextTaskCode , procInstId)

4.1.1.4 根據流程實例id查詢待辦任務列表

根據流程實例UUID,查詢待辦任務列表。

String procInstId = ...;List<TaskInstanceDto> list = taskInstanceService.findTaskByProcessInstanceId(procInstId)

4.1.1.5 是否改派

根據任務實例UUID,判斷審批任務是否可以改派。

String taskId = ...;boolean flag = taskInstanceService.isDelegate(taskId) 

4.1.1.6 任務改派

根據任務實例UUID以及改派人,完成改派。 改派后,當前任務屬于改派指定的assignee。只有指定的assignee能再次看到該審批任務。

String taskId = ...;String assignee = ...;taskInstanceService.delegateTask(taskId, assignee)

4.1.1.7 批量任務審批

根據任務實例UUID列表,任務定義Code以及任務參數批量完成任務。只有流程相同,審批節(jié)點相同才能進行批量審批

String [] taskIds = ...;String nextTaskCode = ...;Map<String, Object> variables = ...;taskInstanceService.pass(taskIds, nextTaskCode, variables) 

4.1.1.8 會簽任務審批

同上

String [] taskIds = ...;String nextTaskCode = ...;Map<String, Object> variables = ...;taskInstanceService.assign(taskIds, nextTaskCode, variables);

4.1.1.9 批量任務審批駁回

根據任務實例UUID列表,任務定義Code以及任務參數批量駁回任務。只有流程相同,審批節(jié)點相同才能進行批量審批駁回

String [] taskIds = ...;String nextTaskCode = ...;Map<String, Object> variables = ...;taskInstanceService.rollbackTask(taskIds, nextTaskCode, variables);

4.1.1.10 保存流程參數

根據任務實例,任務定義Code以及任務參數保存流程參數。

Task task = ...;String nextTaskCode = ...;Map<String, Object> variables = ...;taskInstanceService.saveTaskVariable(task, nextTaskCode, variables);

該保存方法有事務控制。

4.1.1.11 保存任務私有參數

根據任務實例UUID以及任務參數保存任務私有參數。

String taskId = ...;Map<String, Object> variables = ...;taskInstanceService.saveTaskVariableLocal(taskId, variables);

4.1.2 流程實例接口

com.vprisk.workflow.core.ProcessInstanceService@Autowiredpublic ProcessInstanceService processInstanceService;

4.1.2.1 流程復位發(fā)起

根據已完成的流程實例UUID來發(fā)起新的流程,新老流程實例建立綁定關系。

String procInstId = ...;ProcessInstanceDto p = processInstanceService.restartProcessInstance(procInstId);

4.1.2.2 流程啟動

根據流程定義UUID以及流程參數啟動流程實例。

String processDefinitionId = ...;Map<String, Object> variables = ...;variables.put('applyUser', '') // 流程發(fā)起人variables.put('bizUrl', '') // 業(yè)務表單地址variables.put('process_biz_key', '') // 業(yè)務主鍵UUIDProcessInstanceDto p = processInstanceService.startProcessInstanceById(processDefinitionId, variables)

4.1.2.3 流程啟動

根據流程定義編號、版本以及流程參數啟動流程實例。

String processDefinitionKey = ...;String processDefinitionVersion = ...;Map<String, Object> variables = ...;variables.put('applyUser', '') // 流程發(fā)起人variables.put('bizUrl', '') // 業(yè)務表單地址variables.put('process_biz_key', '') // 業(yè)務主鍵UUIDProcessInstanceDto p = processInstanceService.startProcessInstanceByKeyAndVersion(processDefinitionKey, processDefinitionVersion,variables) 

4.1.2.4 流程啟動

根據最新的流程定義版本、編號、流程參數啟動流程實例。

String processDefinitionKey = ...;Map<String, Object> variables = ...;variables.put('applyUser', '') // 流程發(fā)起人variables.put('bizUrl', '') // 業(yè)務表單地址variables.put('process_biz_key', '') // 業(yè)務主鍵UUIDProcessInstanceDto p = processInstanceService.startProcessInstanceByLatestVersionKey(processDefinitionKey, variables)

4.1.2.5 流程實例詳細

根據流程實例UUID查詢流程實例對象。

String procInstId = ...;ProcessInstanceDto p = processInstanceService.findProcessInstanceById(procInstId) 

4.1.2.5 流程實例進度圖

根據流程實例UUID生成流程進度圖。

String procInstId = ...;InputStream in = processInstanceService.generateTrace(procInstId)

4.1.2.5 流程實例掛起

根據流程實例UUID掛起流程實例,掛起的流程實例不能進行任務審批。

@Transactional

String procInstId = ...;processInstanceService.suspendProcessInstance(procInstId) 

4.1.2.6 流程實例激活

根據流程實例UUID激活流程實例,只有運行中的流程實例才能進行任務審批。

String procInstId = ...;processInstanceService.activateProcessInstance(procInstId)

4.1.2.6 流程實例終止

根據流程實例UUID強制終止流程實例,流程實例運行強制結束,狀態(tài)變?yōu)橐呀K止。

String procInstId = ...;processInstanceService.terminateProcessInstance(procInstId) 

4.1.2.6 流程實例刪除

根據流程實例UUID刪除流程實例。

String procInstId = ...;processInstanceService.deleteProcessInstance(procInstId)

4.1.3 流程定義接口

com.vprisk.workflow.core.ProcessDefinitionService@Autowiredpublic ProcessDefinitionService processDefinitionService;

4.1.3.1 流程定義分頁查詢

Pageable pageable = ...;Map<String, Object> params = ...;params.put('defineName', '') params.put('defineCode', '') params.put('status', '')Page<ProcessDefinitionDto> page = processDefinitionService.pageProcessDefinition(pageable, params)

4.1.3.2 流程定義列表查詢

根據流程定義參數查詢流程定義列表

Map<String, Object> params = ...;params.put('defineName', '')	params.put('defineCode', '')	params.put('status', '')List<ProcessDefinitionDto> list = processDefinitionService.selectProcessDefinition(params);

4.1.3.3 查詢流程定義最新版本

根據流程定義編號最新流程定義。

String processDefinitionKey = ...;ProcessDefinitionDto p = processDefinitionService.findLatestProcessDefinitionByCode(processDefinitionKey) ;

4.1.3.4 查詢未審批節(jié)點

根據任務實例UUID查詢未審批的任務節(jié)點。

String taskId = ...;List<ActivityDto> list = processDefinitionService.findUnApprovedActivitiesByTaskId(taskId); 

4.1.3.5 查詢已審批過的節(jié)點

根據任務實例UUID查詢已審批過的任務節(jié)點。

String taskId = ...;List<ActivityDto> list = processDefinitionService.findApprovedPreviousActivitiesByTaskId(taskId);

4.1.3.6 批量導入流程定義

從頁面導入“workflow.zip”,完成流程定義批量導入。適合于系統間的流程定義數據遷移。zip包含后綴為.json的流程定義文件。 一個json文件對應一條流程定義。

String zipName = ...;InputStream inputStream = ...;processDefinitionService.impProcessDefinitionZip(inputStream, zipName)

4.1.3.6 批量導出流程定義

批量導出流程定義后會生成ZIP包“workflow.zip”,供頁面下載。 ZIP包含后綴為.json的流程定義文件,一個json文件對應一條流程定義。

OutputStream outputStream = ...;Map<String, Object> params = ...;ZipOutputStream out = processDefinitionService.expProcessDefinitionZip(params, outputStream);

4.1.3.7 判斷流程定義編號是否存在

判斷流程定義編號是否存在

String processDefinitionKey = ...;boolean flag = processDefinitionService.existDefinitionKey(processDefinitionKey);

4.1.3.7 刪除流程定義

可以批量刪除流程定義,如果其中的某條流程存在運行的流程實例,則會提示刪除失敗的錯誤信息。

String [] processDefinitionIds = ...;processDefinitionService.deleteProcessDefinition(processDefinitionIds);

4.1.3.7 鎖定流程定義

當需要掛起流程定義時,就不能創(chuàng)建新流程實例了。

String processDefinitionId = ...;processDefinitionService.suspendProcessDefinition(processDefinitionId);

4.1.3.7 激活流程定義

當有掛起流程定義時,工作流提供激活流程定義功能。

String processDefinitionId = ...;processDefinitionService.activateProcessDefinition(processDefinitionId);

4.1.3.7 保存流程定義

保存一條流程定義。

ProcessDefinitionDto processDefinitionDto = ...;processDefinitionService.saveProcessDefinition(processDefinitionDto);

4.1.3.7 復制流程定義

復制類似的流程定義。

技術干貨:基于Activiti5 定制化中國式工作流架構設計

ProcessDefinitionDto processDefinitionDto = ...;processDefinitionService.copyProcessDefinition(processDefinitionDto);

4.1.4 流程參數接口

com.vprisk.workflow.core.VariableService

流程參數包括

  1. 流程實例運行和歷史參數

  2. 任務實例運行和歷史參數

歷史任務實例服務接口、任務實例服務接口、流程實例接口都繼承了流程參數接口,便于查詢流程和任務參數。

查詢流程實例或任務實例共有參數列表

public Map<String,Object> getVariables(String tartgetId)

查詢流程實例或任務實例私有參數列表

public Map<String,Object> getVariablesLocal(String tartgetId) 

設置流程實例或任務實例共有參數

@Transactionalpublic Object setVariable(String tartgetId,String variableName)

設置流程實例或任務實例私有參數

@Transactionalpublic Object setVariableLocal(String tartgetId,String variableName) 

刪除流程實例或任務實例私有參數

@Transactionalpublic Object removeVariableLocal(String tartgetId,String variableName)

刪除流程實例或任務實例共有參數

@Transactionalpublic Object removeVariable(String tartgetId,String variableName) 

4.2 歷史查詢服務接口

歷史查詢服務提供了工作流的所有歷史數據。 在執(zhí)行流程時,引擎會保存很多數據,比如流程實例啟動時間,任務的參與者, 完成任務的時間,每個流程實例的執(zhí)行路徑等等。 這個服務主要通過查詢功能來獲得這些數據。

4.2.1 歷史任務實例服務接口

com.vprisk.workflow.core.HistoricTaskInstanceService

工作流歷史服務接口之一,查詢與任務相關的歷史數據。

@Autowiredpublic HistoricTaskInstanceService historicTaskInstanceService; 

4.2.1.1 查詢指定流程已審批任務

Strubg processInstanceId = ...;List<WorkflowTableDto> list = historicTaskInstanceService.findListByProcessInstanceId(processInstanceId);

4.2.1.2 分頁查詢審批任務

Pageable pageable = ...;Map<String, Object> params = ...;params.put('processName', '')	params.put('applyUser', '')	params.put('taskName', '')Page<WorkflowTableDto> page = historicTaskInstanceService.pageTaskApproved(pageable,params);

4.2.1.1 查詢流程參數

String processInstanceId = ...;Map<String, Object> map = historicTaskInstanceService.getVariablesByProcessInstanceId(processInstanceId);

4.2.2 歷史流程實例服務接口

com.vprisk.workflow.core.HistoricProcessInstanceService

工作流歷史服務接口之一,查詢與流程實例相關的歷史數據。

@Autowiredpublic HistoricProcessInstanceService historicProcessInstanceService;

4.2.2.1 查詢指定流程實例詳細

Strubg processInstanceId = ...;ProcessInstanceDto dto = historicProcessInstanceService.findProcessInstanceById(processInstanceId);

4.2.2.1 分頁查詢流程實例

Pageable pageable = ...;Map<String, Object> params = ...;params.put('processName', '') params.put('applyUser', '') params.put('status', '')Page<WorkflowTableDto> page = historicProcessInstanceService.pageProcess(pageable,params);

4.3 擴展服務接口

4.3.1 觸發(fā)器服務接口

com.vprisk.workflow.core.ListenerService

工作流擴展服務接口之一。

基本功能包括新增,編輯、刪除、查詢。

@Autowiredpublic ListenerService listenerService;

4.3.2 流程參與人服務接口

com.vprisk.workflow.core.ParticipantService@Autowiredpublic ParticipantService participantService; 

4.3.3 歷史任務擴展服務接口

com.vprisk.workflow.core.TaskHistoryService

工作流擴展服務接口之一。 基本功能包括新增,編輯、刪除、查詢。

@Autowiredpublic TaskHistoryService taskHistoryService;

4.3.4 流程代理服務接口

com.vprisk.workflow.core.ProcessAgentService

工作流擴展服務接口之一。

基本功能包括新增,編輯、刪除、查詢。

@Autowiredpublic ProcessAgentService processAgentService;

4.3.5 任務定義擴展服務接口

com.vprisk.workflow.core.NodeVariableService

工作流擴展服務接口之一。

基本功能包括新增,編輯、刪除、查詢。

@Autowiredpublic NodeVariableService nodeVariableService;

限制場景

  1. 流程定義不支持子流程

  2. 流程定義第二個節(jié)點不支持會簽

  3. 任務審批不支持數據粒度權限

  4. 任務不支持撤回

  5. 不支持業(yè)務表單,類似于form,需要與實際的系統相結合,目前不在工作流考慮范圍之內

  6. 決策器需要自定義觸發(fā)器,完成分支流轉


    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多