zoukankan      html  css  js  c++  java
  • jbpm5.1介绍(5)

    看几个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>();
    			List<String> list = new ArrayList<String>();
    			list.add("krisv");
    			list.add("john doe");
    			list.add("superman");
    			params.put("list", list);
    			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任务结点执行后输出的结果。

  • 相关阅读:
    详解Java API之正则表达式
    ios UIWindow 错误使用导致无法接收motionEnded(摇一摇)函数
    ios NSTimer的强引用问题
    ionic 接触的第一个Hybrid项目
    iOS 小经验:UIAnimation空对象导致crash
    iOS GCD 必读推荐,有关于单例使用问题
    ios NSString 转 float的注意
    iOS UIViewController 和 nib 相关的3个方法
    ios delegate 使用注意 assign,weak
    ios 使用autolayout 后button 的frame 无法设置问题!
  • 原文地址:https://www.cnblogs.com/skyme/p/2241408.html
Copyright © 2011-2022 走看看