13.activiti
1.activiti是什么
apache旗下的一款专用来处理业务审批流程的组件。前身jpbm。
2.使用activiti
选择5.22版本进行学习。
- 安装mysql数据库表;
运行create.sql脚本创建25张数据库表(这些别中的数据绝对不允许手工改动);
认识下表结构:
act_id_*:系统用户与角色表。需要系统自身的用户管理与角色管理的同时,把用户和角色数据在id_*表中保存。
act_ge_*:保存的是组件的基本信息.
act_Re_*:流程部署记录。
act_ru_*:运行时流程数据表。
act_hi_*:历史流程数据表。
- ssm中安装activiti环境,配置数据库连接;
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.22.0</version>
<exclusions>
<exclusion>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</exclusion>
</exclusions>
</dependency>
- ssm中配置activiti的核心bean对象到spring上下文环境。
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--流程引擎配置对象-->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="false" />
<property name="jobExecutorActivate" value="false" />
</bean>
<!--核心对象:ProcessEngine,其实就是一个工厂对象,用来创建核心的服务接口对象-->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<!--核心的服务接口-->
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"></bean>
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
</beans>
3.使用identityService服务接口
1.newUser-->saveUser
2.newGroup-->saveGroup
3.createMemerShip(String userid,String groupid)
4.进行流程设计(流程定义)
bpmn是一门流程定义语言,做流程设计。
activiti提供的eclipse下的可视化流程设计插件,可以在线安装http://activiti.org/designer/update/,也支持本地离线安装。
流程设计的注意点:
1.文件一定定义id与name;
2.UserTask一定要定义assignee或candidate users或candidate groups中的一个,支持${}表达式,传入流程变量
3.网关的选择ExclusiveGateWay排他网关.用来做流程分支。
4.流程分支上一定要写明条件表达式
5.节点的listener,选择Expression,在spring环境下使用,写${beanid.方法名(形参)}.
5.部署流程
通过RepositoryService接口,去进行流程部署管理
DeploymentBuilder deployment = rs.createDeployment();
deployment.addClasspathResource("workflow/leaveProcess.bpmn");
deployment.addClasspathResource("workflow/leaveProcess.png");
deployment.name("请假流程部署");
Deployment deploy = deployment.deploy();
流程部署记录查询:
DeploymentQuery deploymentQuery = rs.createDeploymentQuery();//流程部署查询独享
deploymentQuery.orderByDeploymenTime().desc();
// deploymentQuery.listPage();//分页查询
List<Deployment> list = deploymentQuery.list();
流程部署删除:前提该流程部署未启动流程实例。
String deployid="27501";
rs.deleteDeployment(deployid);
6、启动流程以及执行任务
RunTimeService接口来start流程实例
ProcessInstance processInstance = rs.startProcessInstanceByKey(key2,Map类型的流程变量);
TaskService接口来执行某个任务
ts.complete(taskid);
TaskService接口来添加审批意见:
ts.addComment(任务id,流程实例id,审批结果,审批意见);
TaskService接口支持查询历史评论:
List<Comment> comments = ts.getProcessInstanceComments(流程实例id);
TaskService接口签收多人代办任务:
ts.claim(任务id)
TaskService接口查询执行中的流程的个人代办任务:
TaskQuery taskQuery = ts.createTaskQuery();//任务查询独享
taskQuery.taskCandidateOrAssigned(loginUser);//指定代办人
taskQuery.processDefinitionKey(key2);//查询某个流程下的代办任务
List<Task> list = taskQuery.list();//待办列表
7.流程跟踪
HistoryService接口来进行历史任务查询
HistoricTaskInstanceQuery tq = hs.createHistoricTaskInstanceQuery();
tq.processInstanceId(流程实例id);//指定查询条件
tq.list()