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)新。
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ā)者在使用工作流軟件包時,分為兩種模式。 如下:
首先,在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>
首先,在POM中引用工作流jar 拷貝工作流 jar文件
關于MVC模式理解,參考MVC 拷貝工作流引擎配置類 在app-workflow-web下: com.vprisk.config.WorkflowApplicationConfig 拷貝工作流JSP文件 拷貝流程設計器文件 在app-workflow-web工程的/workflow目錄下,其中stencilset.json是流程設計器組件配置庫。 在app-workflow-web/webapp/flowdesigner目錄下是流程設計器的頁面、css、javascripts、圖片。 2.3 數據庫腳本
目前工作流支持Oracle和DB2
工作流的表都以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ā)器、審批歷史、流程和任務定義擴展屬性等。
分為兩部分
工作流引擎表在工作流軟件開發(fā)包中。在系統初始化時,工作流引擎自動初始化數據庫腳本,不需要人為干預。 工作流引擎腳本在activiti-engine-5.18.0.jar中: 而工作流擴展表是針對工作流引擎表做的一些定制化配置的表,需要開發(fā)者手動整合到業(yè)務系統。
擴展的數據庫腳本文件存放在工作流app-workflow-web工程的db/mini目錄下: 在實際的業(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、 字典參數 2、 流程菜單 3. 集成工作流3.1 模塊說明
工作流核心服務接口,負責流程定義更新與查詢、流程實例更新與查詢、任務審批與查詢,參與人查詢、流程代理更新與查詢、流程歷史查詢等。
負責工作流數據傳遞,頁面地址跳轉
負責數據庫配置,事務管理、數據展示以及頁面展示。
3.2 工作流引擎配置 工作流引擎采用Spring注解配置類,管理工作流引擎數據源-dataSource配置、數據庫事務-transactionManager: com.vprisk.config.WorkflowApplicationConfig
以及配置Activiti審批服務接口,如流程定義以及流程相關靜態(tài)資源RepositoryService:
流程實例RuntimeService
任務服務TaskService
歷史服務HistoryService
等服務接口,更多詳細信息請參考Activiti用戶手冊。
3.3 工作流事務管理 工作流通過Spring的注解方式管理事務,一般事務控制在Service服務類的方法級別上,如保存流程定義: @Transactionalpublic void saveProcessDefinition(ProcessDefinitionDto dto){ ...}通過@Transactional來標識需要事務,這時候與Spring事務管理結合起來呢。 3.4 流程引擎的API和服務
流程定義是工作流核心功能之一,流程定義服務提供了管理和控制流程定義的操作。 包括新增、編輯、復制、鎖定、激活、導入、導出、刪除。它包含了一個流程每個環(huán)節(jié)的結構和行為。
流程實例服務是工作流核心功能之一。 包括啟動流程,掛起、激活、刪除、復位發(fā)起、查詢、流程進度圖等。 流程實例服務負責啟動一個流程定義的新實例。 流程定義定義了流程各個節(jié)點的結構和行為。 流程實例就是這樣一個流程定義的實例。對每個流程定義來說,同一時間會有很多實例在執(zhí)行。 流程實例服務可以用來獲取和保存流程參數。 這些數據是特定于某個流程實例的,并會被很多流程中的節(jié)點使用 (比如,一個決策器常常使用流程參數來決定流轉到指定分支走流程)。 流程實例服務也能查詢流程實例和執(zhí)行。 最后,流程實例服務可以在流程實例等待外部觸發(fā)時使用,這時可以用來繼續(xù)流程實例。 流程實例可以有暫停狀態(tài),而服務提供了激活方法來“激活”實例, 接受外部激活后,流程實例就會繼續(xù)向下執(zhí)行。 流程進度圖
其中標紅的箭頭是已走完的,標紅任務節(jié)點是當前要審批節(jié)點。
任務實例是由系統中真實人員執(zhí)行的,它是工作流核心功能之一。包括任務審批,查詢用戶任務、任務改派,任務駁回等。
流程歷史是一個組件,它可以捕獲發(fā)生在進程執(zhí)行中的信息并永久的保存,與運行時數據不同的是,當流程實例運行完成之后它還會存在于數據庫中。 歷史查詢服務提供了工作流的所有歷史數據。 在執(zhí)行流程時,引擎會保存很多數據,比如流程實例啟動時間,任務的參與者, 完成任務的時間,每個流程實例的執(zhí)行路徑等等。 這個服務主要通過查詢功能來獲得這些數據。
工作流擴展服務接口之一。 基本功能包括新增,編輯、刪除、查詢; 觸發(fā)器可以理解為流程審批過程中,中間嵌入的一段小程序,他的主要用途在于可以做一些審批任務之外的一些事情,如操作業(yè)務數據,分配下一節(jié)點審批人、記錄日志,消息提醒等等。
觸發(fā)器包括前置觸發(fā)器和后置觸發(fā)器 觸發(fā)器分類
工作流擴展服務接口之一,流程參與人服務可以查詢流程審批相關審批人,機構、角色。
工作流擴展服務接口之一。 基本功能包括新增,編輯、刪除、查詢; 在任務審批前或審批完成后,開發(fā)者可自定義前置任務觸發(fā)器或者后置任務觸發(fā)器,在觸發(fā)器中可記錄一些與業(yè)務相關的日志信息或者審批任務消息提醒等。
工作流擴展服務接口之一。 基本功能包括新增,編輯、刪除、查詢; 有些時候有的領導在一段時間內有事不能審批,比如出差。那問題來了,如果領導不能審批任務,整個流程將會停滯不前。所以這個時候需要有人代領導審批任務,流程代理服務就派上用場了。流程代理服務允許領導指定代理人在一段之間內,代理指定流程,審批任務。
工作流擴展服務接口之一,流程設計器擴展了流程定義屬性,而這些屬性不屬于工作流引擎本身,需要額外用數據庫表存儲。主要用途在于流程審批時,可以把流程定義屬性(參數)當作流程審批權重,影響任務完成。比如回退規(guī)則、審批人、是否會簽、允許改派等。 3.4 流程觸發(fā)器 1. 觸發(fā)器觸發(fā)條件類型(type) 任務級別
流程級別
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插入腳本進行手動安裝,如:
然后在新建流程定義頁面的屬性欄顯示,如:
3.5 流程設計器 在app-workflow-web工程目錄下
其中stencilset.json是流程設計器組件配置庫。
webapp/flowdesigner包含網頁版流程設計器頁面、css、script等資源。 網頁版流程設計器 網頁版流程設計器主要由Angularjs,SVG矢量圖 開發(fā)而成。對IE最低版本要求是IE9,請開發(fā)者注意。
3.6 示例 假設已經把工作流集成完畢并運行起來,演示公司簡單的請假申請流程: 保存請假申請流程定義 在流程設計器定義一條流程編號為VC_1001的請假申請流程
為了讓工作流引擎知道這個流程,我們必須先進行 >創(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 批量任務審批駁回
String [] taskIds = ...;String nextTaskCode = ...;Map<String, Object> variables = ...;taskInstanceService.rollbackTask(taskIds, nextTaskCode, variables); 4.1.1.10 保存流程參數
Task task = ...;String nextTaskCode = ...;Map<String, Object> variables = ...;taskInstanceService.saveTaskVariable(task, nextTaskCode, variables); 該保存方法有事務控制。 4.1.1.11 保存任務私有參數
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ā)起
String procInstId = ...;ProcessInstanceDto p = processInstanceService.restartProcessInstance(procInstId); 4.1.2.2 流程啟動
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 流程實例詳細
String procInstId = ...;ProcessInstanceDto p = processInstanceService.findProcessInstanceById(procInstId) 4.1.2.5 流程實例進度圖
String procInstId = ...;InputStream in = processInstanceService.generateTrace(procInstId) 4.1.2.5 流程實例掛起
@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 復制流程定義 復制類似的流程定義。
ProcessDefinitionDto processDefinitionDto = ...;processDefinitionService.copyProcessDefinition(processDefinitionDto); 4.1.4 流程參數接口 com.vprisk.workflow.core.VariableService 流程參數包括
歷史任務實例服務接口、任務實例服務接口、流程實例接口都繼承了流程參數接口,便于查詢流程和任務參數。 查詢流程實例或任務實例共有參數列表 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; 限制場景
|
|
|
來自: 昵稱34195792 > 《技術》