flowable子流程实现
flowable子流程
即在主流程之外去执行一个小的流程
注子流程可以套子流程
以下的我实现的流程图:
以下是我的BPMN2.0的XML:
<process id="XMSubProcessUS" name="TestsubProcessUS" isExecutable="true">
<documentation>子流程</documentation>
<startEvent id="Start" name="开始"></startEvent>
<userTask id="usertask1" name="usertask1"></userTask>
<sequenceFlow id="start-usertask1" sourceRef="Start" targetRef="usertask1"></sequenceFlow>
<userTask id="usertask2" name="usertask2"></userTask>
<endEvent id="end" name="结束"></endEvent>
<sequenceFlow id="usertask2-end" sourceRef="usertask2" targetRef="end"></sequenceFlow>
<subProcess id="subprocess" name="subprocess">
<startEvent id="substart"></startEvent>
<serviceTask id="subservicetask1" name="subservicetask1" flowable:class="cn.buba.flowable.submain.SubServiceTask1"></serviceTask>
<userTask id="subusertask1" name="subusertask1"></userTask>
<endEvent id="subend"></endEvent>
<sequenceFlow id="subusertask1-subend" sourceRef="subusertask1" targetRef="subend"></sequenceFlow>
<sequenceFlow id="substart-subservicetask1" sourceRef="substart" targetRef="subservicetask1"></sequenceFlow>
<sequenceFlow id="subservicetask1-subusertask1" sourceRef="subservicetask1" targetRef="subusertask1"></sequenceFlow>
</subProcess>
<sequenceFlow id="sid-81152AB3-A7B7-4FBB-B83A-A7AA726A448D" sourceRef="usertask1" targetRef="subprocess"></sequenceFlow>
<sequenceFlow id="sid-8CB3093A-815F-4433-9890-0163398C3D17" sourceRef="subprocess" targetRef="usertask2"></sequenceFlow>
</process>
以下是我Java API 的编程代码:
//主体流程的开始
//创建数据库链接信息 链接 库、用户名、密码 请自己编辑
ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/******?characterEncoding=UTF-8")
.setJdbcUsername("****")
.setJdbcPassword("****")
.setJdbcDriver("com.mysql.jdbc.Driver")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE);
// 通过数据库链接信息 创建Flowable流程引擎 Create Flowable process engine
ProcessEngine processEngine = cfg.buildProcessEngine();
// 获取Flowable服务 Get Flowable repositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
// 获取Flowable服务 Get Flowable runtimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
// 获取taskService对象 Get the first task
TaskService taskService = processEngine.getTaskService();
Deployment deploy = repositoryService.createDeployment().addClasspathResource("processes/US_ServiceTask/TestsubProcessUS.bpmn20.xml").deploy();
ProcessInstance process = runtimeService.startProcessInstanceByKey("XMSubProcessUS");
Task task = taskService.createTaskQuery().processInstanceId(process.getId()).singleResult();
System.out.println("1 task is="+task);
if (task!=null) {
System.out.println("提交 task is="+task.getName());
taskService.complete(task.getId());
}
task = taskService.createTaskQuery().processInstanceId(process.getId()).singleResult();
System.out.println("2 taks is="+task);
if (task!=null) {
System.out.println("提交 task is="+task.getName());
taskService.complete(task.getId());
}
task = taskService.createTaskQuery().processInstanceId(process.getId()).singleResult();
System.out.println("3 task is="+task);
if (task!=null) {
System.out.println("提交 task is="+task.getName());
taskService.complete(task.getId());
}
task = taskService.createTaskQuery().processInstanceId(process.getId()).singleResult();
System.out.println("task is="+task);
//关闭
processEngine.close();
System.exit(0);
以上是成功demo
以上如有问题可评论 我看到立马回答