Activiti 5.3:子流程(subProcess)(一)

2014-11-24 09:46:27 · 作者: · 浏览: 0

Activiti 5.3:子流程(subProcess)

Activiti 5.3提供了子流程的实现,包括两种基于子流程的实现:
一种是内嵌子流程:子流程元素内嵌在主流程元素之内,只能在该流程中使用该子流程,外部是无法访问到的。这种子流程一般作为局部通用逻辑处理,或者因为特定业务需要,使得比较复杂的单个主流程设计清晰直观;
另一种是调用子流程:首先实现一个流程,在另一个流程中可以调用该流程,通常可以定义一些通用的流程作为这种调用子流程,供其他多个流程定义复用。这种子流程使用元素来进行调用,间接地嵌入到主流程中,用起来比较方便。

内嵌子流程
实现的基于内嵌子流程的流程,示例如图所示:

对应的流程定义文件SubProcessTest.MySubprocess.bpmn20.xml,内容如下所示:
[java]
< xml version="1.0" encoding="UTF-8" >
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">












class="org.shirdrn.workflow.activiti.subprocess.CheckBankTask" />





class="org.shirdrn.workflow.activiti.subprocess.CheckMerchantTask" />











class="org.shirdrn.workflow.activiti.subprocess.CollectMessageTask" />







流程定义中,实现了3个TaskListener,对应的代码分别如下所示:
[java]

package org.shirdrn.workflow.activiti.subprocess;

import java.util.HashMap;
import java.util.logging.Logger;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.impl.pvm.delegate.TaskListener;

public class CheckBankTask implements TaskListener {

private final Logger log = Logger.getLogger(CheckBankTask.class.getName());

@SuppressWarnings("unchecked")
public void notify(DelegateTask delegateTask) {
log.info("i am CheckBankTask.");
System.out.println("in : " + delegateTask.getVariables());
((HashMap)delegateTask.getVariables().get("in")).put("next", "CheckBankTask");
((HashMap)delegateTask.getVariables().get("out")).put("reponse", "subprocess:CheckBankTask->CheckMerchantTask");
}
}
[java] view plaincopy
package org.shirdrn.workflow.activiti.subprocess;

import java.util.HashMap;

public class CheckMerchantTask implements TaskListener {

private final Logger log = Logger.getLogger(CheckMerchantTask.class.getName());

@SuppressWarnings("unchecked")
public void notify(DelegateTask delegateTask) {
log.info("i am CheckMerchantTask.");
System.out.println("in : " + delegateTask.getVariables());
((HashMap)delegateTask.getVariables().get("in")).put("previous", "CheckMerchantTask");
}
}
[java]
package org.shirdrn.workflow.activiti.subprocess;

import java.util.Map;

public class CollectMessageTask implements TaskListener {

private final Logger log = Logger.getLogger(CollectMessageTask.class.getName());

@SuppressWarnings("unchecked")
public void notify(DelegateTask delegateTask) {
log.info("i am CollectMessageTask.");
System.out.println("out : " + (Map)delegateTask.getVariables().get("out"));
System.out.println("all : " + delegateTask.getVariables());
}
}
测试用例,代码如下所示:
[java]
package org.shirdrn.workflow.activiti.