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())));
子流程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);
运行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); } } }
Message = message 1 - 44-29-2013 Message = message 2 - 44-29-2013 Message = message 3 - 44-29-2013