工作流activiti
业务过程的部分或整体在计算机应用环境下自动化,使多个参与者按照某种预定义的规则进行。
activiti版本5.13
一、画流程图
1、创建web项目,安装activiti插件
2、引入activiti相关jar包
3、新建流程图—单实例流程
3-1、节点只需要设置Assignee
3-2、连线的设置
如果是提交,outcome==‘提交’
如果是批准,outcome==‘批准’
如果是驳回,outcome==‘驳回’
3-3、流程定义key设置
点击空白处
二、流程部署
1、引入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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--数据库配置-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="**url地址**"/>
<property name="username" value="**用户名**"/>
<property name="password" value="**密码**"/>
</bean>
<!--流程配置器-->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="dataSource" ref="dataSource"/>
<!--流程引擎名称(使用ProcessEngines.getDefaultProcessEngine()方法时请不要配置流程引擎名称)-->
<property name="processEngineName" value="MyProcessEngine"/>
<!--
databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表。
false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。
true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建
create-drop: 构建流程引擎时创建数据库表, 关闭流程引擎时删除这些表。
-->
<property name="databaseSchemaUpdate" value="true"/>
<property name="historyLevel" value="FULL"/>
</bean>
</beans>
2-1、classpath方式
见2-2
2-2、InputStream方式
任何操作要先获得流程引擎对象(ProcessEngine),所有的方法都要从流程引擎对象中获得。
public static void main(String[] args) throws FileNotFoundException {
//使用InputStream加载
FileInputStream fileInputStream = new FileInputStream("E:\\eclipse\\workspace\\power\\src\\main\\resources\\ibp\\act\\phase\\test02.bpmn");
//读取配置文件,获取工作流的引擎实例
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//获取引擎对象
ProcessEngine engine = processEngineConfiguration.buildProcessEngine();
//根据流程引擎对象获取流程部署服务对象
RepositoryService service = engine.getRepositoryService();
//通过service 部署流程图
DeploymentBuilder builder = service.createDeployment();
Deployment deploy = builder
.name("test02")
.addInputStream("test02.bpmn", fileInputStream)
//.addClasspathResource("E:\\eclipse\\workspace\\power\\src\\main\\resources\\ibp\\act\\phase\\test01.bpmn")//加载资源文件,一次只能加载一个文件
//.addClasspathResource("E:\\eclipse\\workspace\\power\\src\\main\\resources\\ibp\\act\\phase\\test01.png")//
.deploy();
//输入流程部署对象的信息
System.out.println("流程部署成功!");
System.out.println(deploy.getId());
System.out.println(deploy.getName());
}
部署成功之后,数据库生成23张关于activiti表
#资源库流程规则表
select * from act_re_deployment #部署信息表
select * from act_re_model #流程设计模型部署表
select * from act_re_procdef #流程定义数据表
select * from act_ge_bytearray #资源文件表
select * from act_ge_property #部署ID主键生成策略表
#运行时数据库表
select * from act_ru_execution #运行时流程执行实例表
select * from act_ru_identitylink #运行时流程人员表,主要存储任务节点与参与者的相关信息
select * from act_ru_task #运行时任务节点表
select * from act_ru_variable #运行时流程变量数据表
#历史数据库表
select * from act_hi_actinst #历史节点表
select * from act_hi_attachment #历史附件表
select * from act_hi_comment #历史意见表
select * from act_hi_identitylink #历史流程人员表
select * from act_hi_detail #历史详情表,提供历史变量的查询
select * from act_hi_procinst #历史流程实例表
select * from act_hi_taskinst #历史任务实例表
select * from act_hi_varinst #历史变量表
查询表act_re_deployment,表示部署成功。
这里是引用以上两种部署方式,一次只能部署一个资源,除非执行多次。Zip压缩包方式一次可以部署多个资源。
2-3、zip压缩包部署
三、启动流程
public static void main(String[] args) {
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//拿到流程引擎对象
ProcessEngine engine = processEngineConfiguration.buildProcessEngine();
//获得运行时的service
RuntimeService runtimeService = engine.getRuntimeService();
//初始化设置assignee,用户可以在界面上设置任务节点的执行人
Map<String,Object> map=new HashMap<>();
map.put("pm_id","8055");
map.put("pm","10033");
map.put("pd_id","7433");
//三个参数分别代表含义1、流程定义key;2、关联业务表business_key,一般用业务表主键;3、初始化参数map
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("test02", "9111221",map);
System.out.println("流程启动成功,流程实例=========>"+processInstance.getId());
}
查询运行时任务表act_ru_task,表示流程已经启动
三、提交、审批、驳回流程
outcome是画流程图的连线名称(自己定义的),当前节点要执行什么操作(如:批准,驳回,提交),只需传对应的连线名称就行。如果不使用初始化默认审批人,需要变更下一个节点审批人,在map中指定就行。
public static void main(String[] args) {
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine engine = processEngineConfiguration.buildProcessEngine();
//获得任务相关service
TaskService taskService=engine.getTaskService();
Map<String,Object> map=new HashMap<>();
//项目经理提交
map.put("outcome", "提交");//连线名称
//质管审批
//map.put("outcome", "批准");
//map.put("outcome", "驳回");
//当前的任务id
taskService.complete("326707",map);
System.out.println("成功");
}
如果选择提交,表示该节点已通过,到下一个节点了。