当前位置: 首页 > news >正文

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





子流程

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

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());//显示节点是否为waitSystem.out.println("此时节点名字:"+processInstance.findActiveActivityNames());String result = (String) executionService.getVariable(processInstance.getId(), "result");//显示result是否为acceptSystem.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 stepSystem.out.println("此时节点名字:"+processInstance.findActiveActivityNames());}public static void main(String[] args) {TestSubProcess2 demo2 = new TestSubProcess2();demo2.deploy();demo2.test();}}



By Mr.Z




http://www.xdnf.cn/news/849655.html

相关文章:

  • ⭐️WindowsXP原版系统镜像iso下载(操作系统概述 特性与功能视觉体验性能优化 安全性增强x86 64位 激活密钥免费产品文件地址 Professional Home Edition sp)
  • http直接调用paddlepaddle实现文字转语音,语音转文字
  • 算法设计与分析复习总结(二)
  • English 900 英语九百句
  • 如何高效开发一个OA办公系统?
  • JavaWeb-QQ空间项目解析
  • Windows系统VisualSVN-Server下载安装和配置
  • IEEE access投稿及注意事项(初稿,回复审稿人,终稿)
  • 【保姆级图文教程】VirtualBox安装Ubuntu系统虚拟机以及一些基础的VirtualBox操作,图文详细,看完必会
  • Beyond Compare 3 许可证密钥被撤销
  • 小说站源码(带自动采集开源小说网站源码)
  • 启动应用程序出现d3dx9_41.dll缺少问题解决
  • 号外:2012年三星手机在中国销量翻3倍,位列中国智能手机排行首位,诺基亚跌至第7位
  • android 游戏数据在哪里下载地址,安卓游戏数据包放哪 小编教你怎么用
  • java中applet小程序的数字签名
  • 记录最坑的一天VS2017 安装QT插件失败
  • 接口测试的几种方法
  • CIDR详解
  • strncpy的具体用法
  • 一起看看ARP表项中的Incomplete?
  • matlab中scalar意思,scalar是什么意思_scalar的翻译_音标_读音_用法_例句_爱词霸在线词典...
  • 数据库之NoSQL简介
  • 什么是Referer?Referer的作用?空Referer是怎么回事?
  • oracle中的nvl函数讲解
  • LIN总线详解
  • linux 定时任务
  • [转]TFTP协议详解
  • 2024年运维最新超详细:安装Linux系统教程_linux系统安装,从三流Linux运维外包到秒杀阿里P7
  • PWA介绍及快速上手搭建一个PWA应用
  • java中同类对象之间的compareTo()和compare()方法的比较