activiti入门

activiti入门

一.安装activiti插件
在eclipse的根目录的dropins中放入activiti插件
activiti入门
二.activiti的相关包
activiti入门

三.核心配置文件:activiti.cfg.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	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">
	<!-- 创建ProcessEngineConfiguration对象的bean -->
	<bean id="processEngineConfiguration"
		class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

		<!-- 配置对象的配置信息 :连接数据库,使用MyBatis连接池 -->
		<property name="jdbcUrl"
			value="jdbc:mysql:///activiti?createDatabaseIfNotExist=true" />
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUsername" value="root" />
		<property name="jdbcPassword" value="123456" />
		<!--
		 databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表。 
		false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。
		true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。
		create-drop: 构建流程引擎时创建数据库表,关闭流程引擎时删除这些表。
		 -->
		<property name="databaseSchemaUpdate" value="true" />
	</bean>
</beans>

四.创建核心对象-ProcessEngine
4.1.第一种方式:

ProcessEngineConfiguration processEngineConfigurationFromResource = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("config.xml");
ProcessEngine processEngine = processEngineConfigurationFromResource.buildProcessEngine();

这种方式会在classpath下找指定名称的配置文件

4.2.第二种方式(推荐)

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

这种方式的前提是配置文件的名称只能是activiti.cfg.xml,约定大于配置

五.流程
5.1.画流程图
右键resource创建Activiti Diagram
activiti入门
5.2流程图示例
activiti入门

5.3.设置流程图参数
在window中打开Properties视图
activiti入门
设置基本属性
activiti入门
设置执行人(私有任务)或候选人(公有任务)
activiti入门

准备工作做好以后开始部署发布流程

5.4部署发布流程
流程部署后,会在数据库中自动生成以下表
activiti入门

//获取核心对象
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		//获取仓库相关的核心对象
		RepositoryService repositoryService = processEngine.getRepositoryService();
		//创建发布对象
		DeploymentBuilder deployment = repositoryService.createDeployment();
		//上传资源
		deployment.addClasspathResource("MyProcess.bpmn");
		deployment.addClasspathResource("MyProcess.png");
		deployment.deploy();

5.5.开启流程

//获取运行时相关的核心对象
RuntimeService runtimeService = processEngine.getRuntimeService();
//启动流程
runtimeService.startProcessInstanceByKey("myProcess");

5.6.认领任务
认领公有任务,如果是私有任务,不用认领,直接完成

//获取运行时相关的核心对象
TaskService taskService = processEngine.getTaskService();
//认领公有任务,即candidate有多个人,认领后,task表中的ASSIGNEE字段中会添加认领人的名字
taskService.claim("2504", "zs");

5.7完成任务

taskService.complete("2504");

5.8.查询流程是否结束

//获取运行时相关的核心对象
		RuntimeService runtimeService = processEngine.getRuntimeService();
		//获取流程实例的查询对象
		ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
		//查询单个流程。如果流程还没有结束,第一个流程实例id默认为2501
		ProcessInstance result = processInstanceQuery.processInstanceId("2501").singleResult();
		if(result==null){
			System.out.println("流程结束");
		}else{
			System.out.println("流程未结束或不存在");
		}

5.9.当最后一个任务完成后,所有数据都会进入到history表中
查询历史列表

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		//获取历史服务
		HistoryService historyService = processEngine.getHistoryService();
		//获取查询对象
		HistoricActivityInstanceQuery query = historyService.createHistoricActivityInstanceQuery();
		List<HistoricActivityInstance> list = query.list();
		for (HistoricActivityInstance hci : list) {
			System.out.println("=================");
			System.out.println(hci.getActivityId());
			System.out.println(hci.getActivityName());
			System.out.println(hci.getStartTime());
			System.out.println(hci.getEndTime());
		}