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
- jBPM4.4开发(四)-----------sub-process节点
- jBPM4.4开发(五)-----------custom节点
- jBPM4.4开发(六)-----------fork节点
- JBPM4中sub-process的使用
- jBPM4.4开发(一)------------start,end,state活动节点
- JBPM4.4开发(二)-------------决策节点decision
- jBPM4.4开发(三)-----------task任务节点
- jBPM4.4开发(九)-----------HQL,SQL节点
- 【思想篇】工作流技术JBPM4.4开发入门(四)
- JBPM4.4节点详解(常用)
- jbpm4.4 java节点
- 【代码篇】JBPM4.4开发流程节点(动态代理实现流程管理业务)
- JBPM4.4之JAVA节点
- jBPM4.4开发(七)-----------事件机制
- jBPM4.4开发(八)-----------java活动
- jBPM4.4开发(十)-----------mail
- JBPM4.4开发感受
- JBPM4.4应用开发
- I/O多路复用技术详解之poll模型
- ubuntu下比较好用的msn聊天工具
- 【对比】指针与数组
- I/O多路复用技术详解之epoll模型
- Linux下DM644x设备驱动I2C之总线驱动(一)详解
- jBPM4.4开发(四)-----------sub-process节点
- MyEclipse提示键配置、提示快捷键、提示背景色、关键字颜色、代码显示、编辑框背景色等
- ASP.Net 热身 之 多线程
- android获取手机内部存储空间和外部存储空间
- C陷阱与缺陷(二)----------------------语义“陷阱”
- 图像特效之电影海报
- 黑马程序员 Java基础 01
- objective-c isgl3d 反射线拾取
- bash: sqlplus: command not found 解决方法