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());
	    //显示节点是否为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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值