RuntimeService 運作服務類
支援啟動的方式
流程定義: 從這裡擷取資源檔案.
執行執行個體: 流程執行個體中執行的每個環節.
流程執行個體: 一個流程執行個體包括所有運作的節點,一個流程中流程執行個體隻有一個.
啟動一個執行個體:
public void startProcessInstanceByKey() {
String processDefinitionKey = "leave";
ProcessInstance processInstance =
runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId() + "," +
processInstance.getActivityId());
}
查詢該受理人的任務:
public void queryMyTask() {
String processDefinitionKey = "leave";
String assignee = "王五";
List<Task> list = taskService.createTaskQuery()
.taskAssignee(assignee)
.processDefinitionKey(processDefinitionKey)
.list();
}
完成任務:
public void completeMyTask() {
String taskId = "54502";
taskService.complete(taskId);
}
查找運作執行個體的狀态:
方式1:
public void queryProcessInstanceState() {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId("59501")
//.deploymentId()
.singleResult();
if (processInstance != null) {
System.out.println("目前流程執行個體正在運作");
} else {
System.out.println("目前流程執行個體已經結束");
}
}
方式2:
public void queryProcessInstanceState2() {
String processInstanceId = "59501";
HistoricProcessInstance historicProcessInstance =
historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).singleResult();
if (historicProcessInstance.getEndTime() == null) {
System.out.println("目前流程執行個體正在運作");
} else {
System.out.println("目前流程執行個體已經結束");
}
}
流程執行個體執行完成,相應的execution表中資料将被删除.
查詢執行執行個體
public void createExecutionQuery() {
List<Execution> executions = runtimeService.createExecutionQuery()
.list();
for (Execution execution : executions) {
System.out.println(execution.getId() + "," + execution.getActivityId());
}
}
查詢曆史流程執行個體:
public void createHistoricProcessInstanceQuery() {
String processInstanceId = "59501";
HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId).
singleResult();
System.out.println("流程定義ID:" + hpi.getProcessDefinitionId());
System.out.println("流程執行個體ID:" + hpi.getId());
System.out.println(hpi.getStartTime());
System.out.println(hpi.getStartActivityId());
System.out.println(hpi.getEndTime());
}
查詢曆史活動執行個體:
public void createHistoricActivityInstanceQuery() {
List<HistoricActivityInstance> list =
historyService.createHistoricActivityInstanceQuery()
.list();
for (HistoricActivityInstance hai : list) {
System.out.println(hai.getId());
}
}
查詢曆史任務執行個體:
//select distinct RES.* from ACT_HI_TASKINST RES order by RES.ID_ asc
public void createHistoricTaskInstanceQuery() {
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
.list();
}
設定流程發起人:
方式1 :
public void setAuthenticatedUserId1() {
String authenticatedUserId = "朱元璋";
identityService.setAuthenticatedUserId(authenticatedUserId);
String processDefinitionKey = "leave";
ProcessInstance processInstance =
runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId() + "," +
processInstance.getActivityId());
}
方式2 :
public void setAuthenticatedUserId2() {
String authenticatedUserId = "朱重八";
Authentication.setAuthenticatedUserId(authenticatedUserId);
String processDefinitionKey = "leave";
ProcessInstance processInstance =
runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId() + "," +
processInstance.getActivityId());
}
initiator結合流程執行個體啟動人使用:
啟動一個流程執行個體後會發現act_ru_variable會多出一條參數資料.
dataobject的使用:
部署相關的流程,啟動流程後variable表中添加3條資料
log4j.properties中配置(列印variable的日志資訊):
擷取DataObject參數:
方式1:
/**
* select * from ACT_RU_VARIABLE where EXECUTION_ID_ = ? and NAME_= ? and TASK_ID_ is null
* - ==> Parameters: 77001(String), day(String)
*/
@Test
public void getDataObject() {
String executionId = "77001";
String dataObject = "天數";
DataObject dataObject1 = runtimeService.getDataObject(executionId, dataObject);
if (dataObject1 != null) {
System.out.println(dataObject1.getDataObjectDefinitionKey());
System.out.println(dataObject1.getDescription());
System.out.println(dataObject1.getExecutionId());
System.out.println(dataObject1.getName());
System.out.println(dataObject1.getValue());
System.out.println(dataObject1.getType());
}
}
方式2:
/**
* select * from ACT_RU_VARIABLE where EXECUTION_ID_ = ? and TASK_ID_ is null
*/
@Test
public void getDataObject2() {
String executionId = "77001";
Map<String, DataObject> dataObject1 = runtimeService.getDataObjects(executionId);
Set<Map.Entry<String, DataObject>> entries = dataObject1.entrySet();
for (Map.Entry<String, DataObject> dataObjectEntry : entries) {
DataObject dataObject = dataObjectEntry.getValue();
if (dataObject != null) {
System.out.println(dataObject.getDataObjectDefinitionKey());
System.out.println(dataObject.getDescription());
System.out.println(dataObject.getExecutionId());
System.out.println(dataObject.getName());
System.out.println(dataObject.getValue());
System.out.println(dataObject.getType());
}
}
}
流程執行個體的删除以及級聯删除:
@Test
public void deleteProcessInstance() {
String processInstanceId = "72001";
String deleteReason = "我想删除";
runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
}
//級聯删除
@Test
public void deleteProcessInstanceCascade() {
String processInstanceId = "69501";
String deleteReason = "我想删除";
//processEngineConfiguration方式
// ProcessEngineConfigurationImpl processEngineConfiguration =
//(ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration();
//processEngineConfiguration.getExecutionEntityManager()
//.deleteProcessInstance(processInstanceId,deleteReason,true);
//DeleteProcessInstanceCaCadeCmd方式删除
managementService.executeCommand(
new DeleteProcessInstanceCaCadeCmd(processInstanceId, deleteReason));
}
擷取流程執行個體運作節點:
public void getActiveActivityIds() {
String executionId = "77005";
List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId);
}
租戶方式部署以及啟動:
//根據流程定義的id啟動
public void startProcessInstanceById() {
String processDefinitionId = "dataobject:1:74504";
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId);
}
//根據流程定義的key和租戶id
public void startProcessInstanceByKeyAndTenantId() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKeyAndTenantId("leave", "001");
}
自定義流程執行個體助手類:
首先,重寫裡面的方法
//重寫MyProcessInstanceHelper內建ProcessInstanceHelper ,并重寫裡面的方法
public class MyProcessInstanceHelper extends ProcessInstanceHelper {
@Override
public ProcessInstance createProcessInstance(ProcessDefinition processDefinition, String businessKey, String processInstanceName, Map<String, Object> variables, Map<String, Object> transientVariables) {
return super.createProcessInstance(processDefinition, businessKey, processInstanceName, variables, transientVariables);
}
@Override
public ProcessInstance createProcessInstance(ProcessDefinition processDefinition, String businessKey, String processInstanceName, String overrideDefinitionTenantId, Map<String, Object> variables, Map<String, Object> transientVariables, String callbackId, String callbackType, boolean startProcessInstance) {
System.out.println("MyProcessInstanceHelper:createProcessInstance");
return super.createProcessInstance(processDefinition, businessKey, processInstanceName, overrideDefinitionTenantId, variables, transientVariables, callbackId, callbackType, startProcessInstance);
}
}
然後,通過配置檔案注入進來
<property name="processInstanceHelper" >
<bean class="com.heima.bpmn.MyProcessInstanceHelper"></bean>
</property>
流程定義的挂起與激活:
判斷流程定義是否被挂起
public void isProcessDefinitionSuspended() {
String processDefinitionId = "leave:2:67004";
boolean processDefinitionSuspended = repositoryService.isProcessDefinitionSuspended(processDefinitionId);
System.out.println(processDefinitionSuspended);
}
public void suspendProcessDefinitionById() {
String processDefinitionId = "leave:2:67004";
repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
}
public void activateProcessDefinitionById() {
String processDefinitionId = "leave:2:67004";
repositoryService.activateProcessDefinitionById(processDefinitionId);
'}