1.獲取processEngine的方法:
a) 方法一
private ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
b) 方法二
// 獲取單例的ProcessEngine對象,使用的是默認的配置文件(jbpm.cfg.xml)
private ProcessEngine processEngine = Configuration.getProcessEngine();
在 jbpm.cfg.xml 中:
<jbpm-configuration>
<import resource="jbpm.default.cfg.xml" />
<import resource="jbpm.businesscalendar.cfg.xml" />
<import resource="jbpm.tx.hibernate.cfg.xml" />
<import resource="jbpm.jpdl.cfg.xml" />
<import resource="jbpm.bpmn.cfg.xml" />
<import resource="jbpm.identity.cfg.xml" />
</jbpm-configuration>
在 jbpm.hibernate.cfg.xml 中:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 如果是MySQL,一定要使用org.hibernate.dialect.MySQL5InnoDBDialect方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///jbpm4_test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1234</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 這些映射文件是JBPM的,不能刪除!!! -->
<mapping resource="jbpm.repository.hbm.xml" />
<mapping resource="jbpm.execution.hbm.xml" />
<mapping resource="jbpm.history.hbm.xml" />
<mapping resource="jbpm.task.hbm.xml" />
<mapping resource="jbpm.identity.hbm.xml" />
</session-factory>
</hibernate-configuration>
2.常用的Service API(JBPM所有的操作都是通過Service完成的)
a) processEngine.getRepositoryService();//管理流程定義的相關操作(部署,查詢,刪除等)
b) processEngine.getExecutionService();//管理執行的,流程實例的管理操作,一次具體執行的信息,包括啓動、推進、刪除Execution等操作
c) processEngine.getTaskService();//管理任務的(查詢任務,辦理任務)
d) processEngine.getHistoryService();//管理歷史的數據(執行完的數據管理,主要是查詢)
3.API風格
4.查詢的有關APIa) 方法調用鏈.
b) 每一個方法都是流程有關的一個業務操作,默認是一個獨立的事務.
功能說明
相應的查詢API
查詢“流程定義”
ProcessDefinitionQuery processDefinitionQuery =
processEngine.getRepositoryService()
.createProcessDefinitionQuery();
查詢“執行對象”
(流程實例)
ProcessInstanceQuery processInstanceQuery =
processEngine.getExecutionService() //
.createProcessInstanceQuery();
查詢“任務”
TaskQuery taskQuery = //
processEngine.getTaskService()//
.createTaskQuery();
查詢“執行歷史”
(流程實例歷史)
HistoryProcessInstanceQuery historyProcessInstanceQuery =
processEngine.getHistoryService()
.createHistoryProcessInstanceQuery();
查詢“任務歷史”
HistoryTaskQuery historyTaskQuery =
processEngine.getHistoryService()
.createHistoryTaskQuery();
以上列出的Query對象有:
1. ProcessDefinitionQuery
2. ProcessInstanceQuery
3. TaskQuery
4. HistoryProcessInstanceQuery
5. HistoryTaskQuery
這些Query對象的使用方法都是一致的,如下所示:
1, 添加過濾條件:調用其中的有關方法指定條件即可。如:
a) processDefinitionQuery.processDefinitionKey("請假")是指定查詢key爲”請假”的流程定義;
b) taskQuery.assignee("張三")是指定辦理人爲”張三”的任務。
2, 添加排序條件:
a) 調用 xxQuery.orderAsc(property),表示按某屬性升序排列
b) 調用 xxQuery.orderDesc(property),表示按某屬性降序排列
c) 可指定多個排序條件,就是代表第1順序,第2順序…等。
d) 屬性名在各自的Query對象(接口)中有常量定義,如:
i. ProcessDefinitionQuery.PROPERTY_ID
ii. ProcessDefinitionQuery.PROPERTY_KEY
iii. TaskQuery.PROPERTY_NAME
iv. TaskQuery.PROPERTY_ASSIGNEE
3, 指定分頁有關信息:
a) 調用方法xxQuery.page(firstResult, maxResults);
b) 這是指定first與max的值(就是Hibernate中的Query.setFirstResult()與Query.setMaxResults())
c) 如果沒有調用這個方法,代表要查詢出符合條件的所有記錄。
4, 查詢得到結果:
a) 調用方法xxQuery.list(); 表示查詢列表
b) 調用方法 xxQuery.uniqueResult(); 表示查詢唯一的結果調用方法xxQuery.count(); 表示查詢符合條件的記錄數量