1、Activiti工作流详细讲解完整教程Activiti 教程详解完整教程1. Activiti 介绍Activiti 是由 Alfresco 软件在 2010 年 5 月 17 日发布的业务流程管理 (BPM)框架 , 它是覆盖了业务流程管理 . 工作流 . 服务协作等领域的一个开源 . 灵活的 . 易扩展的可执行流程语言框架。Activiti 基于 Apache 许可的开源 BPM平台 . 创始人 Tom Baeyens 是 JBoss JBPM 的项目架构师. 它的特色是提供了 eclipse 插件 . 开发人员可以通过插件直接绘画出业务流程图。1.1 工作流引擎ProcessEngine
2、 对象 . 这是 Activiti 工作的核心。负责生成流程运行时的各种实例及数据 .监控和管理流程的运行。1.2 BPMN业务流程建模与标注( Business Process Model and Notation,BPMN ) . 描述流程的基本符号. 包括这些图元如何组合成一个业务流程图 (Business Process Diagram)2.准备环境2.1 Activiti 软件环境1)或者更高版本2) 支持的数据库有 :h2,mysql,oracle,mysql,db2 等3)支持 Activiti运行的 jar 包. 可以通过 maven 依赖引入4)开发环境为或者以上版本 .my
3、eclipse 为版本安装流程设计器 (eclipse 插件 )1)打开 Help Install New Software Add输入 Name: Activiti DesignerLocation: designer/update/输入完成后 . 单击 OK按钮等待下载完成后安装。安装完成后在菜单选项中会出现 Activiti 的目录选项设置eclipse activit插件的画流程图选项打开菜单Windows - Preferences - Activiti -Save下流程图片的生成方式勾选上 Create process definition image when saving th
4、e diagram作后在画流程图后保存 eclipse 会自动生成对应的流程图片。操作 . 勾选上这个操准备开发环境创建 maven web 项目 . 在 maven 中添加 Activiti 依赖在 eclipse 左边工作栏右键 New选择创建 Maven Project 项目 . 创建一个名为 ActivitiTest的项目点击 Finish完成。右键项目选择Properties.选择Project Facets勾选上图中的选项.点击Apply.再点击OK然后将项目转换成 web 项目 , 右键项目选择Properties,在Project Facets中做如下勾选,然后点击 Appy
5、应用和 OK确定然后右键项目 Properties . 选择 Deployment Assembly, 将 test 相关目录 Remove掉之保留 main 下面需要发布的内容 . 如下图然后点击 Appply 和 OK然后在文件中添加以下依赖Activiti-engineActiviti-springgroovy-allslf4j-apislf4j-jdk14junitjunit test mysqlmysql-connector-java然后在命令行下 mvn compile编译当前项目 . 将需要的包下载到本地仓库初始化数据库1) src/main/resource 目录下创建文件 ,
6、 内容如下=class =name=value =jdbcUsernamerootname=value =name=value =name=value =jdbcUrl 为你电脑数据库的 urljdbcUsername 为数据库用户名jdbcPassword 为数据库密码2)在 main/java 目录下创建任意目录和类编写创建 Activiti 数据表方法public class CreateTable /*创建流程表*/Testpublic void createTable() ProcessEngine processEngine = ( ).buildProcessEngine();-
7、processEngine: + processEngine );然后运行该测试方法. 如果运行成功. 在数据库中应该会产生25 张 Activiti的相关数据表Activiti 表说明下面是概括了几个常用的数据表流程部署相关表act_re_deployement 部署对象表act_rep_procdef 流程定义表act_ge_bytearray 资源文件表act_ge_prperty主键生成策略表(对于部署对象表的主键ID )流程实例相关表act_ru_execution 程可能流程实例正在执行的执行对象表 ID 不一样)(包含执行对象ID和流程实例ID.如果有多个线act_hi_proc
8、inst act_hi_actinst流程实例历史表存放历史所有完成的任务Task 任务相关表act_ru_task 代办任务表 (只对应节点是 UserTask 的)act_hi_taskinst 代办任务历史表 (只对应节点是 UserTask 的)act_hi_actinst 所有节点活动历史表 (对应流程的所有节点的活动历史 . 从开始节点一直到结束节点中间的所有节点的活动都会被记录)流程变量表act_ru_variable 正在执行的流程变量表act_hi_variable 流程变量历史表3. 核心 APIProcessEngine说明 :1)在 Activiti中最核心的类 . 其
9、他的类都是由他而来。2)产生方式ProcessEngine processEngine = ();3)可以产生 RepositoryServiceRepositoryService repositoryService =();4) 可以产生 RuntimeServiceRuntimeService runtimeService = ();5)可以产生 TaskService TaskService taskService =();各个 Service 的作用RepositoryService 管理流程定义RuntimeServiceTaskService执行管理操作任务管理. 包括启动. 推进
10、. 删除流程实例等RepositoryServiceActiviti该 service的仓库服务类。所谓的仓库指流程定义文档的两个文件:可以用来删除部署的流程定义。bpmn文件和流程图片RuntimeService是 Activiti 的流程执行服务类 . 可以从这个服务类中获取很多关于流程执行的相关的信息。TaskService是 Activiti 的任务服务类。 可以从这个类中获取任务的相关信息 . 如当前正在执行的个人待办和用户组待办任务。HistoryService是 Activiti 的查询历史信息的类 . 在一个流程执行完成后 . 这个对象为我们提供查询历史信息. 可以跟踪流程实例
11、对应所有待办节点的运行情况。ProcessDefinition流程定义类 . 可以从这里获得资源文件等。ProcessInstance代表流程定义的执行实例 . 当一个部署的流程图启动后 . 该流程只有一条流程实例数据 . 但是它的流程任务可以有多个 . 每个任务对应流程图中相应的流程节点。4. 入门 HelloWorld 程序创建流程图方法点击 ActivitiTest在当前项目右键选择项目 . 在 src/main/java 目录下创建一个 diagrams 目录用来存放流程图Activiti Diagram 流程图输入流程图名称 HelloWorld. 然后点击 OK.在控制面板的右边栏
12、有相关的画图图标操作其中一个流程必须包含一个开始节点和一个结束节点 . 结束节点可以有多个。然后使用 StartEvent, UserTask,EndEvent 画出下面的流程图 . 然后用 Connection中的SequenceFlow连线连接起来。创建流程图 . 如下图指定流程图名称 .ID 和 UserTask 的处理人1)选中第一个节点 . 在 General 中的 name 属性中输入当前节点的名称 , 在 Main config 的 Assignee 中输入该节点的处理人 . 然后以此类推将 3 个节点的值设置完成。中.2)然后在流程图旁边的空白出点击一下 . 输入流程的 ID
13、和 Name值 . 然后保存将流程图部署到 Activiti 的数据表中启动完成后在数据信息 .act_re_deployment流程部署表和act_re_procdef流程定义表中会有对应的启动流程实例其中( HelloWorldKey);中的HelloWorldKey对应流程图中的ID值 , 在数据表中对应act_re_procdef流程定义表中的key字段启动完流程后在 act_ru_execution 表中会产生一条数据任务 . 其中 act_id_ 字段的值对应流程图节点的 ID 值. 这条数据为当前流程正在执行的在 act_ru_task 键.proc_inst_id_表中会产生一
14、条任务数 据 ,execution_id_为流程实例值为流程节点名称 .assignee_对 应 act_ru_execution 字段为该待办当前的处理人主查询待办任务指定查询张三的待办 . 可以查询出待办为第一个节点的处理任务。完成待办任务其中 taskId 对应 act_ru_task 表的主键 ID. 因为当前待办任务为第一个节点提交申请 . 当执行完这个待办后下一条待办数据将会流转到审批【部门经理】那 . 然后以此类推可以将部门经理和总经理的待办任务全部查询和执行完成。5.查询和删除流程定义1)查询流程定义2)删除流程定义6.流程变量操作设置流程变量1)设置流程变量有多种方式 . 可
15、以在流程启动 . 和任务执行的时候设置a.启动流程的时候设置b.通过 taskService 或者 runtimeService 设置提示:如果设置的流程变量值是一个对象类型 . 这个对象必须实现序列化 Serializable操作 , 并且要为该对象类指定一个 版本 ID获取流程变量见工程操作7.流程连线在画流程图的时候可以对流程的连线设置表达式 . 然后在执行的时候设置流程变量值 . 然后Activiti 会根据对应的值走对应的节点点击一条连线 . 在 Main线设置为 $message=config 不同意中的 Condition 属性值中设置 $message=. 然后在代码中设置对应
16、流程变量值。同意 .另外一条见工程操作8.排他网关如下图 , 其中黑色的叉叉对应 eclipse 画流程图图标中的 ExclusiveGateWay 图标然后对每条线的 Condition 属性指定对应的表达式 . 然后在执行任务时候设置对应的流程变量Activiti 会根据变量的值来判断对应连线中的表达式走对应的流程节点路线。见工程操作9. 并行网关十字图标对应图标中的ParallelGateway并行网关不需要指定连线的表达式. 当流程流转到并行任务时会出发多个任务. 当多个任务完成后在会将流程流转到下一个节点见工程操作10.个人任务的三种指定方式在 Assignee 中指定任务具体的处理
17、人在 Assignee 中指定任务的处理人或角色变量当指定 Assignee 为一个变量值后需要在代码中设置对应的处理人 . 比如在启动的时候设置userId 的值在工程中可以将起草人的处理变量设置为 userId. 审批人的处理变量设置为 appUserId. 然后通过业务模块和登录人来获取对应模块的审批人。为任务节点设置一个监听类来设置当前节点的处理人如果设置了监听类就不需要在设置 Assignee 的值1)创建一个监听器类 . 需要实现 TaskListener 接口2) 点击任务节点 . 选择 Listener 选项卡 . 点击 New . 将 Event 的值改为 create 然后
18、选择创建的 TaskListenerImpl 实现类然后当任务到达该节点后 Activiti 会触发监听实现类的 notify 方法11.组任务的三种指定方式在任务节点中设置 Candidate user 候选人设置的候选处理人用英文输入法的逗号隔开 . 当任务到达该节点后 . 设置的候选人其中任何一个人都可以处理当前待办 . 处理完成后待办结束。在 Candidate user 中设置一个变量作为处理人然后通过启动或者执行流程向下传递的时候设置该流程变量值通过监听类来设置待办处理人如果设置了监听类就不需要在设置 Assignee 的值和个人任务的监听类一样实现 TaskListener 接口 . 然后设置 CandidateUser 的值
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1