jBPM5中EmbeddedSubProcess是指在流程设计时子流程镶嵌在主流程,如下为EmbeddedSubProcess流程示意:
如图Tag Messages Sub-Process为镶嵌在主流程中的子流程,EmbeddedSubProcess流程运行时传输三条字符串message 1,message 2和message 3,在流程运行时主流程的Format tag节点中生成一个tag,在子流程Apply Tag中将生成的tsg添加到每一条消息的末尾,流程运行结束输出三条消息确认设定tag情况。
主流程的Format tag节点为Service Task节点,运行时执行的Java代码如下:
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("mm-dd-yyyy");
kcontext.setVariable("tag", sdf.format(new java.util.Date(System.currentTimeMillis())));
即将当前的时间以mm-dd-yyyy格式作为tag。
子流程Apply Tag节点为Service Task节点,运行时执行的Java代码如下:
java.util.List<String> taggedMessages = new java.util.ArrayList<String>();
for (Object message : messages){
taggedMessages.add(((String)message)+" - "+tag);
}
kcontext.setVariable("messages",taggedMessages);
- EmbeddedSubProcess流程运行代码:https://github.com/kylinsoong/.../EmbeddedSubProcessStart.java
- EmbeddedSubProcess流程:https://github.com/kylinsoong/.../embeddedSubProcess.bpmn
运行org.jbpm.quickstarts.subprocess.EmbeddedSubProcessStart将会运行EmbeddedSubProcess流程,EmbeddedSubProcessStart代码如下:
package org.jbpm.quickstarts.subprocess;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
import org.drools.runtime.process.WorkflowProcessInstance;
import org.jbpm.quickstarts.QuickStartBase;
public class EmbeddedSubProcessStart extends QuickStartBase{
public static void main(String[] args) {
new EmbeddedSubProcessStart().test();
}
public void test() {
StatefulKnowledgeSession ksession = createKnowledgeSession("quickstarts/embeddedSubProcess.bpmn");
List<String> messages = new ArrayList<String>();
messages.add("message 1");
messages.add("message 2");
messages.add("message 3");
Map<String,Object> parameters = new HashMap<String, Object>();
parameters.put("messages", messages);
ProcessInstance process = ksession.startProcess("org.jbpm.quickstarts.embeddedsubprocess",parameters);
messages = (List<String>) ((WorkflowProcessInstance)process).getVariable("messages");
for (String message : messages) {
System.out.println("Message = "+message);
}
}
}
EmbeddedSubProcess流程运行输出的结果如下:
Message = message 1 - 44-29-2013
Message = message 2 - 44-29-2013
Message = message 3 - 44-29-2013
如上44-29-2013为设定的tag。