前提:业务流程复杂且流程频繁变更的,建议使用工作流;其他情况不建议使用。

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(v5.14)中文手册

activiti小结的更多相关文章

  1. Activiti 使用小结

    自定义表单类型 使用动态表单,需要定义表单的字段以及属性,在WEB流程设计器中没有Default字段(Eclipse中有),给设计带来了一定的困难,下面介绍如何在WEB流程设计器中扩展表单. 首先在s ...

  2. 工作流学习——Activiti整体认识二步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46594505 ***************************************** ...

  3. activiti搭建(三)整合Modeler

    转载请注明源地址:http://www.cnblogs.com/lighten/p/5878169.html 接上一章,activiti工作流引擎虽然运行了起来,但是什么都没有.activiti官方在 ...

  4. 工作流activiti-01个人小结

    最近公司需要开发工作流 使用的是activiti  个人拿着官方的User Guide 摸索了好几天 现做个小结: 对公司的小型OA开发一般用到如下几点: 1.依据客户业务得到业务流程图  可以是xm ...

  5. activiti uuid主键

    1.1.1.  activiti默认主键生成方式 ; 下面我们看一下主键的生成策略:主键的生成策略定义在IdGenerator接口中,接口定义如下所示: public interface IdGene ...

  6. activiti监听器使用

    分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业 ...

  7. activiti节点跳转

    分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业 ...

  8. j2ee课程设计—基于activiti的请休假系统

    前言 课设基于SSM框架,数据库采用mysql,主要业务交给activiti,版本控制利用github. 参考资料: Intellij 部署SSM框架 Activiti就是这么简单 方大师的教材 下文 ...

  9. 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载

    <疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...

随机推荐

  1. 超低压差LDO XC6206P332MR

    XC6206:It is selectable in 0.1V increments within a range of 1.2V to 5.0V. 可实现压差为0.1V的降压,最大输出电流200毫安 ...

  2. js 与 php 时间戳的区别(毫秒与秒的计算方式)

    js是以毫秒为单位计算的,php是以秒为单位计算的,所以转换时记得*/1000 //距离时间的时间戳 var suoshengshijian = <?php echo $expire_time_ ...

  3. 使用R语言分析股价波动

    今天看的R语言.做个笔记. 使用R语言读取雅虎財经数据.分析微软公司(股票代码:MSFT)在2015年股价波动超过百分之十的日期. 然后通过检索新闻的方式,看看微软当天有什么新闻发生,导致股价波动. ...

  4. JVM 发生OOM的四种情况

    1.Java堆溢出:heap Java堆内存主要用来存放运行过程中所以的对象,该区域OOM异常一般会有如下错误信息;java.lang.OutofMemoryError:Javaheap space此 ...

  5. 《解读window核心编程》 之 字符和字符串处理方式

    推荐的字符和字符串处理方式 開始将文本字符串想象为字符的数组,而不是 char 或字节的数组. 用通用数据类型(如 TCHAR/PTSTR )来表示文本字符和字符串. 用明白的数据类型(如 BYTE  ...

  6. http请求头中的Content-Type属性在angular 和 node中的用法

    post请求的请求体有以下两种格式: 1. 字符串: 'name=code_bunny&age=12' 这种格式的请求体,需要配置请求头 'Content-Type':'application ...

  7. 每日英语:Mooncake Austerity Hits China's Mid-Autumn Festival

    First baijiu, then red carpets, and now mooncakes. For Chinese government officials, the list of tab ...

  8. .net 中异步SOCKET发送数据时碰到的内存问题

    做CS的开发一直都是这样的方式: server端用 C++编写,采用IOCP机制处理大量客户端连接.数据接收发送的问题 client端用 C++ 或C# 写,没什么特殊要求. 最近工作时间上比较宽裕, ...

  9. echarts实现动态传入数据刷新【可执行】

    <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...

  10. Qt学习之路3---Qt中的坐标系统

    -Qt使用统一的坐标系统定位窗口部件和位置大小 -Qt部件类提供成员函数在坐标系统中进行定位 -QWidget类提供了窗口部件所需的坐标系统成员函数 代码测试 #include "widge ...