jBPM4.4开发(四)-----------sub-process节点
2012-07-04 22:40
302 查看
子流程
创建一个子流程实例后等待直到它完成。当子流程实例完成后,父流程的流向就会继续。
1.子流程变量
向子流程传递信息我们需要用到变量parameter-in和parameter-out,其属性var和subvar分别代表父流程变量和子流程变量。parameter-in中var代表将父流程变量传递到subvar子流程变量中;parameter-out中var代表父流程变量读取子流程变量subvar。Demo:父流程:ProcessDocument.jpdl.xml
![](http://my.csdn.net/uploads/201207/04/1341411445_8322.png)
<?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
![](http://my.csdn.net/uploads/201207/04/1341411623_3087.png)
<?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
![](http://my.csdn.net/uploads/201207/04/1341412570_8540.png)
<?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
![](http://my.csdn.net/uploads/201207/04/1341412712_8393.png)
<?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
相关文章推荐
- jBPM4.4开发(一)------------start,end,state活动节点
- jBPM4.4开发(三)-----------task任务节点
- JBPM4.4开发(二)-------------决策节点decision
- jBPM4.4开发(九)-----------HQL,SQL节点
- jBPM-4.4:主流程(process)与子流程(sub-process)之间交换数据
- jBPM4.4开发(六)-----------fork节点
- 【代码篇】JBPM4.4开发流程节点(动态代理实现流程管理业务)
- jBPM4.4开发(五)-----------custom节点
- JBPM4.4之JAVA节点
- jBPM4.4:ProcessDefinition/ProcessInstance/Execution/Task关系和区别
- jBPM4.4:ProcessDefinition/ProcessInstance/Execution/Task关系和区别 .
- JBPM 4.4 流程节点详解
- jBPM4.4:在看开发指南之前总结一下
- jbpm4.4之开发环境搭建1
- jBPM4.4之开发环境搭建
- 【基础篇】工作流技术JBPM4.4开发入门(一)
- jbpm4.4开发环境配置+请假实例
- JBoss 系列三十九:jBPM5示例之 Multiple Instance Sub-Process
- 关于ssh整合jbpm4.4 无法获取processEngine的问题
- MyEclipse8.5搭建Jbpm4.4开发