最近一直研究学习Activity6.0工作流,以此贴立志!将学习成果在此进行总结
一:准备工作
-
下载Activity6.0相关jar包和文件
由于国内网络问题,官方下载可能较慢,因此我在这里提供百度云地址,有需要的大佬可自行下载:
https://pan.baidu.com/s/1lbm4RcTaC0hty4KZBJF48g 提取码:y8ro
下载完成后解压即可。 -
工具安装activity插件
eclipse和idea均有activity的插件,各位大佬可根据自己的喜好进行选择。(这里就不再阐述安装插件的方法了),如果懒得安装的大佬可以下载这个已经安装好插件的eclipse工具,解压即可使用:
链接:https://pan.baidu.com/s/1t2ddaxR8romXur1wHfFgFw 提取码:03wj -
编写第一个activity程序
准备工作做好之后,就可以编写人生中第一个activity程序啦~
第一步:使用activity插件新建一个流程,activity插件会给我们生成一个后缀为bpmn的文件(至于它是什么,我只知道bpmn是一个规范…),我们可以将他的后缀改为xml打开查看里面的内容(由于本人才疏学浅,就不说这个xml文件中的内容啦哈)。
打开xml可以看到里面有各种各样的配置节点,但是唯一能认识的就是节点中的那个id,
记录那个id因为一会会用到的!
这是一个最简单的员工提交流程,经理审批流程。
第二步:创建一个普通的Java 工程,然后将所下载的activity包的依赖添加进去(注意:这里需要注意的是,activity包中是不包含mysql链接驱动包的,因此我们还需要添加mysql链接驱动包),然后创建一个recourse包,存放我们的配置相关的文件。
第三步:添加actiity配置文件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 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ACT" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="123456" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
</beans>
该配置文件主要就是需要配置数据库,我使用的mysql数据库,因此各位大佬就按需配置自己的数据库和用户名密码哟~~~
配置文件的最后一个配置,设置为true可以在初始化工作流的时候,进行创建相关的activity的表,他会自动检查,如果缺少表或者字段的话,会自动添加的(还是很贴心的啊哈哈)!
第四步:开始写人生中第一个activity代码:
初始化activity:
package com.cp;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
/**
* 人生中第一个工作流代码
* Created by 程程有小棉被啊 on 2019/7/17.
*/
public class FirstAct {
public static void main(String[] args) {
//创建流程引擎 它会在classpath下搜索activiti.cfg.xml, 并基于这个文件中的配置构建引擎
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
//关闭流程引擎
defaultProcessEngine.close();
System.exit(0);
}
}
执行完成后,会在对应的数据库中生成28张表~~
Activity的表都是以ACT_开头的,第二部分表示表的用途的两个字母表识,用途也和服务的API对应。
ACT_RE_*:RE表示repository。这个前缀的表包含了流程定义和流程静态资源(图片,规则等)
ACT_RU_*:RU表示runtime。这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。Activity只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录,这样运行时表可以一直很小速度很快。
ACT_ID_*:ID表示identity。这些表包含身份信息,比如用户,组等
ACT_HI_*:HI表示history。这些表包含历史数据,比如历史流程实例,变量,任务等等
ACT_GE_*:通用数据,用于不容场景下。
使用ProcessEngine获取服务:
package com.cp;
import org.activiti.engine.*;
/**
* 人生中第一个工作流代码
* Created by 程程有小棉被啊 on 2019/7/17.
*/
public class FirstAct {
public static void main(String[] args) {
/*创建流程引擎
它会在classpath下搜索activiti.cfg.xml, 并基于这个文件中的配置构建引擎,
会在第一次调用时 初始化并创建一个流程引擎,以后再调用就会返回相同的流程引擎*/
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
/*获取存储服务 它提供了管理和控制发布包和流程定义的操作
* 该服务可以
1、查询引擎中的发布包和流程定义。
2、暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。
3、获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。
4、获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。
* */
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
/*获取运行时服务
* 正如RepositoryService负责静态信息(比如,不会改变的数据,至少是不怎么改变的),
* RuntimeService正好是完全相反的。它负责启动一个流程定义的新实例。
* RuntimeService可以用来获取和保存流程变量,也能查询流程实例和执行。
* */
RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
/*获取任务服务
* 任务是由系统中真实人员执行的,它是Activiti这类BPMN引擎的核心功能之一。 所有与任务有关的功能都包含在TaskService中:
* 查询分配给用户或组的任务
创建独立运行任务。这些任务与流程实例无关。
手工设置任务的执行者,或者这些用户通过何种方式与任务关联。
认领并完成一个任务。认领意味着一个人期望成为任务的执行者, 即这个用户会完成这个任务。完成意味着“做这个任务要求的事情”。 通常来说会有很多种处理形式。
*
* */
TaskService taskService = defaultProcessEngine.getTaskService();
/*获取身份服务
* 它可以管理(创建,更新,删除,查询...)群组和用户。 请注意, Activiti执行时并没有对用户进行检查。
* 例如,任务可以分配给任何人,但是引擎不会校验系统中是否存在这个用户。
* 这是Activiti引擎也可以使用外部服务,比如ldap,活动目录,等等
* */
IdentityService identityService = defaultProcessEngine.getIdentityService();
/*获取表单服务(可选服务)
* 是一个可选服务。即使不使用它,Activiti也可以完美运行, 不会损失任何功能。这个服务提供了启动表单和任务表单两个概念。
* 启动表单会在流程实例启动之前展示给用户, 任务表单会在用户完成任务时展示。Activiti支持在BPMN 2.0流程定义中设置这些表单。
* 这个服务以一种简单的方式将数据暴露出来。再次重申,它时可选的, 表单也不一定要嵌入到流程定义中
* */
FormService formService = defaultProcessEngine.getFormService();
/*获取历史服务
*提供了Activiti引擎手机的所有历史数据。 在执行流程时,引擎会保存很多数据(根据配置),
* 比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。
* */
HistoryService historyService = defaultProcessEngine.getHistoryService();
/*获取管理服务
* 在使用Activiti的定制环境中基本上不会用到。 它可以查询数据库的表和表的元数据。另外,它提供了查询和管理异步操作的功能。
* Activiti的异步操作用途很多,比如定时器,异步操作, 延迟暂停、激活,等等。后续,会讨论这些功能的更多细节。
* */
ManagementService managementService = defaultProcessEngine.getManagementService();
//关闭流程引擎
defaultProcessEngine.close();
System.exit(0);
}
}
使用activity服务:
发布流程:将我们事先创建的请假流程BPMN文件进行发布,让activity引擎知道改流程。
package com.cp;
import org.activiti.engine.*;
/**
* 人生中第一个工作流代码
* Created by 程程有小棉被啊 on 2019/7/17.
*/
public class FirstAct {
public static void main(String[] args) {
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
//发布流程
repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy();
defaultProcessEngine.close();
System.exit(0);
}
}
启动一个流程实例: 将发布好的流程启动
package com.cp;
import org.activiti.engine.*;
import org.activiti.engine.runtime.ProcessInstance;
/**
* 人生中第一个工作流代码
* Created by 程程有小棉被啊 on 2019/7/17.
*/
public class FirstAct {
public static void main(String[] args) {
/*创建流程引擎*/
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
//发布流程
repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy();
//获取运行时服务
RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
//启动流程(myProcess_1 为bpmn中的id)
ProcessInstance myProcess = runtimeService.startProcessInstanceByKey("myProcess_1");
//关闭流程引擎
defaultProcessEngine.close();
System.exit(0);
}
}
执行任务和完成任务
package com.cp;
import org.activiti.engine.*;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
/**
* 人生中第一个工作流代码
* Created by 程程有小棉被啊 on 2019/7/17.
*/
public class FirstAct {
public static void main(String[] args) {
/*创建流程引擎*/
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
//发布流程
repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy();
//获取运行时服务
RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
//启动流程(myProcess_1 为bpmn中的id)
ProcessInstance myProcess = runtimeService.startProcessInstanceByKey("myProcess_1");
//获取任务服务
TaskService taskService = defaultProcessEngine.getTaskService();
//员工提交申请
Task task = taskService.createTaskQuery().processInstanceId(myProcess.getId()).singleResult();
System.out.println("当前流程节点:" + task.getName()); //submit apply
//提交流程
taskService.complete(task.getId());
//经理审批申请
task = taskService.createTaskQuery().processInstanceId(myProcess.getId()).singleResult();
System.out.println("当前流程节点:" + task.getName()); //check apply
//提交流程 此时该流程结束
taskService.complete(task.getId());
//流程结束
task = taskService.createTaskQuery().processInstanceId(myProcess.getId()).singleResult();
System.out.println("流程结束后:" + task);//null
//关闭流程引擎
defaultProcessEngine.close();
System.exit(0);
}
}
至此 第一个简单的activity代码完成(写的不好,大佬见谅,勿喷),后续的学习还会继续更新。加油!!!