flowable学习笔记-简单流程概念介绍
1 Flowable process engine允許我們創建ProcessEngine 對象和使用 Flowable 的API
ProcessEngine是線程安全的,他是通過 ProcessEngineConfiguration 進行創建的。ProcessEngineConfiguration 可以對 process engine 進行配置和微調。
ProcessEngineConfiguration 是通過 XML 配置文件或者通過編程方式進行創建,最少配置是配置好數據庫鏈接。例子如下
package org.flowable;
import org.flowable.engine.ProcessEngine;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration;
public class HolidayRequest {
public static void main(String[] args) {
ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl("jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1")
.setJdbcUsername("sa")
.setJdbcPassword("")
.setJdbcDriver("org.h2.Driver")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
ProcessEngine processEngine = cfg.buildProcessEngine();
}
}
說明:如果是spring環境,配置文件類 StandaloneProcessEngineConfiguration 可以替換成 SpringProcessEngineConfiguration 。
2 部署流程定義到 flowable engine,此時需要用到 RepositoryService ,RepositoryService 可以通過 processEngine 獲得。通過向 RepositoryService 傳遞流程定義文件來獲得部署對象。Deployment
部署流程意味著:
1)流程定義會持久化到數據庫中
2)BPMN 2.0 process XML 將會被解析成內存對象模型,該模型可以被 Flowable API 管理。
3 開始一個流程實例
到現在流程引擎中已經有了流程定義,開始流程實例之前需要一些流程變量,通過 RuntimeService 啟動一個流程實例。初始變量類型是 java.util.Map,向RuntimeService 對象傳遞初始數據,而變量的 key 和 流程定義文件BPMN 2.0 XML 中的 id 相匹配。啟動一個流程實例代碼示例如下:
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("employee", employee);
variables.put("nrOfHolidays", nrOfHolidays);
variables.put("description", description);
ProcessInstance processInstance =
runtimeService.startProcessInstanceByKey("holidayRequest", variables);
RuntimeService 開啟一個流程是通過流程定義中的 ID ,在 Flowable 中稱作是key。
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
4 查詢和完成任務
當某一任務賦給一組人時,使用常量即可,如下:
<userTask id="approveTask" name="Approve or reject request" flowable:candidateGroups="managers"/>
當要賦給流程變量中的摸一個人時,使用格式如下
<userTask id="holidayApprovedTask" name="Holiday approved" flowable:assignee="${employee}"/>
4.1 當要查詢待辦任務時,需要使用 TaskService ,代碼示例如下:
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("managers").list();
System.out.println("You have " + tasks.size() + " tasks:");
for (int i=0; i<tasks.size(); i++) {
System.out.println((i+1) + ") " + tasks.get(i).getName());
}
4.2 編寫java自動化Service,在BPMN 2.0中稱之為 Service Task,在流程定義中代碼如下
<serviceTask id="externalSystemCall" name="Enter holidays in external system"
flowable:class="org.flowable.CallExternalSystemDelegate"/>
其中代理類 CallExternalSystemDelegate 需要實現 org.flowable.engine.delegate.JavaDelegate 接口,此時,當流程到該任務時,會實例化該類并執行 execute 方法
總結
以上是生活随笔為你收集整理的flowable学习笔记-简单流程概念介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 战意11月14日更新公告 新增沙场点兵系
- 下一篇: js实现连线题