jBPM4.4开发(四)-----------sub-process节点

来源:互联网 发布:mac棒棒糖真假 编辑:程序博客网 时间:2024/05/17 08:24

子流程

创建一个子流程实例后等待直到它完成。当子流程实例完成后,父流程的流向就会继续。

1.子流程变量

向子流程传递信息我们需要用到变量parameter-in和parameter-out,其属性var和subvar分别代表父流程变量和子流程变量。parameter-in中var代表将父流程变量传递到subvar子流程变量中;parameter-out中var代表父流程变量读取子流程变量subvar。

Demo:父流程:ProcessDocument.jpdl.xml

<?xml version="1.0" encoding="UTF-8"?><process name="ProcessDocument" xmlns="http://jbpm.org/4.4/jpdl">   <start g="58,125,48,48" name="start1">      <transition g="-21,-12" name="to review" to="review"/>   </start>   <sub-process g="160,121,92,52" name="review" sub-process-key="SubProcessReview">     <parameter-in var="document" subvar="subDocument" />     <parameter-out var="result" subvar="subResult" />      <transition g="-27,-16" name="to wait" to="wait"/>   </sub-process>   <state g="293,118,92,52" name="wait"/></process>

子流程:SubProcessReview.jpdl.xml

<?xml version="1.0" encoding="UTF-8"?><process name="SubProcessReview" xmlns="http://jbpm.org/4.4/jpdl">   <start g="19,113,48,48" name="start1">      <transition g="-45,-20" name="to get approvel" to="get approvel"/>   </start>   <task assignee="#{subDocument}" g="158,111,92,52" name="get approvel">      <transition g="-28,-16" name="to end1" to="end1"/>   </task>   <end g="316,116,48,48" name="end1"/></process>
测试类:TestSubProcess.java

package com.itstudio.jbpm.subprocess.demo;import java.util.HashMap;import java.util.List;import java.util.Map;import org.jbpm.api.Configuration;import org.jbpm.api.ExecutionService;import org.jbpm.api.IdentityService;import org.jbpm.api.ProcessEngine;import org.jbpm.api.ProcessInstance;import org.jbpm.api.RepositoryService;import org.jbpm.api.TaskService;import org.jbpm.api.task.Task;public class TestSubProcess {public static final Configuration configuration = new Configuration();public static final ProcessEngine processEngine=configuration.buildProcessEngine();public static final RepositoryService repositoryService= processEngine.getRepositoryService();public static final ExecutionService executionService=processEngine.getExecutionService();public static final TaskService taskService=processEngine.getTaskService();public void deploy(){//发布流程repositoryService.createDeployment().addResourceFromClasspath("com/itstudio/jbpm/subprocess/demo/ProcessDocument.jpdl.xml").deploy();System.out.println("父流程发布成功!");repositoryService.createDeployment().addResourceFromClasspath("com/itstudio/jbpm/subprocess/demo/SubProcessReview.jpdl.xml").deploy();System.out.println("子流程发布成功!");}public void test(){//测试Map<String, Object> variables = new HashMap<String, Object>();    variables.put("document", "sometext");        ProcessInstance processInstance = executionService        .startProcessInstanceByKey("ProcessDocument", variables);    //显示节点是否在review处    System.out.println(processInstance.findActiveActivityNames());    List<Task> taskList = taskService.findPersonalTasks("sometext");    Task task = taskList.get(0);    System.out.println("task name:"+task.getActivityName()+'\n'+"task assignee:"+task.getAssignee());        Map<String, Object> map = new HashMap<String, Object>();    map.put("subResult", "accept");    taskService.setVariables(task.getId(), map);    taskService.completeTask(task.getId());        processInstance = executionService.findProcessInstanceById(processInstance.getId());    //显示节点是否为wait    System.out.println("此时节点名字:"+processInstance.findActiveActivityNames());    String result = (String) executionService.getVariable(processInstance.getId(), "result");    //显示result是否为accept    System.out.println("此时父流程变量var为:"+result);}public static void main(String[] args) {TestSubProcess demo = new TestSubProcess();demo.deploy();demo.test();}}

2.子流程转向父流程不同节点

我们只需给sub-process节点增加transition,并且赋予每个transition唯一的名称。在子流程中定义多个结束节点(end),每个结束节点的名称分别对应父流程transition的名称,这样子流程就会按照end对应的transition名称流转父流程。

Demo2:
父流程:ProcessDocument2.jpdl.xml

<?xml version="1.0" encoding="UTF-8"?><process name="ProcessDocument2" xmlns="http://jbpm.org/4.4/jpdl">   <start g="17,124,48,48" name="start1">      <transition g="-28,-20" name="to review" to="review"/>   </start>   <sub-process g="103,125,92,52" name="review" sub-process-key="SubProcessReview2">      <transition g="150,79:15,-18" name="ok" to="next step"/>      <transition g="-28,-18" name="nok" to="update"/>      <transition g="150,221:23,-18" name="reject" to="close"/>   </sub-process>   <state g="263,54,92,52" name="next step"/>   <state g="264,129,92,52" name="update"/>   <state g="264,196,92,52" name="close"/></process>

子流程:SubProcessReview2.jpdl.xml


<?xml version="1.0" encoding="UTF-8"?><process name="SubProcessReview2" xmlns="http://jbpm.org/4.4/jpdl">   <start name="start1" g="19,111,48,48">      <transition name="to get approvel" to="get approvel" g="-48,-21"/>   </start>   <task name="get approvel" g="139,110,92,52" assignee="johndoe">      <transition name="ok" to="ok" g="182,81:47,-16"/>      <transition name="nok" to="nok" g="-18,-20"/>      <transition name="reject" to="reject" g="185,202:31,-17"/>   </task>   <end name="ok" g="300,58,48,48"/>   <end name="nok" g="301,112,48,48"/>   <end name="reject" g="304,178,48,48"/></process>
测试类:TestSubProcess2.java
package com.itstudio.jbpm.subprocess.demo;import java.util.List;import org.jbpm.api.Configuration;import org.jbpm.api.ExecutionService;import org.jbpm.api.IdentityService;import org.jbpm.api.ProcessEngine;import org.jbpm.api.ProcessInstance;import org.jbpm.api.RepositoryService;import org.jbpm.api.TaskService;import org.jbpm.api.task.Task;public class TestSubProcess2 {public static final Configuration configuration = new Configuration();public static final ProcessEngine processEngine=configuration.buildProcessEngine();public static final RepositoryService repositoryService= processEngine.getRepositoryService();public static final ExecutionService executionService=processEngine.getExecutionService();public static final TaskService taskService=processEngine.getTaskService();private void deploy() {repositoryService.createDeployment().addResourceFromClasspath("com/itstudio/jbpm/subprocess/demo/ProcessDocument2.jpdl.xml").deploy();repositoryService.createDeployment().addResourceFromClasspath("com/itstudio/jbpm/subprocess/demo/SubProcessReview2.jpdl.xml").deploy();System.out.println("Successful");}private void test() {ProcessInstance processInstance = executionService        .startProcessInstanceByKey("ProcessDocument2");System.out.println("当前节点:"+processInstance.findActiveActivityNames());List<Task> taskList = taskService.findPersonalTasks("johndoe");Task task = taskList.get(0);    System.out.println("task name:"+task.getActivityName()+'\n'+"task assignee:"+task.getAssignee());    taskService.completeTask(task.getId(),"ok");    processInstance = executionService.findProcessInstanceById(processInstance.getId());    //显示节点是否为next step    System.out.println("此时节点名字:"+processInstance.findActiveActivityNames());}public static void main(String[] args) {TestSubProcess2 demo2 = new TestSubProcess2();demo2.deploy();demo2.test();}}



By Mr.Z