1. 程式人生 > >Activiti工作流--流程定義--之三

Activiti工作流--流程定義--之三

       由於概念性的東西這裡就不在做更多的介紹了,下面直接對activiti的流程進行介紹,為了方便大家的更快的熟悉流程,在此處我就直接上程式碼介紹,本人技術水平有限,有不正確之處還請大家指出,多謝大家的海涵,在此謝過了!!!

配置資料庫連線 activiti-cfg.xml

       此配置可以根據具體的專案情況進行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.
xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.
org/schema/aop/spring-aop.xsd"> <bean id = "processEngineConfiguration" class = "org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/activiti?useUnicode=true&amp;characterEncoding=utf-8"></property> <property name="jdbcUsername" value="root"></property> <property name="jdbcPassword" value="root"></property> <property name="databaseSchemaUpdate" value="false"></property> </bean> </beans>

下面中的步驟都是在一個類下面進行的,利用Junit4進行測試 這裡就以請假流程為例進行介紹

初始化引擎

private ProcessEngine processEngine = null;

@Before
public void initProcessEngine(){
	processEngine = ProcessEngines.getDefaultProcessEngine();
}

流程定義好後,需要進行部署

流程的定義需要在eclipse中定義好(這裡以eclipse為例),定義好之後會生成兩個檔案

@Test
public void testLeaveProcessDeploy(){
	//建立部署構建器
	/*RepositoryService repositoryService = processEngine.getRepositoryService();
	DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
	//新增資源
	deploymentBuilder.addClasspathResource("diagram/leave.bpmn");
	deploymentBuilder.addClasspathResource("diagram/leave.png");
	deploymentBuilder.name("請假流程");
	//進行部署
	Deployment deployment = deploymentBuilder.deploy();*/
	
	//avtiviti支援鏈式程式設計
	Deployment deployment = processEngine.getRepositoryService()
											.createDeployment()
											.addClasspathResource("diagram/leave.bpmn")
											.addClasspathResource("diagram/leave.png")
											.name("請假流程")
											.deploy();
	
	
	System.out.println("流程部署ID:"+deployment.getId());
	System.out.println("流程部署名稱:"+deployment.getName());
}

流程啟動

@Test
public void testStartLeaveProcess(){
	String processDefinitionKey = "leave";
	ProcessInstance processInstance = processEngine.getRuntimeService()
										.startProcessInstanceByKey(processDefinitionKey);
	System.out.println("流程部署的ID:"+processInstance.getDeploymentId());
	System.out.println("流程定義的ID:"+processInstance.getProcessDefinitionId());
	System.out.println("流程例項的ID:"+processInstance.getProcessInstanceId());
}

流程的處理

@Test
public void testQueryTask(){
	String assignee = "李四";
	String processInstanceId = "7501";
	List<Task> listTask = processEngine.getTaskService()
							.createTaskQuery()
							.taskAssignee(assignee)
							.processInstanceId(processInstanceId)
							.list();
	if (listTask != null && listTask.size() > 0) {
		for (Task task : listTask) {
			System.out.println("流程定義的ID:"+task.getProcessDefinitionId());
			System.out.println("流程例項的ID:"+task.getProcessInstanceId());
			System.out.println("執行物件ID:"+task.getExecutionId());
			System.out.println("任務ID:"+task.getId());
			System.out.println("任務名稱:"+task.getName());
			System.out.println("任務建立的時間:"+task.getCreateTime());
			System.out.println("================================");
		}
	}
}

流程處理過程

@Test
public void testCompleteTask(){
	String taskId = "27502";
	processEngine.getTaskService()
					.complete(taskId);
	System.out.println("任務完成");
}