1. 程式人生 > >如何部署、啟動、查詢和完成流程

如何部署、啟動、查詢和完成流程

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());
		}
	}
}