工作流Activiti的学习总结(十二) activiti官方十分钟快速学习
Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activi。。。

Activiti⼯作流框架学习笔记(⼆)之springboot2.0整合⼯作流Activi。
以前在⼯作当中做过不少与⼯作流Activiti有关的⼯作,当时都是spring集成activiti5.22的项⽬,现在回过头去看,其实版本已经稍微⽼了,因此,基于先前的⼯作经验,决定⽤较新版本的技术来重新梳理下以前接触过的技术。
决定⽤springboot2.0+Activiti6.0来做实践总结。
第⼀步,在springboot项⽬pom.xml⽂件引⼊相关依赖:1<!--Activiti ⼯作流-->2<dependency>3<groupId>mysql</groupId>4<artifactId>mysql-connector-java</artifactId>5<scope>5.1.35</scope>6</dependency>78<dependency>9<groupId>org.activiti</groupId>10<artifactId>activiti-spring</artifactId>11<version>6.0.0</version>12</dependency>1314<dependency>15<groupId>com.fasterxml.jackson.core</groupId>16<artifactId>jackson-core</artifactId>17<version>2.9.5</version>18</dependency>第⼆步,建⽴Activiti的配置类1 @Configuration2 public class Activiticonfig {34 /**5 * 流程实例类,启动流程时创建6 * @return7 */8 @Bean9 public ProcessEngine processEngine(){10 ProcessEngineConfiguration pro=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();11 pro.setJdbcDriver("com.mysql.jdbc.Driver");12 pro.setJdbcUrl("jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC&nullCatalogMeansCurrent=true");13 pro.setJdbcUsername("root");14 pro.setJdbcPassword("root");15 //避免发布的图⽚和xml中⽂出现乱码16 pro.setActivityFontName("宋体");17 pro.setLabelFontName("宋体");18 pro.setAnnotationFontName("宋体");19 pro.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);20 return pro.buildProcessEngine();21 }222324 /**25 * 仓库服务类,⽤于管理bpmn⽂件与流程图⽚26 * @return27 */28 @Bean29 public RepositoryService repositoryService(){30 return processEngine().getRepositoryService();31 }3233 /**34 * 流程运⾏服务类,⽤于获取流程执⾏相关信息35 * @return36 */37 @Bean38 public RuntimeService runtimeService(){39 return processEngine().getRuntimeService();40 }4142 /**43 * 任务服务类,⽤户获取任务信息44 * @return45 */46 @Bean47 public TaskService taskService(){48 return processEngine().getTaskService();49 }505152 /**53 * 获取正在运⾏或已经完成的流程实例历史信息54 * @return55 */56 @Bean57 public HistoryService historyService(){58 return processEngine().getHistoryService();59 }6061 /**62 * 流程引擎的管理与维护63 * @return64 */65 @Bean66 public ManagementService managementService(){67 return processEngine().getManagementService();68 }6970 /**71 * 创建、更新、删除,查询群组和⽤户72 * @return73 */74 @Bean75 public IdentityService identityService(){76 return processEngine().getIdentityService();77 }7879 }在springboot⼯程⾥简单加完这些配置后,启动项⽬,原以为可以正常⽣成Activi6.0⼯作流⾃带的28张表,但这时出现了⼀堆错误:### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'example.act_ge_property' doesn't exist ### The error may exist in org/activiti/db/mapping/entity/Property.xml### The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty-Inline### The error occurred while setting parameters### SQL: select * from ACT_GE_PROPERTY where NAME_ = ?### Cause: java.sql.SQLSyntaxErrorException: Table 'example.act_ge_property' doesn't exist出现这种问题主要是因为MySql的版本问题,在连接mysql的url后边加⼀个&nullCatalogMeansCurrent=true即可解决。
BPMN工作流的基本概念!详解工作流框架Activiti

BPMN⼯作流的基本概念!详解⼯作流框架Activiti⼯作流⼯作流简介⼯作流(Workflow): ⼯作流就是通过计算机技术对业务流程进⾏⾃动化管理。
实现多个参与者按照预定的流程去⾃动执⾏业务流程。
定义: 通过计算机对业务流程⾃动化执⾏管理主要解决的是: 使在多个参与者之间按照某种预定义的规则⾃动进⾏传递⽂档,信息或任务的过程.从⽽实现某个预期的业务⽬标,或者促使此⽬标的实现⼯作流管理系统的⽬标:管理⼯作的流程以确保⼯作在正确的时间被期望的⼈员所执⾏在⾃动化进⾏的业务过程中插⼊⼈⼯的执⾏和⼲预⼯作流框架:Activiti,JBPM,OSWorkFlow,WorkFlow⼯作流框架底层需要有数据库提供⽀持⼯作流术语⼯作流引擎ProcessEngine对象: 这是Activiti⼯作的核⼼.负责⽣成流程运⾏时的各种实例及数据,监控和管理流程的运⾏BPM业务流程管理:是⼀种以规范化的构造端到端的卓越业务流程为中⼼,以持续的提⾼组织业务绩效为⽬的的系统化⽅法常见商业管理教育如EMBA,MBA等均将BPM包含在内BPMN业务流程建模与标注:这些图如何组合成⼀个业务流程图(Business Process Diagram)讨论BPMN的各种的⽤途:包括以何种精度来影响⼀个流程图中的模型BPMN作为⼀个标准的价值BPMN未来发展的远景流对象⼀个业务流程图有三个流对象的核⼼元素事件⼀个事件⽤圆圈来描述,表⽰⼀个业务流程期间发⽣的东西事件影响流程的流动.⼀般有⼀个原因(触发器)或⼀个影响(结果)基于它们对流程的影响,有三种事件:开始事件,中间事件,终⽌事件活动⽤圆⾓矩形表⽰,⼀个流程由⼀个活动或多个活动组成条件条件⽤菱形表⽰,⽤于控制序列流的分⽀与合并。
可以作为选择,包括路径的分⽀与合并内部的标记会给出控制流的类型Activiti开源⼯作流框架Activiti简介Activiti是⼀个开源的⼯作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进⾏流程调度Activiti 作为⼀个遵从 Apache 许可的⼯作流和业务流程管理开源平台,其核⼼是基于Java的超快速,超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌⼊性和可扩展性,同时更加强调⾯向业务⼈员Activiti 流程引擎重点关注在系统开发的易⽤性和轻量性上.每⼀项BPM业务功能Activiti流程引擎都以服务的形式提供给开发⼈员.通过使⽤这些服务,开发⼈员能够构建出功能丰富,轻便且⾼效的BPM应⽤程序Activiti服务结构Activiti系统服务结构图核⼼类:ProcessEngine: 流程引擎的抽象,可以通过此类获取需要的所有服务服务类:XxxService: 通过ProcessEngine获取,Activiti将不同⽣命周期的服务封装在不同Service中,包括定义,部署,运⾏.通过服务类可获取相关⽣命周期中的服务信息RepositoryServiceRepository Service提供了对repository的存取服务Activiti中每⼀个不同版本的业务流程的定义都需要使⽤⼀些定义⽂件,部署⽂件和⽀持数据(例如BPMN2.0XML⽂件,表单定义⽂件,流程定义图像⽂件等),这些⽂件都存储在Activiti内建的Repository中RuntimeServiceRuntime Service提供了启动流程,查询流程实例,设置获取流程实例变量等功能.此外它还提供了对流程部署,流程定义和流程实例的存取服务TaskServiceTask Service提供了对⽤户Task和Form相关的操作.它提供了运⾏时任务查询,领取,完成,删除以及变量设置等功能HistoryServiceHistory Service⽤于获取正在运⾏或已经完成的流程实例的信息,与Runtime Service中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化FormService使⽤Form Service可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单Activiti中的流程和状态Task均可以关联业务相关的数据IdentityServiceIdentity Service提供了对Activiti系统中的⽤户和组的管理功能Activiti中内置了⽤户以及组管理的功能,必须使⽤这些⽤户和组的信息才能获取到相应的TaskManagementServiceManagement Service提供了对Activiti流程引擎的管理和维护功能这些功能不在⼯作流驱动的应⽤程序中使⽤,主要⽤于 Activiti 系统的⽇常维护核⼼业务对象:org.activiti.engine.impl.persistence.entity包下的类,包括Task,ProcessInstance,Execution等根据不同职责实现相应接⼝的⽅法(如需要持久化则继承PersistentObject接⼝),与传统的实体类不同Activiti组件Activiti上下⽂组件Context: ⽤来保存⽣命周期⽐较长,全局性的信息,类似Application.主要包括如下三类:CommandContext: 命令上下⽂-保存每个命令必要的资源,如持久化需要的sessionProcessEngineConfigurationImpl: 流程引擎相关配置信息-整个引擎全局的配置信息.如数据源DataSource等.该对象为单例,在流程引擎创建的时候初始化ExecutionContext: 持有ExecutionEntity对象持久化组件:Activiti使⽤mybatis作OR映射,并在此基础上增加设计了⾃⼰的持久化框架在流程引擎创建时初始化,顶层接⼝Session,SessionFactorySession有两个实现类:DbSqlSession: 负责sql表达式的执⾏AbstractManager: 负责对象的持久化操作SessionFactory有两个实现类:DbSqlSessionFactory: 负责DbSqlSession相关操作GenericManagerFactory: 负责AbstractManager相关操作Event-Listener组件:Activiti允许客户代码介⼊流程执⾏,提供了事件监听组件监听的事件类型:TaskListenerJavaDelegateExpressionExecutionListenerProcessEngineConfigurationImpl持有DelegateInterceptor的某个实例,⽅便调⽤handleInvocation Cache组件DbSqlSession中有cache的实现Activiti基于List和Map来做缓存:如查询时先查缓存,没有则直接查询并放⼊缓存异步执⾏组件Activiti可以执⾏任务,JobExecutor为其核⼼类,JobExecutor包含三个主要属性:JobAcquisitionThreadBlockingQueueThreadPoolExecutor⽅法ProcessEngines在引擎启动时调⽤JobExecutor.start,JobAcquisitionThread 线程即开始⼯作,其run⽅法不断循环执⾏AcquiredJobs中的job,执⾏⼀次后线程等待⼀定时间直到超时或者JobExecutor.jobWasAdded⽅法,因为有新任务⽽被调⽤。
activiti流转原理

activiti流转原理Activiti是一个开源的用于工作流和业务流程管理的引擎,它采用了基于BPMN 2.0标准的模型作为输入,并提供了强大的流转引擎来执行这些模型。
它提供了一种灵活而可扩展的方式来管理和执行各种类型的工作流和业务流程。
在Activiti中,流转是指将一个流程实例从一个活动节点转移到下一个活动节点的过程。
流转的原理是通过执行和控制来实现的。
下面将详细介绍Activiti的流转原理。
1.流转的触发流转的触发可以通过多种方式来实现,包括手动触发、定时触发、事件触发等。
手动触发是指用户在流程运行过程中手动执行一些操作来引发流转,比如提交申请、审核通过等。
定时触发是指根据预定的时间表来触发流转,比如在特定的日期或时间段执行一些活动。
事件触发是指根据特定的事件发生来触发流转,比如收到消息、邮件等。
2.流转的执行流转的执行是指按照预定的流程模型,将流程实例从一个活动节点转移到下一个活动节点的过程。
在Activiti中,流转的执行是由各种执行器来完成的,包括以下几种:-用户任务执行器:用于执行用户任务,即需要人工干预的活动节点。
用户任务执行器负责分配任务给用户,等待用户完成任务,并在任务被完成后继续流转。
-脚本任务执行器:用于执行脚本任务,即需要执行一段脚本的活动节点。
脚本任务执行器负责解析并执行脚本,并在脚本执行完成后继续流转。
-服务任务执行器:用于执行服务任务,即需要调用外部服务的活动节点。
服务任务执行器负责调用服务接口,并在服务调用完成后继续流转。
-接收任务执行器:用于执行接收任务,即等待外部触发事件的活动节点。
接收任务执行器负责等待特定的事件发生,并在事件发生后继续流转。
3.流转的控制流转的控制是指根据预定的流程规则和条件控制流程实例的流转。
在Activiti中,流程规则和条件可以通过表达式和脚本来定义和处理。
流转的控制主要包括以下几个方面:-顺序流控制:根据流程模型中定义的顺序流规则,按照活动节点的先后顺序依次执行。
Activiti6.0工作流使用说明文档V1.0

Activiti工作流使用说明文档V1.02019年8月9日目录一、模型设计器 (4)1.1任务 (5)1.1.1 用户任务 (5)1.1.2 服务任务 (5)1.1.3 脚本任务 (6)1.1.4 业务规则任务 (7)1.1.5 接收任务 (7)1.1.6 手动任务 (7)1.1.7 邮件任务 (8)1.1.8 Camel任务 (8)1.1.9 Mule任务 (8)1.1.10 决策任务 (9)1.2构造 (10)1.2.1 子流程 (10)1.2.2 事件子流程 (11)1.3泳道列表 (11)1.4分支 (12)1.4.1 排他分支 (12)1.4.2 并行分支 (12)1.4.3 包容分支 (13)1.4.4 事件分支 (13)1.5事件 (14)1.5.1 定时器事件 (14)1.5.2 信号事件 (14)1.5.3 消息事件 (16)1.5.4 错误事件 (16)1.5.5 边界事件 (17)1.5.6 中间事件 (18)1.5.7 开始事件 (18)1.5.8 结束事件 (18)1.6属性元素 (18)1.6.1 异步 (18)1.6.2 排他 (19)1.6.3 补偿 (19)1.6.4 中断任务 (20)1.6.5 分配 (21)1.6.6 到期时间 (22)1.6.7 表单 (22)1.6.8 表达式 (24)1.6.9 多实例 (25)1.7监听器配置 (28)1.7.1 执行监听器 (29)1.7.2 任务监听器 (30)1.7.3 事件监听器 (32)1.7.4 全局事件监听器 (33)二、workflow-service (34)2.1数据更新逻辑 (34)2.2方法表达式配置 (35)2.3自定义外置表单 (36)2.4事件监听器配置 (37)2.5方法调用说明 (37)三、常见问题 (37)一、模型设计器模型设计器项目qqdznyyglpt-workflow-designer主要完成自定义流程、表单设计,可以在模型设计器中完成整个功能的流转,但仅限与admin(密码默认为test)相同租户的用户可使用全功能,其他租户用户登录后只有流程设计、表单配置、决策表配置功能,无法在设计器进行流程执行。
activiti原理

activiti原理
activiti是一个基于Java语言的开源工作流引擎,可以快速地构建流程管理、任务分配、权限审批等各种业务流程。
activiti的原理主要包括以下几个方面:
1. BPMN标准:activiti采用了BPMN(Business Process Model and Notation)标准来描述流程,BPMN是一种图形化的业务流程建模语言,用于描述业务流程中的活动、事件、网关、任务等元素,支持流程的可视化建模,提高了业务流程的可读性和可理解性。
2. 工作流引擎:activiti包含了一个工作流引擎,用于管理流程执行过程中的各种状态、流转、事件等。
工作流引擎主要由三个部分组成:流程引擎、任务引擎和历史引擎。
流程引擎负责解析BPMN 模型、驱动流程的执行;任务引擎负责处理任务的分配、完成、撤销等操作;历史引擎负责记录流程的历史信息,包括流程实例、任务、变量等。
3. 事件机制:activiti采用了事件机制来实现流程的监听和扩展。
事件机制允许用户在流程执行过程中注册监听器,在流程中发生指定的事件时触发监听器执行相应的操作,比如发送邮件通知、执行自定义的逻辑等。
4. Spring框架:activiti支持与Spring框架集成,可以使用Spring来管理activiti的bean对象,简化了配置和使用的难度。
同时,Spring提供了很多有用的功能,如事务管理、AOP等,可以更好地管理和控制activiti的执行过程。
总的来说,activiti的原理主要是基于BPMN标准的流程描述和工作流引擎的控制,同时支持事件机制和Spring框架的集成,使得activiti具备了高度的可扩展性和灵活性,可以满足不同场景下的流程管理需求。
《深入Activiti流程引擎:核心原理与高阶实战》札记

《深入Activiti流程引擎:核心原理与高阶实战》读书笔记目录一、流程引擎概述 (2)1.1 流程引擎的定义 (4)1.2 流程引擎的作用 (5)1.3 流程引擎的发展历程 (6)二、Activiti核心原理 (7)三、Activiti高阶实战 (9)3.1 案例介绍 (10)3.1.1 电商订单处理流程 (11)3.1.2 供应链协同流程 (13)3.2 高阶特性与应用场景 (15)3.2.1 全局异步任务处理 (17)3.2.2 事件子系统的扩展性 (19)3.2.3 分布式事务处理 (20)3.3 实战中的问题与解决方案 (21)3.3.1 数据一致性保证 (22)3.3.2 性能优化策略 (24)3.3.3 安全性与权限控制 (25)四、总结与展望 (27)4.1 本书总结 (28)4.2 展望未来 (29)4.2.1 Activiti的发展趋势 (30)4.2.2 对流程引擎技术的未来思考 (32)一、流程引擎概述流程引擎(Process Engine)是Activiti工作流引擎的核心组件,负责处理和执行业务流程。
在《深入Activiti流程引擎:核心原理与高阶实战》作者详细介绍了Activiti流程引擎的基本概念、架构以及关键组件,帮助读者更好地理解和使用这一强大的工作流引擎。
流程引擎主要用于管理、执行和监控业务流程。
它可以将业务流程定义为一系列任务和事件,并根据这些任务和事件的执行顺序来驱动整个流程的运行。
通过流程引擎,企业可以实现对业务流程的可视化管理、自动化执行和监控,从而提高工作效率、降低运营成本和提升客户满意度。
进程定义(Process Definition):用于描述业务流程的结构和规则,包括任务、事件、网关等元素。
一个进程定义可以对应一个或多个流程实例。
流程实例(Process Instance):表示一个正在执行的业务流程,由一个或多个任务组成。
每个任务都有一个唯一的ID,用于在后续处理中引用。
activiti工作流引擎

activiti工作流引擎Activiti工作流引擎。
Activiti是一个轻量级的工作流引擎,它是一个开源的BPM(Business Process Management)平台,用于管理和执行业务流程。
Activiti工作流引擎可以帮助企业实现业务流程的自动化和优化,提高工作效率,降低成本,增强业务的灵活性和可控性。
Activiti工作流引擎具有以下特点:1. 灵活性,Activiti支持各种类型的业务流程,包括顺序流程、并行流程、循环流程等,可以根据企业的实际需求定制各种复杂的业务流程。
2. 可扩展性,Activiti提供了丰富的API和插件机制,可以方便地扩展和定制各种功能,满足企业特定的业务需求。
3. 可视化,Activiti提供了流程设计器,可以通过图形化界面设计和编辑业务流程,使业务流程的设计和管理变得更加直观和方便。
4. 高性能,Activiti采用了轻量级的架构设计,具有高性能和低资源消耗的特点,可以满足企业大规模业务流程的需求。
5. 安全性,Activiti提供了完善的安全机制,包括用户认证、授权管理等,保障业务流程的安全性和可靠性。
使用Activiti工作流引擎可以带来以下好处:1. 自动化流程,通过Activiti工作流引擎,企业可以将繁琐的业务流程自动化执行,减少人工干预,提高工作效率。
2. 优化资源配置,Activiti工作流引擎可以根据业务流程自动分配资源,合理利用企业的人力和物力资源,降低成本。
3. 实时监控,Activiti工作流引擎提供了实时监控和报表功能,可以随时了解业务流程的执行情况,及时发现和解决问题。
4. 灵活调整,Activiti工作流引擎可以根据业务需求灵活调整业务流程,适应企业不断变化的业务环境。
5. 提升管理水平,通过Activiti工作流引擎,企业可以实现业务流程的标准化和规范化管理,提升管理水平和业务质量。
总之,Activiti工作流引擎是一个功能强大、灵活性高、性能优越的工作流引擎,可以帮助企业实现业务流程的自动化和优化,提高工作效率,降低成本,增强业务的灵活性和可控性。
《Activiti6.0工作流引擎深度解析与实战》笔记

《Activiti6.0⼯作流引擎深度解析与实战》笔记1.1 课程导学--- 什么是⼯作流引擎?是⽤来驱动业务按照流程图逐步流转的核⼼框架。
--- 为什么学习⼯作流引擎?早期:企业OA、CRM、流程审批现在:电商购物、⾦融出⾏、中台⽀撑--- Activiti6.0流程引擎配置--- 核⼼API--- 数据模型设计--- BPMN2.0规范--- BPMN2.0元素2.1 本章概述⼯作流⼊门:⼯作流介绍、⼯作流技术选型、Activiti6.0快速体验。
2.2 ⼯作流介绍⼯作流是什么?为什么学习⼯作流?如何去学习⼯作流?1、审批业务场景(如请假,有⼀系列步骤)2、审批流程模型化(抽象出⼀系列流程图模型)“开始节点”(开始StartEvent)->填写审批信息的“⽤户节点”->通过“流程判断”(排他⽹关Exclusive Gateway)可以流转到“主管审批”(任务UserTask)->...->“结束节点”(结束EndEvent)3、常见的⽹上购物流程4、购物⼯作流程模型化有3个参与者,“电商购物流程”是泳池Pool,“仓储物流”等是泳道Line,“检验库存”是服务任务ServiceTask(服务任务是指不是由⼈⼯操作,⽽是由系统⾃动完成实现的逻辑)。
5、⼯作流是什么6、为什么需要⼯作流2.3 ⼯作流引擎技术选型2.4 Activiti6.0快速体验--部署环境介绍默认的⽤户名和密码是:admin和test2.5 Activiti6.0快速体验--部署环境实操win10下打开Cygwin,进⾏如下操作:1、curl -s "http://get.sdkman.io" | bash报错:Looking for a previous installation of SDKMAN...Looking for unzip...Looking for zip...Not found.Please install zip on your system using your favourite package manager.参考:https:///IOIO_/article/details/84946257解决⽅法是重新点击cygwin的安装包,把zip的package安装⼀遍,重启cygwin,再输⼊⼀遍这个命令即可。
activiti概念

activiti概念Activiti是一个开源的工作流引擎,它是基于BPMN 2.0规范设计的,用于处理和管理业务流程。
Activiti允许用户以图形化的方式设计、执行和监控工作流程,使得业务流程的定义和管理变得更加简单和灵活。
以下是Activiti的一些关键概念:1. 流程定义(Process Definition):指的是将业务流程描述为一个或多个连续任务和决策的图形模型。
流程定义通常使用BPMN 2.0规范进行设计,包括定义流程中的活动、网关、事件和边界事件等。
2. 流程实例(Process Instance):是指根据流程定义创建的一个具体的流程执行实例。
每当启动一个新的流程实例时,都会根据流程定义创建一个新的流程实例。
3. 任务(Task):是流程实例中的具体工作单元,可以被分配给特定的用户或角色。
任务通常需要被执行者完成指定的操作,并且可以包含附加的属性(如截止日期、优先级等)。
4. 执行(Execution):是Activiti中一个非常重要的概念,表示流程实例中的当前执行状态。
每当流程执行到某个任务节点时,都会创建一个对应的执行。
5. 条件(Condition):是用于控制流程中的分支和合并的逻辑条件。
在Activiti中,可以使用表达式、脚本或业务规则等方式定义条件。
6. 网关(Gateway):是用于控制流程中分支和合并的特殊节点。
在Activiti中,有并行网关、排他网关和包容网关等不同类型的网关。
7. 监听器(Listener):是用于在流程执行过程中监听和处理事件的机制。
可以通过监听器在特定的事件触发时执行自定义的业务逻辑。
8. 定时器(Timer):是用于在流程中触发定时事件的机制。
可以根据时间或时间表达式定义定时器,并在指定的时间触发特定的操作。
这些概念共同构成了Activiti工作流引擎的核心功能和特性,可以帮助用户更好地管理和执行业务流程。
activiti工作流表名及字段详解

1. activiti工作流简介activiti是一个轻量级的工作流引擎,它是一个开源的、Java语言的工作流和业务过程管理(BPM)评台。
activiti可以帮助开发者简化和优化企业的业务流程,提高工作效率,降低成本。
2. activiti工作流表名及字段详解在activiti的工作流引擎中,有一些核心的数据表用来存储流程定义、流程实例、任务等信息。
下面我们就来详细解释activiti的工作流表名及字段。
2.1 ACT_RE_*:流程存储表ACT_RE_*表是存储流程静态信息的表,包括流程定义、流程资源等。
ACT_RE_*表的常见字段包括:- ID: 唯一标识- NAME: 名称- KEY: 关键字- DEPLOYMENT_ID: 部署ID- RESOURCE_NAME: 资源名称- DGRM_RESOURCE_NAME: 流程图名称2.2 ACT_RU_*:运行时表ACT_RU_*表是存储流程运行时数据的表,包括流程实例、任务实例等。
ACT_RU_*表的常见字段包括:- ID: 唯一标识- REV: 版本号- EXECUTION_ID: 执行ID- PROC_DEF_ID: 流程定义ID- NAME: 名称- ASSIGNEE: 指派人- CREATE_TIME: 创建时间2.3 ACT_HI_*:历史数据表ACT_HI_*表是存储历史数据的表,包括流程实例的历史数据、任务的历史数据等。
ACT_HI_*表的常见字段包括:- PROC_DEF_ID: 流程定义ID- PROC_INST_ID: 流程实例ID- TASK_ID: 任务ID- START_TIME: 开始时间- END_TIME: 结束时间- DURATION: 持续时间2.4 其他表及字段在activiti工作流引擎中,还有一些其他重要的表和字段,包括ACT_ID_*表(存储用户、角色等信息)、ACT_GE_*表(存储通用的流程引擎数据)等。
工作流Activiti的学习总结(九)Activiti手工执行的应用(ReceiveTask实现方式)

工作流模拟的业务情景如下:1.用户到银行转账业务2.银行工作人员查询用户余额3.银行工作人员帮助用户转账手工触发执行是指,执行到流程中某个个结点后流程暂时停止运行,直到收到外部发送的信号以后,才会继续向前推进,这样情况可以更加精细地控制流程。
针对用户手动执行的任务可以采用手工触发执行通过<;receiveTask>;和<;userTask>;元素都可以实现流程的手工触发执行。
本文讲解ReceiveTask方式实现:配置如下:<;receiveTask id=";receivetask2"; name=";开始转账";>;<;extensionElements>;<;activiti:executionListener event=";start"; class=";com.easyway.workflow.activiti.CheckMerchantMoneyTask";>;<;/activiti:exec utionListener>;<;/extensionElements>;<;/receiveTask>;流程图如下:流程配置如下:<;?xml version=";1.0"; encoding=";UTF-8";?>;<;definitions xmlns=";/spec/BPMN/20100524/MODEL"; xmlns:xsi=";/2001/XMLSchema-instance";xmlns:activiti=";/bpmn";xmlns:bpmndi=";/spec/BPMN/20100524/DI";xmlns:omgdc=";/spec/DD/20100524/DC";xmlns:omgdi=";/spec/DD/20100524/DI";typeLanguage=";/2001/XMLSchema";expressionLanguage=";/1999/XPath";targetNamespace=";/test";>;<;process id=";BankUserTask"; name=";BankUserTask";>;<;documentation>;Place documentation for the 'BankUserTask' process here.<;/documentation>;<;startEvent id=";startevent1"; name=";准备转账业务";>;<;/startEvent>;<;endEvent id=";endevent1"; name=";转账结束";>;<;/endEvent>;<;receiveTask id=";receivetask1"; name=";检查账户余额";>;<;extensionElements>;<;activiti:executionListener event=";start";class=";com.easyway.workflow.activiti.CheckBankAccountMoneyTask";/>;<;/extensionElements>;<;/receiveTask>;<;receiveTask id=";receivetask2"; name=";开始转账";>;<;extensionElements>;<;activiti:executionListener event=";start"; class=";com.easyway.workflow.activiti.CheckMerchantMoneyTask";>;<;/activiti:exec utionListener>;<;/extensionElements>;<;/receiveTask>;<;sequenceFlow id=";flow1"; name=";"; sourceRef=";startevent1"; targetRef=";receivetask1";>;<;/sequenceFlow>;<;sequenceFlow id=";flow2"; name=";"; sourceRef=";receivetask1"; targetRef=";receivetask2";>;<;/sequenceFlow>;<;sequenceFlow id=";flow3"; name=";"; sourceRef=";receivetask2"; targetRef=";endevent1";>;<;/sequenceFlow>;<;sequenceFlow id=";flow4"; name=";"; sourceRef=";receivetask1"; targetRef=";endevent1";>;<;/sequenceFlow>;<;/process>;<;bpmndi:BPMNDiagram id=";BPMNDiagram_BankUserTask";>;<;bpmndi:BPMNPlane bpmnElement=";BankUserTask"; id=";BPMNPlane_BankUserTask";>;<;bpmndi:BPMNShape bpmnElement=";startevent1"; id=";BPMNShape_startevent1";>;<;omgdc:Bounds height=";35"; width=";35"; x=";76"; y=";218";>;<;/omgdc:Bounds>;<;/bpmndi:BPMNShape>;<;bpmndi:BPMNShape bpmnElement=";endevent1"; id=";BPMNShape_endevent1";>; <;omgdc:Bounds height=";35"; width=";35"; x=";590"; y=";220";>;<;/omgdc:Bounds>;<;/bpmndi:BPMNShape>;<;bpmndi:BPMNShape bpmnElement=";receivetask1"; id=";BPMNShape_receivetask1";>;<;omgdc:Bounds height=";55"; width=";105"; x=";160"; y=";210";>;<;/omgdc:Bounds>;<;/bpmndi:BPMNShape>;<;bpmndi:BPMNShape bpmnElement=";receivetask2"; id=";BPMNShape_receivetask2";>;<;omgdc:Bounds height=";55"; width=";105"; x=";340"; y=";210";>;<;/omgdc:Bounds>;<;/bpmndi:BPMNShape>;<;bpmndi:BPMNEdge bpmnElement=";flow1"; id=";BPMNEdge_flow1";>;<;omgdi:waypoint x=";111"; y=";235";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";160"; y=";237";>;<;/omgdi:waypoint>;<;/bpmndi:BPMNEdge>;<;bpmndi:BPMNEdge bpmnElement=";flow2"; id=";BPMNEdge_flow2";>;<;omgdi:waypoint x=";265"; y=";237";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";340"; y=";237";>;<;/omgdi:waypoint>;<;/bpmndi:BPMNEdge>;<;bpmndi:BPMNEdge bpmnElement=";flow3"; id=";BPMNEdge_flow3";>;<;omgdi:waypoint x=";445"; y=";237";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";590"; y=";237";>;<;/omgdi:waypoint>;<;/bpmndi:BPMNEdge>;<;bpmndi:BPMNEdge bpmnElement=";flow4"; id=";BPMNEdge_flow4";>;<;omgdi:waypoint x=";265"; y=";237";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";212"; y=";338";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";385"; y=";338";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";607"; y=";338";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";607"; y=";255";>;<;/omgdi:waypoint>;<;/bpmndi:BPMNEdge>;<;/bpmndi:BPMNPlane>;<;/bpmndi:BPMNDiagram>;<;/definitions>;代码实现如下:/**package com.easyway.workflow.activiti;import java.util.HashMap;/*** 银行工作人员开始查询用户余额的事件** @author longgangbai** 2011-12-17 上午09:37:50*/public class CheckBankAccountMoneyTask implements JavaDelegate {private final Logger log = Logger.getLogger(CheckBankAccountMoneyTask.class.getName());@SuppressWarnings(";unchecked";)@Overridepublic void execute(DelegateExecution execution) throws Exception { (";根据输入参数,开始检查银行账户余额........";);System.out.println(";in : "; + execution.getVariables());((HashMap<;String,Object>;)execution.getVariables().get(";in";)).put(";next";, ";CheckBankTask";);((HashMap<;String,Object>;)execution.getVariables().get(";out";)).put(";reponse";,";subprocess:CheckBankReceiveTask->;CheckMerchantReceiveTask";);}}package com.easyway.workflow.activiti;import java.util.HashMap;/**** 银行工作人员开始转账过程* @author longgangbai** 2011-12-17 下午09:39:14*/public class CheckMerchantMoneyTask implements JavaDelegate {private final Logger log = Logger.getLogger(CheckMerchantMoneyTask.class.getName());@SuppressWarnings(";unchecked";)@Overridepublic void execute(DelegateExecution execution) throws Exception { (";正在转账中.........";);System.out.println(";in : "; + execution.getVariables());((HashMap<;String,Object>;)execution.getVariables().get(";in";)).put(";previous";,";CheckMerchantReceiveTask";);}}package com.easyway.workflow.activiti;import junit.framework.TestCase;/*** 主要是在测试之前做一些初始化工作,主要包括流程引擎实例* 的构建,及其流程提供的基本服务。
工作流activiti介绍

Activiti6工作流1、Activiti工作流概述1.1、工作流概述工作流(Workflow),就是通过计算机对业务流程自动化执行管理。
它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。
在我们日常的工作中,每时每刻都在执行一个个的流程,我们可能是流程的发起人,也可能能是流程的中间人,甚至是最后终止一个流程的大boss,总体而言流程,即工作流就是为了团队协作而生,任何需要团队持续写作的场景都有必要用到工作流。
比如老生常谈的员工请假,发出请求,逐级上报,逐级审批。
在我们的项目中也是一样,很多项目都是存在业务流程。
1.2、工作流系统一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。
即使没有工作流业务系统也可以开发运行,只不过有了工作流可以更好的管理业务流程,提高系统的可扩展性。
常见的工作流有:请假流程、出差申请流程、出差申请流程项目研发流程1.3 工作流的实现没有用工作流之前我们是怎么做的?我们之前为了实现流程控制, 通常是通过状态(status)字段的值,来跟踪流程状态,但是不完美比如请假流程:员工申请-> 部门经理审批-> 人事存档我们要给status字段设置状态: 0 = 员工未提交; 1 = 员工已提交; 2= 部门经理拒绝审批; 3 = 部门经理同意审批; 最终人事查询status= 4也就是申请成功的请假单数据通过状态字段我们虽然可以实现流程的控制但是弊端也很明显: 当我们那不讲武德的产品经理说出“这个功能要改”的时候我们只能去改变代码比如: 在这个部门经理的后面在加一个总经理审批的功能, 则程序不能用了那么能不能做到流程业务变化后,程序可以不用变呢?使用工作流之后改善了我们哪些问题?Activiti能做到当需求变更时,代码不需要发生改变,只需要更新业务流程图即可.二、Activiti概述Activiti是一个工作流引擎,activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。
手把手教你如何玩转Activiti工作流

⼿把⼿教你如何玩转Activiti⼯作流⼿把⼿教你如何玩转Activiti⼯作流版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。
https:///Cs_hnu_scw/article/details/79059965⼀:Activiti的介绍场景:学校主⾓:阿⽑,班主任,教务处处长问题:有⼀天,阿⽑到学校,感觉到⾝体不舒服,然后想跟班主任请假,然后班主任告诉阿⽑说,你想请假,那么就必须要请假条,这个上⾯必须要我同意,然后再拿到教务处去盖章,然后交给我,这样才可以进⾏请假。
阿⽑,想着,怎么请个假都这么⿇烦,这么多层次处理问题,能不能简便⼀点。
好烦好烦~!!~~分析:从上⾯的⼩例⼦,我们可以很明显的得到⼀个结论,就是:请假流程:阿⽑------》提交申请-----》班主任审批-----》教务处审批-----》请假成功也就是说,这种问题就是⼀种流式的控制管理,当然,这是最简单的,因为⾥⾯没有包含着回馈,相当于只是⼀个⽅向。
其实,到这⾥,Activiti的定义就已经出来了。
Activiti定义:Activiti5是由Alfresco软件在2010年5⽉17⽇发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、⼯作流、服务协作等领域的⼀个开源的、灵活的、易扩展的可执⾏流程语⾔框架。
Activiti基于Apache许可的开源BPM平台,创始⼈Tom Baeyens是JBoss jBPM的项⽬架构师,它特⾊是提供了eclipse插件,开发⼈员可以通过插件直接绘画出业务流程图。
⼆:⽜⼑⼩试---------搭建第⼀个Activiti项⽬流程环境:IDEA(或者Eclipse,本⼈这⾥是⽤IDEA进⾏的)步骤:(1)第⼀步:IDEA安装Activiti插件⾸先,创建⼀个普通的Java⼯程即可,然后按照下⾯流程进⾏:1:点击菜单中的File(最左上⾓),选择settings2:33:然后点击右边的安装,等待⼀下就可以啦。
activiti工作流表结构

activiti工作流表结构Activiti是一个轻量级的工作流引擎,是一个基于 BPMN 2.0 标准的工作流引擎。
Activiti 采用了标准的 BPMN 2.0 规范,同时支持流程定义、流程实例、任务、网关、事件、监听器等基本元素,同时支持自定义元素。
Activiti 工作流引擎的表结构是其核心部分之一,本文将详细介绍 Activiti 工作流引擎的表结构。
一、Activiti 工作流引擎的表结构Activiti 工作流引擎的表结构包括以下几个方面:1. ACT_RE_*:RE 表示 repository,这些表包含了流程定义和流程静态数据,例如流程定义、流程定义的资源文件等。
2. ACT_RU_*:RU 表示 runtime,这些表包含了流程运行时的数据,例如流程实例、任务、变量等。
3. ACT_HI_*:HI 表示 history,这些表包含了流程历史数据,例如历史流程实例、历史任务、历史变量等。
4. ACT_ID_*:ID 表示 identity,这些表包含了 Activiti 工作流引擎的用户、组、角色等身份信息。
5. ACT_GE_*:GE 表示 general,这些表包含了 Activiti 工作流引擎的常规数据,例如数据库信息、属性等。
下面分别对这些表进行详细介绍。
二、ACT_RE_* 表1. ACT_RE_DEPLOYMENT该表用于存储流程部署信息,包括流程部署 ID、名称、部署时间等信息。
2. ACT_RE_PROCDEF该表用于存储流程定义信息,包括流程定义 ID、名称、KEY、版本号、部署 ID 等信息。
3. ACT_GE_BYTEARRAY该表用于存储 Activiti 工作流引擎中的字节数组信息,例如流程定义的 XML 文件、流程定义的 BPMN 图片等。
三、ACT_RU_* 表1. ACT_RU_EXECUTION该表用于存储流程实例信息,包括流程实例 ID、流程定义 ID、流程实例状态等信息。
Activiti工作流详解完整教程

Activiti教程详解完整教程1.A ctiviti介绍Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。
Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss JBPM的项目架构师,它的特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。
1.1工作流引擎ProcessEngine对象,这是Activiti工作的核心。
负责生成流程运行时的各种实例及数据,监控和管理流程的运行。
1.2BPMN业务流程建模与标注(Business Process Model and Notation,BPMN),描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)2.准备环境2.1Activiti软件环境1)JDK1.6或者更高版本2)支持的数据库有:h2,mysql,oracle,mysql,db2等3)支持Activiti运行的jar包,可以通过maven依赖引入4)开发环境为Eclipse3.7或者以上版本,myeclipse为8.6版本2.2安装流程设计器(eclipse插件)1)打开Help →Install New Software →Add输入Name: Activiti DesignerLocation: /designer/update/输入完成后,单击OK按钮等待下载完成后安装。
安装完成后在菜单选项中会出现Activiti的目录选项2.3 设置eclipse activit插件的画流程图选项打开菜单Windows --> Preferences --> Activiti -->Save 下流程图片的生成方式勾选上Create process definition image when saving the diagram操作,勾选上这个操作后在画流程图后保存eclipse会自动生成对应的流程图片。
工作流Activiti的学习总结(七)Activiti在线流程设计器

工作流Activiti的学习总结(七)Activiti在线流程设计器以下是为大家整理的工作流Activiti的学习总结(七)Activiti在线流程设计器的相关范文,本文关键词为工作流,Activiti,学习,总结,在线,流程设计,工作流,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。
工作流Activiti的学习总结(七)Activiti在线流程设计器人欲善其事,必先利其器。
这里安装activiti的在线流程设计器的安装。
jbpm4的开发成员tom离开了jboss后,加入afresco公司,并且才有activiti5的项目,这开源项目继承了jbpm4的所有优点,同时将其发扬光大,相对jbpm4,activiti5改进了储多我们国内开发人员关心的问题,如:流程代办在线流程设计器流程嵌入式部署流程独立部署动流程节点自由流程支持了bpmn2的标准支持规则引擎activiti5底层上的api跟jbpm4的api相似程序也达60%以上,特别是service提供的接口,都是在jbpm4上提供扩展,大大方便了jbpm4的开发人员,这也是tom的先明之处,毕竟jbpm原来打的品牌效应不可否认的,把原来的jbpm4积累的人气再次带至activiti5上,这也将是该项目能够断续前进的重要保障。
尽管activiti5目前发展趋势前途光明,但其也有不足的地方,其前端的的表现总是存在不足,如在线流程设计器,目前eclipse插件生成的bpmn20.xml文件则不行,而官方提供的activiti-modler设计器,扩展及实现均面临困难,并且对浏览器的要求让它在国内的项目实施总会面临技术难度。
在上述安装过程中,已经完成了部分相应的配置,例如lib文件等。
这时,可以在eclipse中导入c:\\mash_activiti-5.6\\workspace目录下的examples工程,学习这里实例。
activity工作流原理

activity工作流原理
Activity工作流原理
Activity工作流是一种特殊的业务流程,它可以帮助个人或企业管理
和执行复杂的业务流程。
Activity工作流原理主要是通过不同类型的
活动,以及在不同时间发生的事件来控制整个流程。
具体而言,Activity工作流通常由一系列有序的活动组成,每个活动
都需要完成某些特定的任务或功能。
每个活动都会将输入数据(例如
用户输入)映射到输出数据(例如生成的日志或文件)。
每种数据流
都有自己特定的属性,例如控制流结构、活动的有序性以及内部的冲
突解决等等。
在活动执行的过程中,系统可以监控和管理数据流,并
将其映射到所需的输出数据。
另外,Activity工作流还支持不同类型的事件,用于检测流程中活动
的变化,例如新建任务、流程完成、发布通知等等。
发生这些事件后,系统便会按照预先定义的规则对流程中的活动进行相应的处理,如跳
转到新任务,发布通知,终止任务等等。
最后,Activity工作流在用户操作的过程中可以确保流程的安全性,
即在任务发生变化之前用户必须先检查和确认。
总而言之,Activity工作流通过活动、事件和安全操作等内容来控制
整个流程,使得流程执行更加有序高效,从而达到优化业务流程的效果。
activiti工作流原理简单明了

Activiti是一款开源的工作流引擎,用于实现业务流程的自动化和管理。
其工作原理可以简单概括如下:
流程定义:在Activiti中,首先需要定义业务流程,通常使用BPMN(Business Process Model and Notation)标准进行建模。
流程定义包括各个步骤、任务、决策点等,以及它们之间的关系和顺序。
流程部署:将流程定义部署到Activiti引擎中,可以通过配置文件或编程方式进行部署。
部署后,流程定义会被解析为可执行的流程实例。
流程实例化:当需要启动一个新的业务流程时,根据流程定义创建流程实例。
流程实例是流程定义的一个具体实例,包含了流程中的各个步骤和任务。
任务分配:在流程中,任务会被分配给不同的参与者或角色。
Activiti可以根据预先定义的规则和条件来分配任务,也可以根据实时的数据和流程情况进行动态分配。
任务执行:参与者可以根据任务的要求和流程定义的指导执行任务,完成相关操作和提交必要的数据。
流程控制:流程中的控制流会根据预先定义的条件和规则进行控制,决定流程的走向。
例如,根据条件分支选择不同的路径,或根据某些条件触发并行任务等。
监控和管理:Activiti提供了监控和管理工具,可以跟踪和监控流程实例的状态、任务的执行情况,以及进行流程的调度和管理。
通过以上的工作流原理,Activiti实现了对业务流程的可视化、自动化和管理,帮助组织和企业提升效率、降低成本,并实现更好的业务控制和可追溯性。
activiti工作流使用手册

activiti工作流使用手册一、简介activiti是一个轻量级的Java开源工作流引擎,广泛应用于各类企业应用系统中。
本手册旨在为用户提供一份全面的activiti工作流使用指南,帮助用户快速上手并灵活应用activiti工作流。
二、安装与配置1. 下载activitiactiviti官网提供最新的稳定版本下载,在官网下载页面选择合适的版本,并解压到指定目录。
2. 导入activiti库在项目中导入activiti库,可以使用Maven或其他依赖管理工具,或者手动导入activiti相关的jar包。
3. 配置数据库activiti使用数据库来存储工作流相关的数据,需要配置数据库连接信息。
在项目的配置文件中,根据使用的数据库类型,配置相应的数据源。
4. 配置activiti核心引擎在项目的配置文件中,配置activiti核心引擎。
可以配置引擎的缓存设置、任务执行器等参数,以满足具体业务需求。
三、工作流定义1. 设计流程图使用activiti提供的流程图设计器,或者其他工具设计流程图。
流程图应包含各个环节、任务和流程流转条件。
2. 定义流程根据设计好的流程图,使用activiti提供的API编写Java代码来定义流程。
流程定义包括流程的启动、流程实例的创建、任务分配等。
四、工作流执行1. 启动流程使用activiti提供的API,启动流程实例。
根据流程定义的启动条件,可以设置流程实例的变量、业务参数等。
2. 处理任务根据流程的执行情况,系统将生成一系列待处理的任务。
使用activiti提供的API,查询并处理这些任务。
任务的处理包括任务的审批、任务的分派、任务的执行等。
3. 流程流转处理任务后,根据任务处理结果,流程会自动流转到下一个环节,或者根据设置的流转条件,执行流程中的分支和合并。
5. 监控流程在流程的执行过程中,可以使用activiti提供的监控工具,实时查看流程的执行情况,包括流程实例的状态、任务的处理情况、历史记录等。
Activiti工作流面试相关知识!

Activiti⼯作流⾯试相关知识!1:什么是⼯作流,⼯作流的核⼼对象是什么,activiti共操作数据库多少张表* ⼯作流就是多个参与者,按照某种预定义的规则,传递业务信息,进⾏审核的功能⼀个框架(Activiti)* processEngine,调⽤Service,从⽽操作数据库的表* 23表2:⼯作流中RepositoryService、RuntimeService、TaskService、HistoryService分别表⽰什么操作RepositoryService:流程定义和部署对象RuntimeService:执⾏管理,包括流程实例和执⾏对象(正在执⾏)TaskService:执⾏任务相关的(正在执⾏)HistoryService:历史管理IdentityService:Activiti表的⽤户⾓⾊组3:流程实例和执⾏对象的区别* 流程从开始到结束的最⼤分⽀,⼀个流程中,流程实例只有1个* 执⾏对象,就是按照流程定义的规则执⾏⼀次的操作,⼀个流程中,执⾏对象可以有多个4:流程变量在项⽬中的作⽤* 1:⽤来传递业务参数,⽬的就是审核⼈可以通过流程变量查看申请⼈的⼀些审核信息2:在连线的condition中设置流程变量,⽤来指定应该执⾏的连线${message=='重要'}3:使⽤流程变量指定个⼈任务和组任务的办理⼈#{userID}5:activiti⼯作流中,如果⼀个任务完成后,存在多条连线,应该如何处理?* 使⽤流程变量* 当⼀个任务完成之后,根据这⼏条连线的条件和设置流程变量,例如${流程变量的名称=='流程变量的值'},{}符号是boolean类型,判断⾛哪条连线6:activiti⼯作流中,排他⽹关和并⾏⽹关都能执⾏什么功能排他⽹关:分⽀,通过连线的流程变量,判断执⾏哪条连线,如果条件不符合,会执⾏默认的连线离开,注意:只能执⾏其中的⼀个流程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
根据activiti官方提供的编写1.财务部门填写月财务报告2.股东审核月财务审计报告流程图:流程配置:<;?xml version=";1.0"; encoding=";UTF-8";?>;<;definitions xmlns=";/spec/BPMN/20100524/MODEL"; xmlns:xsi=";/2001/XMLSchema-instance";xmlns:activiti=";/bpmn";xmlns:bpmndi=";/spec/BPMN/20100524/DI";xmlns:omgdc=";/spec/DD/20100524/DC";xmlns:omgdi=";/spec/DD/20100524/DI";typeLanguage=";/2001/XMLSchema";expressionLanguage=";/1999/XPath";targetNamespace=";/bpmn20";>;<;process id=";financialReport"; name=";Monthly financial report reminder process";>;<;startEvent id=";startevent1"; name=";月财务报告审核开始";>;<;/startEvent>; <;!-- 采用用户组为accountancy编写财务报告 -->;<;userTask id=";usertask1"; name=";财务编写月财务报告"; activiti:candidateGroups=";accountancy";>;<;/userTask>;<;userTask id=";usertask2"; name=";股东审核月财务审计报告"; activiti:candidateGroups=";management";>;<;/userTask>;<;endEvent id=";endevent1"; name=";月财务报告审核结束";>;<;/endEvent>;<;sequenceFlow id=";flow1"; name=";"; sourceRef=";startevent1"; targetRef=";usertask1";>;<;/sequenceFlow>;<;sequenceFlow id=";flow2"; name=";"; sourceRef=";usertask1"; targetRef=";usertask2";>;<;/sequenceFlow>;<;sequenceFlow id=";flow3"; name=";"; sourceRef=";usertask2"; targetRef=";endevent1";>;<;/sequenceFlow>;<;/process>;<;bpmndi:BPMNDiagram id=";BPMNDiagram_financialReport";>;<;bpmndi:BPMNPlane bpmnElement=";financialReport"; id=";BPMNPlane_financialReport";>;<;bpmndi:BPMNShape bpmnElement=";startevent1"; id=";BPMNShape_startevent1";>;<;omgdc:Bounds height=";35"; width=";35"; x=";30"; y=";200";>;<;/omgdc:Bounds>;<;/bpmndi:BPMNShape>;<;bpmndi:BPMNShape bpmnElement=";usertask1"; id=";BPMNShape_usertask1";>;<;omgdc:Bounds height=";55"; width=";105"; x=";125"; y=";190";>;<;/omgdc:Bounds>;<;/bpmndi:BPMNShape>;<;bpmndi:BPMNShape bpmnElement=";usertask2"; id=";BPMNShape_usertask2";>; <;omgdc:Bounds height=";55"; width=";105"; x=";290"; y=";190";>;<;/omgdc:Bounds>;<;/bpmndi:BPMNShape>;<;bpmndi:BPMNShape bpmnElement=";endevent1"; id=";BPMNShape_endevent1";>; <;omgdc:Bounds height=";35"; width=";35"; x=";455"; y=";200";>;<;/omgdc:Bounds>;<;/bpmndi:BPMNShape>;<;bpmndi:BPMNEdge bpmnElement=";flow1"; id=";BPMNEdge_flow1";>;<;omgdi:waypoint x=";65"; y=";217";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";125"; y=";217";>;<;/omgdi:waypoint>;<;/bpmndi:BPMNEdge>;<;bpmndi:BPMNEdge bpmnElement=";flow2"; id=";BPMNEdge_flow2";>;<;omgdi:waypoint x=";230"; y=";217";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";290"; y=";217";>;<;/omgdi:waypoint>;<;/bpmndi:BPMNEdge>;<;bpmndi:BPMNEdge bpmnElement=";flow3"; id=";BPMNEdge_flow3";>;<;omgdi:waypoint x=";395"; y=";217";>;<;/omgdi:waypoint>;<;omgdi:waypoint x=";455"; y=";217";>;<;/omgdi:waypoint>;<;/bpmndi:BPMNEdge>;<;/bpmndi:BPMNPlane>;<;/bpmndi:BPMNDiagram>;<;/definitions>;编码如下:package com.easyway.spring.activiti;import java.util.List;import org.activiti.engine.HistoryService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.RepositoryService;import org.activiti.engine.RuntimeService;import org.activiti.engine.TaskService;import org.activiti.engine.history.HistoricProcessInstance;import org.activiti.engine.task.Task;/*** 根据activiti官方提供的编写* 1.财务部门填写月财务报告* 2.股东审核月财务审计报告*** activiti提供的财务报告审核* <;!-- 采用用户组为accountancy编写财务报告 -->;* <;userTask id=";usertask1"; name=";财务编写月财务报告"; activiti:candidateGroups=";accountancy";>;<;/userTask>;* <;!-- 采用用户组为management编写财务报告 -->;* <;userTask id=";usertask2"; name=";股东审核月财务审计报告"; activiti:candidateGroups=";management";>;<;/userTask>;** 备注:* 默认的两个用户:* <;pre>;* 用户名密码用户组Table 2.1. The demo usersUserId Password Security roleskermit kermit admingonzo gonzo managerfozzie fozzie user* <;/pre>;** @author longgangbai** 2011-12-18 下午04:08:46*/public class CustomFinancialReportActiviti {public static void main(String[] args) {// Create Activiti process engine//创建一个流程引擎对象// ProcessEngine processEngine = ProcessEngineConfiguration// .createStandaloneProcessEngineConfiguration()// .buildProcessEngine();//创建一个流程引擎对象(为了便于多册测试,修改name=";databaseSchemaUpdate"; value=";create-drop"; 默认为ture) ProcessEngineprocessEngine=ProcessEngineConfiguration.createProcessEngineConfigurationFromRes ource(";activiti.cfg.xml";).buildProcessEngine();// Get Activiti services//获取流程相关的服务RepositoryService repositoryService =processEngine.getRepositoryService();RuntimeService runtimeService = processEngine.getRuntimeService();// Deploy the process definition//部署相关的流程配置repositoryService.createDeployment().addClasspathResource(";diagrams/financialReport.bpmn20.xml";) .deploy();// Start a process instance//获取流程实例String procId = runtimeService.startProcessInstanceByKey(";financialReport";).getId();// Get the first taskTaskService taskService = processEngine.getTaskService();//获取accountancy组可能要操作的任务List<;Task>; tasks = taskService.createTaskQuery().taskCandidateGroup(";accountancy";).list();for (Task task : tasks) {System.out.println(";Following task is available for accountancy group: "; + task.getName());//设置fozzie代办 claim ittaskService.claim(task.getId(), ";fozzie";);}// Verify Fozzie can now retrieve the task//审核fozzie当前的获取的任务数量tasks = taskService.createTaskQuery().taskAssignee(";fozzie";).list();for (Task task : tasks) {System.out.println(";Task for fozzie: "; + task.getName());// Complete the task//设置forzze完毕plete(task.getId());}System.out.println(";Number of tasks for fozzie: ";+taskService.createTaskQuery().taskAssignee(";fozzie";).count());// Retrieve and claim the second task//管理者审核报告并让kermit代办tasks = taskService.createTaskQuery().taskCandidateGroup(";management";).list();for (Task task : tasks) {System.out.println(";Following task is available for accountancy group: "; + task.getName());taskService.claim(task.getId(), ";kermit";);}// Completing the second task ends the process//完成报告for (Task task : tasks) {plete(task.getId());}// verify that the process is actually finished//查询流程实例完成事件HistoryService historyService = processEngine.getHistoryService();HistoricProcessInstance historicProcessInstance =historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).si ngleResult();System.out.println(";Process instance end time: "; + historicProcessInstance.getEndTime());}}运行结果如下:信息: ProcessEngine default created2011-12-18 17:06:00 org.activiti.engine.impl.jobexecutor.JobAcquisitionThread run 信息: JobAcquisitionThread starting to acquire jobs2011-12-18 17:06:00 org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deploy 信息: Processing resource diagrams/financialReport.bpmn20.xml2011-12-18 17:06:01 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes信息: XMLSchema currently not supported as typeLanguage2011-12-18 17:06:01 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes信息: XPath currently not supported as expressionLanguageFollowing task is available for accountancy group: 财务编写月财务报告Task for fozzie: 财务编写月财务报告Number of tasks for fozzie: 0Following task is available for accountancy group: 股东审核月财务审计报告Process instance end time: Sun Dec 18 17:06:01 CST 2011。