1. 程式人生 > 其它 >jbpm5.1介紹(5)

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任務結點執行後輸出的結果。