工作流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,再输⼊⼀遍这个命令即可。
- 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。