JBoss 系列四十:jBPM5示例之 Embedded Sub-Process

jBPM5中EmbeddedSubProcess是指在流程设计时子流程镶嵌在主流程,如下为EmbeddedSubProcess流程示意:

JBoss 系列四十:jBPM5示例之 Embedded Sub-Process_第1张图片

如图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。


你可能感兴趣的:(jboss,jbpm,embedded,BPM,JBPM5,Sub-Process)