如何部署、啟動、查詢和完成流程
阿新 • • 發佈:2018-11-13
ProcessEngine processEngine = ProcessEngine.getDefaultProcessEngine(); // 部署流程 @Test public void deploymentProcessDefinition() { Deployment deployment = processEngine.getRepositoryService() // 與流程定義部署相關service .createDeployment() // 建立一個部署物件 .name("hellowold入門程式") // 新增部署的名稱 .addClasspathResource("diagrams/helloworld.bpnm") // 從classpath資源中載入 .addClasspathResource("diagrams/helloworld.png") .deploy(); // 完成部署 System.out.println(deployment.getId()): // 部署id System.out.println(deployment.getName()); // 部署名稱 } // 啟動流程 @Test public void startProcessInstance() { // 定義流程的key String processDefinitionKey = "helloworld"; ProcessInstance pi = processEngine.getRuntimeService() // 與執行流程例項和物件相關的service .startProcessInstanceByKey(processDefinitionKey); //使用key啟動流程例項 System.out.println("流程例項ID:" + pi.getId()); System.out.println("流程定義ID:" + pi.getProcessDefinitionId()); } // 查詢當前人任務 @Test public void findMyProcessTask() { String assignee = "張三"; List<Task> list = processEngine.getTaskService() // 與正在執行任務相關的service .createTaskQuery() // 建立查詢物件 .taskAssignee(assignee) // 指定辦理人 .list(); if(list != null && list.size() > 0) { for(Task task : list) { System.out.println("任務ID:" + task.getId()); System.out.println("任務名稱:" + task.getName()); System.out.println("任務建立時間:" + task.getCreateTime()); System.out.println("任務辦理人:" + task.getAssignee()); System.out.println("流程例項ID:" + task.getProcessInstanceId()); System.out.println("執行物件ID:" + task.getExecutionId()); System.out.println("流程物件ID:" + task.getProcessDefinitionId()); System.out.println("##############################################"); } } } /** 完成我的任務 */ @Test public void completeMyPersonalTask() { // 任務ID String taskId = "104"; processEngine.getTaskService().complete(taskId); System.out.println("完成任務;任務ID:" +taskId); } /**模擬設定和獲取流程變數場景*/ public void setAndGetvariables() { /**正在執行流程例項、物件*/ RuntimeService runtimeService = processEngine.getRuntimeService(); /** 正在執行任務*/ TaskService taskService = processengine.getTaskService(); /** 設定流程變數 */ runtimeService.setVariable(executionId, variableName, value) // 執行物件id,流程變數名稱,設定流程變數的值(一次設定一個) runtimeService.setVariables(executionId, variables) // 執行物件id,map集合設定流程變數值(可設定多個) taskService.setVariable(taskId, variableName, value) // 任務id,流程變數名稱,設定流程變數的值 tasskService.setVariables(taskId, variables) // 任務id,map集合設定流程變數值 runtimeService.startProcessInstanceByKey(processDefinitionKey, variables) // 啟動流程例項時,設定流程變數 taskService.complete(taskId, variables) // 完成任務時, 設定流程變數 } /** 設定流程變數 */ public void setVariables() { TaskService taskService = processEngine.getTaskService(); String taskId = "1504"; // 1.使用基本資料型別 taskService.setVariableLocal(taskId, "請假天數", 3); // 與任務id繫結 taskService.setVariable(taskId, "請假日期", new Date()); taskService.setVariable(taskId, "請假原因", "回家探親"); // 2.使用javabean型別 Person p = new Person(); p.setId(10); p.setName("翠花"); taskService.setVariable(taskId, "人員資訊", p); } /** 獲取流程變數 */ public void getVariables() { TaskService taskService = processengine.getTaskService(); String taskId = "1504"; // 1.使用基本資料型別獲取 Integer days = (Integer) taskService.getVariable(taskId, "請假天數"); Date date = (Date) taskService.getVariable(taskId, "請假日期"); String resean = (String) taskService.getVariable(taskId, "請假原因"); // 2.使用javabean型別獲取 Person p = (Person)taskService.getVariable(taskId, "人員資訊"); System.out.println(p.getId() + " " + p.getName()); } /** 查詢流程變數歷史表 */ public void findHistoryProcessVariables() { List<HistoricVariableInstance> list = processEngine.getHistoryService() .createHistoricVariableInstanceQuery() // 建立一個歷史的流程變數查詢物件 .variableName("請假天數") .list(); if(list != null && list.size() > 0) { for(HistoricVariableInstance hvi : list) { System.out.println(hvi.getId() + " " + hvi.getProcessInstanceId() + " " + hvi.getVariableName() + " " + hvi.getVariableTypeName() + " " + hvi.getValue()); } } }
// 如何動態指定辦理人 public void startProcessInstance() { String processDefinitionKey = "task"; // 設定流程變數 Map<String, Object> variables = new HashMap<String, Object>(); variables.put("userID", "周芷若"); ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey, variables); System.out.println("流程例項ID:" + pi.getId()); System.out.println("流程定義ID:" + pi.getProcessDefinitionId()); }
// 通過監聽器來動態指定辦理人
// 新建類
public class TaskListenerImpl implements TaskListener {
// 用來指定任務辦理人
public void notify(DelegateTask delegateTask) {
// 指定個人任務的辦理人,也可以指定組任務的辦理人
degegateTask.setAssignee("滅絕師太");
// 然後在.bpm的listener中新增此類全路徑
}
}
// 組任務用半形,分割,可以在mainconfig中的candidateUsers指定 // 拾取任務,將組任務分給個人任務,指定任務的辦理人欄位 public void claim() { String taskId = "6905"; // 分配的個人任務,(可以是組任務中的成員,也可以是非組任務的成員) String userId = "大大"; processEngine.getTaskService().claim(taskId, userId); }
/**查詢當前人的組任務*/
public void findMyGroupTask() {
String candidateUser = "小A";
List<Task> list = processEngine.getTaskService() // 與正在執行的任務管理相關的service
.createTaskQuery() // 建立任務查詢物件
.taskCandidateUser(candidateUser) // 組任務的辦理人
.orderByTaskCreateTime().ase() // 使用建立時間的升序排序
.list();
if(list != null && list.size() > 0) {
for(Task task : list) {
System.out.println("任務ID:" + task.getId());
System.out.println("任務名稱:" + task.getName());
System.out.println("任務建立時間:" + task.getCreateTime());
System.out.println("任務辦理人:" + task.getAssignee());
System.out.println("流程例項ID:" + task.getProcessInstanceId());
System.out.println("執行物件ID:" + task.getExecutionId());
System.out.println("流程定義ID:" + task.getProcessDefinitionId());
}
}
}
/**查詢正在執行的任務辦理人表*/
public void findRunPersonTask() {
String task = "6204";
List<IdentityLink> list = processEngine.getTaskService()
.getIdentityLinksForTask(taskId);
if(list != null && list.size() > 0) {
for(IdentityLink identityLink : list) {
System.out.println(identityLink.getTaskId() + " " + identityLink.getType() + " " + identityLink.getProcessInstanceId() + " " + identityLink.getUserId());
}
}
}