activiti從入門到絕望

activiti從入門到絕望

廢話不說,直接上手

第一步畫流程圖

流程圖需要一個插件,網上找找如何下
在片描述
點擊用戶請假,
在這裏插入圖片描述
點擊經理審覈
在這裏插入圖片描述
點擊取消提交連線
在這裏插入圖片描述
在這裏插入圖片描述
提交連線
在這裏插入圖片描述
在這裏插入圖片描述
駁回連線
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
流程圖差不多就這些了

保存以後把你的流程圖改成.bpmn20.xml格式的文件
配置activiti.cfg.xml,默認加載activiti.cfg.xml,名字改了以後,需要手動加載

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
	<!-- 
		 	public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自動創建表,需要表存在
  			public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先刪除表再創建表
  			public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自動創建表
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
	 -->
	<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://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=utf8"></property>
		<property name="jdbcUsername" value="root"></property>
		<property name="jdbcPassword" value="root"></property>
		<!-- 沒有表創建表 -->
		<property name="databaseSchemaUpdate" value="true"></property>
	</bean>
</beans>

pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.bgxt</groupId>
  <artifactId>Activiti</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>firstdemo</name>
  <dependencies>
  <!-- BPM引刑 -->
      <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>6.0.0</version>
        </dependency>
        <!--日誌記錄-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.193</version>
        </dependency>
        <!--Mysql數據庫驅動-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
        <!-- junit測試 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- file工具類 -->
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
           <groupId>commons-io</groupId>
           <artifactId>commons-io</artifactId>
           <version>2.4</version>
        </dependency>

  </dependencies>
</project>``

到這差不多環境搭好了

部署流程並進行測驗

從上往下一個一個的測驗,在流程中,只有當前流程走完以後,纔會到下一流程中去,根據你所畫的流程圖去進行測試

/**加載配置文件創建數據庫表*/
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
	
	
	/**部署流程(classpath部署)*/
		@Test
	public  void deploymentProcessDefinition_classpath() {
		
		//獲取流程引
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		Deployment deployment = processEngine.getRepositoryService()
		.createDeployment()
		.name("測試流程")//給流程取名
		.addClasspathResource("Process2.bpmn20.xml")
		.deploy();
		System.out.println("部署ID"+deployment.getId());//2501
		System.out.println("部署名稱"+deployment.getName());
	}
	
	/**啓動流程實例*/
	@Test
	public void startProcessInstance(){
		String processDefinitionKey="Process";
		//流程啓動前設置流程變量
		Map<String,Object> variables=new HashMap<String,Object>();
		variables.put("userid", "張三");//這裏userid user就是我們在流程圖中的${userid},${user}
		variables.put("user", "李四");
		ProcessInstance pi = processEngine.getRuntimeService()
		.startProcessInstanceByKey(processDefinitionKey, variables);
		System.out.println("流程實例ID"+pi.getId());//5001
		System.out.println("流程定義ID"+pi.getProcessDefinitionId());//Process:1:2504
	}
	/**查詢當前人的任務*/
	@Test
	public void findPenroleTest(){
		String assignee="李四";
		List<Task> list = processEngine.getTaskService()
		.createTaskQuery()
		//查詢條件
		.taskAssignee(assignee)
//		.taskCandidateUser(candidateUser)//組任務的辦理人查詢
//		.processDefinitionId(processDefinitionId)//使用流程定義ID查詢
//		.processInstanceId(processInstanceId)//使用流程實例ID查詢
//		.executionId(executionId)//使用執行對象ID查詢
		//排序
		.orderByTaskCreateTime().desc()//使用創建時間排序降序
		//返回結果集
		.list();
//		.singleResult()//返回惟一結果集
//		.count()//返回結果集的數量
//		.listPage(firstResult, maxResults);//分頁查詢
		if(list!=null && list.size()>0){
			for (Task task : list) {
				System.out.println("任務id"+task.getId());//5007
				System.out.println("任務名稱"+task.getName());
				System.out.println("任務的創建時間"+task.getCreateTime());
				System.out.println("任務的辦理人"+task.getAssignee());
				System.out.println("流程實例id"+task.getProcessInstanceId());//5001
				System.out.println("執行對象ID:" + task.getExecutionId());//5004
				System.out.println("流程定義ID:" + task.getProcessDefinitionId());//Process:1:2504
			}	
		}
	}
    /**完成任務*/
	@Test
	public void completePersonalTask(){
		String taskId="30003";
		Map<String, Object> variables=new HashMap<String, Object>();
		variables.put("miss","通過");//這裏miss就是我們在連線上設置的${miss=="通過"}
		processEngine.getTaskService()
		.complete(taskId, variables);
		System.out.println("任務完成:任務id"+taskId);
	}
	/**刪除流程部署*/
	@Test
	public void deldeployment(){
		//獲取流程id
		String deploymentId="2501";
		//獲取流程倉庫
		RepositoryService repositoryService = processEngine.getRepositoryService();
		repositoryService.deleteDeployment(deploymentId, true);
	}
	/**查看流程部署*/
	@Test
	public void querydeploymentProcess(){
		//獲取倉庫服務對象
		List<ProcessDefinition> list = processEngine.getRepositoryService()
		.createProcessDefinitionQuery()//定義流程查詢對象
		.orderByProcessDefinitionVersion().asc()//設置查詢條件
		.list();//返回結果集
		if(list!=null&&list.size()>0){
	     for (ProcessDefinition pd : list) {
	    	System.out.println("流程實例id:"+pd.getDeploymentId());
			System.out.println("流程定義id:"+pd.getId());//流程定義id
			System.out.println("name:"+pd.getName());//流程名稱
			System.out.println("Key:"+pd.getKey());
			System.out.println("Version:"+pd.getVersion());//版本
			System.out.println("ResourceName:"+pd.getResourceName());//加載的流程文件
		}
	}else{
		System.out.println("沒有流程");
	}
	}
	/**查詢歷史流程實例*/
	@Test
	public void queryHistoric(){
		String processDefinitionKey="Process";//部署流程時的key
		List<HistoricProcessInstance> list = processEngine.getHistoryService()
		.createHistoricProcessInstanceQuery()//創建歷史流程實例查詢
		.processDefinitionKey(processDefinitionKey)
		//查詢條件
		.orderByProcessInstanceStartTime().desc()//按照流程開始時間
		.list();
		for (HistoricProcessInstance hpi : list) {
			System.out.println(hpi.getId());
			System.out.println(hpi.getName());
			System.out.println(hpi.getProcessDefinitionKey());
			System.out.println(hpi.getDeploymentId());
			System.out.println(hpi.getStartTime());
			System.out.println(hpi.getEndTime());
		}
	}
	/**展示流程圖片
	 * @throws IOException */
	@Test
	public void selview() throws IOException{
		String deploymentId="15001";//部署ID
		RepositoryService repositoryService = processEngine.getRepositoryService();
		List<String> namesImg = repositoryService.getDeploymentResourceNames(deploymentId);
		String nameimg=null;
		for (String name : namesImg) {
			if(name.indexOf(".png")>0){
				nameimg=name;
			}
		}
		if(nameimg!=null){
			System.out.println(nameimg);
			//通過部署id和文件名得到文件輸入流
			InputStream in = processEngine.getRepositoryService()
			.getResourceAsStream(deploymentId, nameimg);	
			File file=new File("e:/"+nameimg);
			FileUtils.copyInputStreamToFile(in, file);
		}
		
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章