jbpm5.1介绍(5)

来源:互联网 发布:windows调色板pal下载 编辑:程序博客网 时间:2024/05/21 14:59

看几个jbpm5中带的示例程序吧,包括了很多我们在日常生活中的场景

循环示例

本示例是一个在外部传入的变量,通过传入的变量来判断循环次数的演示程序,看一下流程定义的内容

如图:

初始化的时候设置变量i的值为0,然后进入流程结点,选择的是XOR,就是异或的意思,在循环中输出变量i的值并且加1,

在后面的选择节点上判断变量i的值,如果小于count则循环继续,如果大于i那么就进行完成结点,输出结点中的内容。

运行程序LoopingExample,程序内容如下:

public classLoopingExample {
     
    publicstatic final voidmain(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 = newHashMap<String, Object>();
            params.put("count", 10);
            ksession.startProcess("com.sample.looping",params);
            logger.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
 
    privatestatic KnowledgeBase readKnowledgeBase() throws Exception {
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kbuilder.add(ResourceFactory.newClassPathResource("looping/Looping.bpmn"), ResourceType.BPMN2);
        returnkbuilder.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 classMultipleInstanceExample {
     
    publicstatic final voidmain(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 = newHashMap<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();
        }
    }
 
    privatestatic KnowledgeBase readKnowledgeBase() throws Exception {
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kbuilder.add(ResourceFactory.newClassPathResource("multipleinstance/multipleinstance.bpmn"), ResourceType.BPMN2);
        returnkbuilder.newKnowledgeBase();
    }
 
}

 以上的红色部分是传的列表,这三个人就是要被审查的销售代表的任务。

启动示例程序,输入sales-rep,刷新

当三个任务全部start,并且complete完成后则在控制台能够看到

Process completed

这个是Script Task任务结点执行后输出的结果。


原创粉丝点击