activiti小结
前提:业务流程复杂且流程频繁变更的,建议使用工作流;其他情况不建议使用。
activiti(v5.14),工作流引擎,基于jbpm。使用建模语言BPMN2.0进行定义。
工作流数据需要写入数据库,activiti(v5.14)支持的数据库有:db2、h2、mssql、mysql、oracle、postgres。
需要说明的是,activiti(v5.14)底层调用MyBatis来操作数据库。
activiti自带创建数据库表的SQL文件,执行即可。或者XML中设置通过创建ProcessEngine对象时检测有无activiti的表,如果没有则创建。(true)
--ge通用表,存储上传的图片及BPMN文件等。
--history历史表,流程执行过程的历史数据。
--id用户身份表,存储用户信息、组信息、用户和组的关系。
--re资源表,存储流程定义的信息、部署流程的信息。
--ru表,存储当前正在执行的流程相关信息,当前执行任务、流程变量等。
XML中需要配置数据源DataSource和ProcessEngineConfiguration。
使用步骤:
ProcessEngineConfiguration(加载xml)
--> ProcessEngine(单例管理!!!)
--> Activiti_Service(多个不同的service:RepositoryService,TaskService,IdentityService,FormService,RuntimeService,ManagementService,HistoryService)
概念①:流程定义、流程实例、任务、流程变量。
对比Java语言来说,流程定义就是类,流程实例就是类的实例化对象,任务则是类中的方法,流程变量则是方法的形参。
【】略微不同的是,流程中的任务是有顺序的,而类中的方法则可以随意调用。
所以可以存在多个流程定义(比如同时存在报销流程、采购流程等),每个流程定义又可以存在多个流程实例(多人同时报销,多人同时采购等)。
每个流程实例的任务列表(步骤)虽然一致,但进度彼此无关(例如甲刚申请报销,乙已经审核完毕等)。
同样的,每个流程实例的流程变量也彼此无关(例如报销金额)。
概念②:工作流引擎、各个Service。
activiti的核心就是流程引擎ProcessEngine。系统通过ProcessEngineConfiguration加载配置文件,并生成ProcessEngine,再通过ProcessEngine调用各个service。
如下图所示:

RepositoryService:资源Service,用于部署流程定义。
RuntimeService:运行Service,用于开启流程实例。
TaskService:任务Service,用于处理任务相关操作:完成任务等。
ManagementService:管理Service,用于(暂缺)。
IdentityService:身份Service,用于处理用户、用户组、用户和用户组的关系。
HistoryService:历史Service,用于查看历史记录。
FormService:自定义表单Service,用于处理自定义的表单数据。
流程变量通过Map对象存入,可以是基本类型,也可以是pojo(需要实现Serializable接口)。Map对象的Key就是流程变量的Key。
用法,UEl表达式:${ key > 5000 || key < 2000}
在工作流操作的表如报销单表中添加一个流程实例字段,使用该字段访问流程。
任务有任务人、候选人、候选组。 候选人/组,都可以有多个,以逗号分开。
建议候选组,这样就是组任务。用户只要隶属于用户组即可。
组用户查询组(待办)任务、拾取组(待办)任务-->个人待办任务、完成个人待办任务。
查询过程:创建查询、添加查询信息、查询、处理查询结果。
组任务和个人任务可以同时存在。
【】【】activiti没对拾取组任务的用户做限制,任何人都可以拾取。所以需要手动校验后再拾取!!!
通过IdentityService添加/删除用户组、用户、关系。
identityService.saveUser(user);
identityService.saveGroup(group);
identityService.deleteMembership(user, group); //
identityService.createMembership(user, group); //
小知识:
排他网关
实现流程分支,也叫异或(XOR)网关。
经过它的流程分支,只会有一条执行。如果分支条件都不满足,就会抛出异常,但流程并没有异常结束。
如果不使用排他网关,遇到分支都不符合条件的时候,流程会异常结束。【】【】
activiti小结的更多相关文章
- Activiti 使用小结
自定义表单类型 使用动态表单,需要定义表单的字段以及属性,在WEB流程设计器中没有Default字段(Eclipse中有),给设计带来了一定的困难,下面介绍如何在WEB流程设计器中扩展表单. 首先在s ...
- 工作流学习——Activiti整体认识二步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46594505 ***************************************** ...
- activiti搭建(三)整合Modeler
转载请注明源地址:http://www.cnblogs.com/lighten/p/5878169.html 接上一章,activiti工作流引擎虽然运行了起来,但是什么都没有.activiti官方在 ...
- 工作流activiti-01个人小结
最近公司需要开发工作流 使用的是activiti 个人拿着官方的User Guide 摸索了好几天 现做个小结: 对公司的小型OA开发一般用到如下几点: 1.依据客户业务得到业务流程图 可以是xm ...
- activiti uuid主键
1.1.1. activiti默认主键生成方式 ; 下面我们看一下主键的生成策略:主键的生成策略定义在IdGenerator接口中,接口定义如下所示: public interface IdGene ...
- activiti监听器使用
分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业 ...
- activiti节点跳转
分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业 ...
- j2ee课程设计—基于activiti的请休假系统
前言 课设基于SSM框架,数据库采用mysql,主要业务交给activiti,版本控制利用github. 参考资料: Intellij 部署SSM框架 Activiti就是这么简单 方大师的教材 下文 ...
- 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载
<疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...
随机推荐
- libiconv字符集转换库在C#中的使用
<libiconv字符集转换库用法>一文中说到了libiconv能够实现不同字符集的转换. 比方GBK转BIG5等.在项目中由于须要,找到这个库.但是这个库在C#中没有非常好的支持.只是, ...
- Js 常用函数【持续更新】
Js Math对象方法介绍:http://www.w3school.com.cn/jsref/jsref_obj_math.asp 1. 算数函数(Math) 1)Js小数取整 常用于:分页算法 js ...
- mysql-5.7 saving and restore buffer pool state 详解
一.mysql 重启要面临的问题: 由于重启后之前innodb buffer pool中缓存的数据就都没有了,如果这个时候业务SQL来临,mysql就只能是从磁盘中 读取数据到内存:可能要经过数个小时 ...
- 工作中常用的mysql操作
一.在一个数据库中定义的存储过程或者是函数在另一数据库的存储过程中引用 1.我首先在数据库player_db中构建了一个函数:p_exp_to_level BEGIN ; ; RETURN v_lev ...
- 甲骨文关闭OpenSSO后,OpenAM成为其继续者
消息来源:http://os.51cto.com/art/201003/190108.htm OpenAM主页连接: ht ...
- html5中script的async属性
html5中script的async属性 我兴奋于html5的原因之一是一些久久未能实现的特性现在可以真正运用于实际项目中了. 如我们使用placeholder效果蛮久了但是那需要javascript ...
- CSDN日报20170403 ——《该不该离职?它说了算!》
[程序人生]该不该离职?它说了算! 作者:安晓辉 我在加油站工作,月薪扣除五险一金2000多.工作时间长,上班48小时歇息8小时. 今年单位改革把我们都外包出去了,承包人对我各种苛刻要求.有心辞职去干 ...
- jQuery 复选框全选/取消全选/反选
jQuery实现的复选框全选/取消全选/反选及获得选择的值. 完整代码: <!DOCTYPE html> <html> <head> <script type ...
- 在FPGA中使用for循环一定浪费资源吗?
渐渐地,发现自己已经习惯于发现细节,喜欢打破常规,真的非常喜欢这种feel. 相信很多人在书上或者博文上都有提出“在FPGA中使用for语句是很占用资源的”的观点,特权同学也不例外.那么,这种观点正确 ...
- [svc][op]vim自动添加注释
我想了下,要做好一件事, 1,首先喜欢它最才有动机去了解它 2,道听途说about那东西的,会去了解并去玩转 3,兴趣需要培养 一 添加vim头部信息. 系统:C67 追加以下代码到 /etc/vim ...