本文共 2755 字,大约阅读时间需要 9 分钟。
看几个jbpm5中带的示例程序吧,包括了很多我们在日常生活中的场景
循环示例
本示例是一个在外部传入的变量,通过传入的变量来判断循环次数的演示程序,看一下流程定义的内容
如图:
初始化的时候设置变量i的值为0,然后进入流程结点,选择的是XOR,就是异或的意思,在循环中输出变量i的值并且加1,
在后面的选择节点上判断变量i的值,如果小于count则循环继续,如果大于i那么就进行完成结点,输出结点中的内容。
运行程序LoopingExample,程序内容如下:
public class LoopingExample { public static final void main(String[] args) { try { // load up the knowledge base KnowledgeBase kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(ksession, "test" , 1000); // start a new process instance Map<String, Object> params = new HashMap<String, Object>(); params .put( "count" , 10); ksession.startProcess( "com.sample.looping" , params ); logger.close(); } catch (Throwable t) { t.printStackTrace(); } } private static KnowledgeBase readKnowledgeBase() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource( "looping/Looping.bpmn" ), ResourceType.BPMN2); return kbuilder.newKnowledgeBase(); } } |
运行完结果如下:
i = 0 i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 i = 9 Loop completed |
可以动态修改params.put("count", 10); 设置的变量的值修改为5,则输出的结果为5次。
多实例子流程
下面的例子中演示的是审查销售代表的任务并且做对应的处理。
这个例子演示的是一个多实例子流程的示例,就是当执行到这个子流程的时候,传入一组元素,为其中的每一项都执行一次
其中CollectionExpression 的值设置为list,就是接受一个外部传入的list,VariableName 的值设置为item,在下文中就可以使用item来取值
在下面的user task的comment就用到了这个值"你需要检查用户 #{item}”
启动示例程序,注意此时传入
public class MultipleInstanceExample { public static final void main(String[] args) { try { // load up the knowledge base KnowledgeBase kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newThreadedFileLogger(ksession, "test" , 1000); ksession.getWorkItemManager().registerWorkItemHandler( "Human Task" , new WSHumanTaskHandler()); // start a new process instance Map<String, Object> params = new HashMap<String, Object>(); <span style= "color: #ff0000;" >List<String> list = new ArrayList<String>(); list.add( "krisv" ); list.add( "john doe" ); list.add( "superman" ); params .put( "list" , list); </span> ksession.startProcess( "com.sample.multipleinstance" , params ); logger.close(); } catch (Throwable t) { t.printStackTrace(); } } private static KnowledgeBase readKnowledgeBase() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource( "multipleinstance/multipleinstance.bpmn" ), ResourceType.BPMN2); return kbuilder.newKnowledgeBase(); } } |
以上的红色部分是传的列表,这三个人就是要被审查的销售代表的任务。
启动示例程序,输入sales-rep,刷新
当三个任务全部start,并且complete完成后则在控制台能够看到
Process completed
这个是Script Task任务结点执行后输出的结果。
转载地址:http://bibgx.baihongyu.com/