天天看點

Activiti工作流基礎(Day1108、1112)

架構的環境搭建

1. 類庫

2. 安裝activiti 流程圖插件(eclipse)

   Name: Activiti BPMN 2.0 designer

   Location: http://activiti.org/designer/update/

兩種方式建立流程資料庫:

第一種方式:用jdbc的方式

@Test
	public void test1() {
		ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
		config.setJdbcDriver("com.mysql.jdbc.Driver");
		config.setJdbcUrl("jdbc:mysql://localhost:3306/activitidb1818?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8");
		config.setJdbcUsername("root");
		config.setJdbcPassword("admin");
		//如果已經有資料庫就不建立
		config.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
		ProcessEngine engin = config.buildProcessEngine();
		System.out.println("流程引擎:"+engin);
	}
           

第二種方式:用spring托管的方式建立流程資料庫:

@Test
	public void test2() {
		ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
		ProcessEngine engine = config.buildProcessEngine();
		System.out.println("流程引擎"+engine);
	}
           

注意要建立一個source folder裡面存放activiti的配置檔案:

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">

	<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/activitidb1818?useUnicode=true&amp;characterEncoding=utf8"></property>
		<property name="jdbcUsername" value="root"></property>
		<property name="jdbcPassword" value="admin"></property>
		<!-- 沒有表建立表 -->
		<property name="databaseSchemaUpdate" value="true"></property>
	</bean>

</beans>
           

db.properties

jdbc.url=jdbc:mysql://localhost:3306/activitidb1818?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=admin
           

log4j.properties

log4j.rootLogger=INFO, CA

# ConsoleAppender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n
           

接下來在eclipse中Preference->Activiti->Save Actions中勾選Create process definition imagine when saving the diagram

Activiti工作流基礎(Day1108、1112)

意思是儲存流程時儲存流程圖檔

2.建立流程及使用

在config(source folder)中建立floder用來儲存建立的Activiti Diagram

在建立的.bpmn檔案中繪制流程:

Activiti工作流基礎(Day1108、1112)
Activiti工作流基礎(Day1108、1112)
Activiti工作流基礎(Day1108、1112)

RepositoryService    管理流程定義

RuntimeService            執行管理,包括啟動、推進、删除流程執行個體等操作

TaskService            任務管理

HistoryService            曆史管理(執行完的資料的管理)

IdentityService            組織機構管理

FormService            一個可選服務,任務表單管理

ProcessEngine 可以擷取業務類,業務類使用MyBatis對資料進行持久化操作

getDefaultProcessEngine()方法預設去類路徑下找activiti.cfg.xml檔案,用來連接配接資料庫

/**
*art_re_procdef 流程定義模闆
*act_re_deployment 部署表、
*act_ge_bytearray 存放資源檔案(二進制資料)
*act_ru_execution 流程執行個體執行對象表
*act_hi_taskinst 流程執行個體曆史記錄
*act_hi_task 流程執行個體任務表
*/
public class HelloTest {
	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	
	//部署流程定義(模闆)
	@Test
	public void deployDB() {
		Deployment deployment = processEngine.getRepositoryService()
		             				.createDeployment()//傳回一個部署對象
		             				.name("hello入門程式")
		             				.addClasspathResource("diagram/helloworld.bpmn")
		             				.addClasspathResource("diagram/helloworld.png")
		             				.deploy();
		System.out.println(deployment.getId() + "::" + deployment.getName());
	}
	
	//啟動流程執行個體(具體要處理的流程)
	@Test
	public void startProcess() {
		ProcessInstance pi = processEngine.getRuntimeService()
										 .startProcessInstanceByKey("myProcess");
		System.out.println(pi.getId() + "," +pi.getActivityId());
	}
	
	//查找待辦人的任務清單
	@Test
	public void findTaskListByAsignee() {
		String asignee = "zhangsan";
		List<Task> taskList = processEngine.getTaskService()
		             						.createTaskQuery()
		             						.taskAssignee(asignee)
		             						.list();
		for (Task task : taskList) {
			System.out.println(task.getId() + "::" + task.getName() + "::" + task.getAssignee());
		}
	}
	
	//完成任務(推進任務節點)
	@Test
	public void finishTask() {
		String taskId = "604";
		processEngine.getTaskService().complete(taskId );
		System.out.println("完成任務");
	}
	//檢視流程定義清單
	@Test
	public void findAllDef() {
		List<ProcessDefinition>list = processEngine.getRepositoryService()
				.createProcessDefinitionQuery()
				.list();
		for(ProcessDefinition pd :list) {
			System.out.println(pd.getId()+":"+pd.getResourceName()+":"+pd.getDiagramResourceName()+":"+ pd.getVersion());
		}
	}
	
	//删除流程定義(強行删除,級聯的删除,全部都删)
	@Test
	public void removeProcessDef() {
		String deployment = "1";
		processEngine.getRepositoryService().deleteDeployment(deployment, true);
		System.out.println("删除成功");
	}
	
	//檢視流程定義
	@Test
	public void viewPic() throws IOException{
		String deploymentId = "101";
		String resourceName = "";
		List<String> list = processEngine.getRepositoryService()
										 .getDeploymentResourceNames(deploymentId);
		for (String name : list) {
			if (name.indexOf(".png") != -1) {
				resourceName = name;
			}
		}
		InputStream in = processEngine.getRepositoryService()
			      .getResourceAsStream(deploymentId, resourceName);

		File destFile = new File("d:\\" + resourceName);
		// 把Inputstream 另存到  D://
		FileUtils.copyInputStreamToFile(in, destFile);

		System.out.println("圖檔讀取完成");
	}
}