jbpm5.1介紹(5)
阿新 • • 發佈:2022-05-04
看幾個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任務結點執行後輸出的結果。