天天看點

jbpm5學習資料(腳本任務scriptTask)

JBPM5學習資料(腳本任務scriptTask)

Junit測試的mini流程helloworld

這是一個在demo中使用的Script Task做的簡單示例,在執行到這個任務結點的時候自動輸出"hello world"

打開BPMN2-MinimalProcess.bpmn2檔案

jbpm5學習資料(腳本任務scriptTask)

流程如上圖,流程開始的時候自動執行這個節點,然後在節點上執行輸出的指令

看一看測試程式

?

public void testMinimalProcess() throws Exception {

KnowledgeBase kbase = createKnowledgeBase("BPMN2-MinimalProcess.bpmn2");

StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

ProcessInstance processInstance = ksession.startProcess("Minimal");

assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);

}

在執行完成後斷言一下執行的結果為完成狀态,就是完成狀态是true

assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);

在控制台中成功輸出結果

Loading process BPMN2-MinimalProcess.bpmn2

Hello World

表示示例加載運作成功

Junit測試的加載子流程的helloworld

這是一個在demo中使用子流程的示例,功能和上面一樣但是用到了子流程

流程如下圖:

jbpm5學習資料(腳本任務scriptTask)

調用程式如下:

?

public void testCompositeProcessWithDIGraphical() throws Exception {

KnowledgeBase kbase = createKnowledgeBase("BPMN2-CompositeProcessWithDIGraphical.bpmn2");

StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

ProcessInstance processInstance = ksession.startProcess("Composite");

assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);

}

 完成之後狀态如上,并且在控制台同樣輸出hello world

Junit測試script task

功能和上兩個是一樣的,截圖

jbpm5學習資料(腳本任務scriptTask)

運作

?

public void testScriptTask() throws Exception {

KnowledgeBase kbase = createKnowledgeBase("BPMN2-ScriptTask.bpmn2");

StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

ProcessInstance processInstance = ksession.startProcess("ScriptTask");

assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);

}

 輸出

Loading process BPMN2-ScriptTask.bpmn2

Hello World

Junit測試輸出list

功能如上,但是在script task中輸出清單

jbpm5學習資料(腳本任務scriptTask)

action屬性的内容如下

jbpm5學習資料(腳本任務scriptTask)

運作輸出

Loading process BPMN2-Import.bpmn2

[1]

Junit測試Rule Task

這次要加載的檔案有兩個,一個是BPMN2-RuleTask.bpmn2,一個是BPMN2-RuleTask.drl,一個是流程檔案,一個是規則檔案

裡面加載的是Rule Task

jbpm5學習資料(腳本任務scriptTask)

并且設定規則為

jbpm5學習資料(腳本任務scriptTask)

然後看一下drools規則檔案中的内容

?

package com.sample;

global java.util.List list;

rule MyRule

ruleflow-group "myRules"

when

then

list.add("Executed");

end

 定義了規則組myRules,如果滿足條件那條将加list中添中一條值

于是在我們的測試代碼中就全看到

assertTrue(list.size() == 1);

看一下完整的測試代碼

?

public void testRuleTask() throws Exception {

System.out.println("Loading process BPMN2-RuleTask.bpmn2");

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

kbuilder.add(ResourceFactory.newClassPathResource("junit/BPMN2-RuleTask.bpmn2"), ResourceType.BPMN2);

kbuilder.add(ResourceFactory.newClassPathResource("junit/BPMN2-RuleTask.drl"), ResourceType.DRL);

KnowledgeBase kbase = kbuilder.newKnowledgeBase();

StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

List<

String

> list = new ArrayList<

String

>();

ksession.setGlobal("list", list);

ProcessInstance processInstance = ksession.startProcess("RuleTask");

assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);

ksession.fireAllRules();

assertTrue(list.size() == 1);

assertProcessInstanceCompleted(processInstance.getId(), ksession);

}

 加入兩個配置檔案,并且傳入list,當結點執行完成後,list中的值自動添加了一條。測試結果正常通過。

Junit測試資料對象

這個示例示範的是從外部傳入資料,并且在内部得到資料并且顯示的示例

jbpm5學習資料(腳本任務scriptTask)

其中Log節點是一個Script Task,它的Action屬性裡邊設定了值employee,它的值是從外部傳入的

System.out.println("Processing evaluation for employee " + employee);

看一下測試的代碼

?

public void testDataObject() throws Exception {

KnowledgeBase kbase = createKnowledgeBase("BPMN2-DataObject.bpmn2");

StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

Map<

String

, Object> params = new HashMap<

String

, Object>();

params.put("employee", "UserId-12345");

ProcessInstance processInstance = ksession.startProcess("Evaluation", params);

assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);

}

 傳入的employee的值是"UserId-12345"

運作完成後看輸出的結果

Loading process BPMN2-DataObject.bpmn2

Processing evaluation for employee UserId-12345

顯示我們傳入的資訊,這對我們做流程判斷非常有用。