1.獲取CommandContext
//import org.activiti.engine.impl.context.Context;
CommandContext commandContext = Context.getCommandContext();
2. 獲取HistoryManager
HistoryManager historyManager = commandContext.getHistoryManager();
3. 修改任務(wù)審核人
taskEntity.setAssignee(assignee);
historyManager.recordTaskAssigneeChange(delegateTask.getId(), assignee);
4.獲取任務(wù)實(shí)例管理類
TaskEntityManager taskEntityManager = commandContext.getTaskEntityManager();
5. 獲取當(dāng)前任務(wù)實(shí)例
TaskEntity currentTask = taskEntityManager.findById(taskId);
6.獲取當(dāng)前節(jié)點(diǎn)執(zhí)行示例
ExecutionEntity execution = currentTask.getExecution();
String executionId = execution.getId();
7.根據(jù)processDefinitionId獲取流程
Process process = ProcessDefinitionUtil.getProcess(processDefinitionId);
8. 根據(jù)節(jié)點(diǎn)id獲取FlowElement節(jié)點(diǎn)
FlowElement flowElement = process.getFlowElement(targetNodeId);
9. 通知當(dāng)前活動(dòng)結(jié)束(更新act_hi_actinst)
historyManager.recordActivityEnd(execution,"jump to userTask1");
10.通知任務(wù)節(jié)點(diǎn)結(jié)束(更新act_hi_taskinst)
historyManager.recordTaskEnd(taskId,"jump to userTask1");
11. 刪除正在執(zhí)行的當(dāng)前任務(wù)
taskEntityManager.delete(taskId);
12. 此時(shí)設(shè)置執(zhí)行實(shí)例的當(dāng)前活動(dòng)節(jié)點(diǎn)為目標(biāo)節(jié)點(diǎn)
execution.setCurrentFlowElement(flowElement);
13. 向operations中壓入繼續(xù)流程的操作類
commandContext.getAgenda().planContinueProcessOperation(execution);
14. 部署流程文檔
/**
* 部署流程文檔
*/
public void deploy() {
//String resource = "com/shareniu/activiti6/study_network1/taskservice/leave.bpmn";
//String resource = "com/shareniu/activiti6/study_network1/taskservice/leave_var.bpmn";
String resource = "com/shareniu/activiti6/study_network1/taskservice/leave_listener.bpmn";
String category = "leave";
Deployment deploy = repositoryService.createDeployment().addClasspathResource(resource).category(category)
.deploy();
System.out.println(deploy);
}
15. 啟動(dòng)流程實(shí)例
String processDefinitionKey = "leave";
Map<String, Object> vars=new HashMap<String, Object>();
//vars.put("userId", "張無(wú)忌");
ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefinitionKey,vars);
16.任務(wù)完成
String taskId="shareniu6a7bbb68-8a2d-41f8-997f-52bb1bdb9c97";
taskService.complete(taskId);
17.變量作用域
// 查詢task
Task task1 = taskService.createTaskQuery().singleResult();
// 設(shè)置全局變量
taskService.setVariable(task1.getId(),"key1","value1");
// 設(shè)置局部變量
taskService.setVariableLocal(task1.getId(),"key2","value2");
// 獲取全局變量
Map<String,Object> a = taskService.getVariables(task1.getId());
// 獲取局部變量
Map<String,Object> b = taskService.getVariablesLocal(task1.getId());
// 獲取全局變量
Map<String,Object> c = runtimeService.getVariables(processInstance.getId());
18. 任務(wù)認(rèn)領(lǐng)
setAssignee和claim兩個(gè)的區(qū)別是在認(rèn)領(lǐng)任務(wù)時(shí),claim會(huì)檢查該任務(wù)是否已經(jīng)被認(rèn)領(lǐng),如果被認(rèn)領(lǐng)則會(huì)拋出ActivitiTaskAlreadyClaimedException
而setAssignee不會(huì)進(jìn)行這樣的檢查,其他方面兩個(gè)方法效果一致
taskService.setAssignee(String taskId, String userId);
taskService.claim(String taskId, String userId);
19. 刪除流程實(shí)例
commandContext.getExecutionEntityManager()
.deleteProcessInstance(processInstanceId, deleteReason, true);