一、什么是工作流
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流规则进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。
工作流管理联盟(WfMC,Workflow Management Coalition)给出的关于工作流管理系统的定义是:工作流管理系统是一个软件系统,它通过执行经过计算的流程定义去支持一批专门设定的业务流程。工作流管理系统被用来定义、管理、和执行工作流程。
工作流管理系统的目标:管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预。
通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是工作流。
常用框架
Activiti、JBPM、Shark、OSWorkfolw、ActiveBPEL、YAWL
二、Activiti介绍
Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。基于Apache许可的开源BPM平台。
Java语言编写,对java支持非常好,可以快速上手。
提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程
稳定的BPMN2.0流程引擎
三、什么是BPMN
首先BPMN规范是由标准组织BPMI发布的.BPMN 1.0规范发布于2004年5月。此规范展示了BPMI组织两年多的努力成果。BPMN的主要目标就是要提供被所有业务用户理解的一套标记语言,包括业务分析者、软件开发者以及业务管理者与监察者。BPMN还将支持生成可执行的BPEL4WS语言。所以,BPMN在业务流程设计与流程实现之间搭建了一条标准化的桥梁。
BPMN定义了业务流程图,其基于流程图技术,同时为创建业务流程操作的图形化模型进行了裁减。业务流程的模型就是图形化对象的网图,包括活动(也可以说工作)和定义操作顺序的流控制。
将流程图转化为计算机能识别的一种标记语言。
BPMN的元素分类
流对象(Flow Objects)
流对象是定义业务流程的主要图形元素。它进一步细分为三个类别,分别是事件(Events)、活动(Activities)和网关(Gateways);
事件(Events):流程的创建、流转、结束等都需要事件支持,例如在流程文档绘制阶段、定义开始事件、结束事件是一个必不可少的环节。可通过事件机制为工作流系统增加辅助功能。
活动(Activities):有生命周期的元素或者节点都可以称之为‘活动’,例如:任务节点,子流程、引用流程等,活动节点可以作为任何连线元素的源头或者目标。
网关(Gateways):所谓网关就是用来辅助决定流程实例最终流转的目的地,可以用来并行执行节点、也可以作为聚合或者条件分支使用,常用的网关类型有排他网关、兼容网关三种。
数据(Data)
数据对象(Data Object)、
数据输入(Data Inputs)、
数据输出(Data Outputs)
数据存储(Data Stores);
连接对象(Connection Ojbects)
用来把各个流对象或流对象与其他信息连接起来,它分为四种类别:顺序流(Sequence Flows)、消息流(Message Flows)、关联(Associations)和数据关联(Data Associations);
泳道(Swimlanes)
用来区分不同部门或者不同参与者的功能和职责。Swimlanes包含两种类别:池(Pool)和道(Lane);
人工交付物(Artifacts)
它用以给流程附加一些额外的信息,它分为两种类别:组(Group)和附注(Text Annotation)。
四、安装与运行Activiti
1、activiti软件环境
1) JDK1.7或者更高版本
2) 支持的数据库有:h2,mysql,oracle,db2等
3) 支持activiti运行的jar包,可以通过maven依赖引入
4) 开发环境为Eclipse3.7或者以上版本,myeclipse为8.6版本
2、安装流程设计器(eclipse插件)
1)打开Help àInstall New Software àAdd
输入 Name: Activiti Designer
Location: http://activiti.org/designer/update/
输入完成后,单击OK按钮等待下载完成后安装。
安装完成后在菜单选项中会出现activiti的目录选项
3、activiti下载
github地址:https://github.com/Activiti/Activiti
由于activiti官网常年无法打开,所以如果要下载activiti,只能去github上下载
源码下载
发行版下载
4、运行官方例子
第一步
解压activiti发行版后,看到的目录如下:
1) database:里面存放的是Activiti使用到的数据库信息的sql文件,它支持的数据库类型如下图,使用时只需执行你自己的数据库类型的文件即可。如:你的数据库是mysql,那么就执行activiti.mysql.create.*.sql即可。
2) docs:毫无疑问,api文档是也。
3) libs:使用Activiti所需要的所有的jar包和源文件。
4) wars:官方给我们提供的示例Demo,通过使用Demo可以更加快速的了解Activiti。
第二步
通过运行你下载的包里的wars文件夹里的所有.war文件,以便更快的了解Activiti。将文件拷贝至Tomcat的webapps目录,启动tomcat,输入http://localhost:8080/activiti-app/。
注意:登陆Activiti的用户名和密码都是admin test
这里需要说明的就是,这个Demo默认采用的是h2内存数据库,启动的时候开始创建数据库,关闭的时候清除数据。所以每次重启,数据都会清空
官方案例使用
1.登陆管理员账号
http://localhost:8080/activiti-app/ admin test
2. 创建普通用户和经理用户
进入Identity ManageMent --> Users -- > create User
3.创建流程
进入 kickstart APP -> Processes -- > Create Proesss --> Assignment(userTask中填写任务人)
4.创建项目,将流程放入项目中
进入 kickstart APP -> Apps-- > Create App -- > 填写AppName与AppKey -- >
Edit included models --> publish
5.切换到jiangbang用户,进入 OA-->Processes -- > start a processes -- > start process
此时已经发起了请假流程,点击Show diagram可以看到流程进度
声明接受这个任务 claim---> 完成任务 :complete
6.切换经理账号,按照5步骤完成任务,此时任务列表清空了,要看任务历史记录,需要去后台项目中观看。
后台项目地址:http://localhost:8080/activiti-admin/ admin admin
后台项目修改端口为8080
五、服务API介绍
ProcessEngine:在Activiti中最核心的类,其他的类都是由他而来,定义了各种服务类实例对象方法
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
RepositoryService : 仓库存储服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片该service可以用来删除部署的流程定义。
RepositoryService repositoryService = engine.getRepositoryService();
RuntimeService : 流程执行服务类(运行时服务,可以从这个服务类中获取很多关于流程执行的相关的信息。)
RuntimeService runtimeService = engine.getRuntimeService();
TaskService :任务服务类。提供一系列流程任务的方法,例如:任务的完成、挂起、激活、添加处理人、认领、删除等操作。
TaskService taskService = engine.getTaskService();
IdentityService :用户服务类。 提供一系列操作用户或者用户组的方法。
IdentityService identityService = engine.getIdentityService();
HistoryService : 提供一系列查询历史流程实例、历史变量、历史任务的方法。
HistoryService historyService = engine.getHistoryService();
ManagementService : 提供查询数据库中的数据、表的元数据以及执行命令等方法。
ManagementService managementService = engine.getManagementService();
FormService : 提供一系列操作流程表单的方法
FormService formService = engine.getFormService();
ProcessInstance:流程定义的执行实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是它的流程任务可以有多个,每个任务对应流程图中相应的流程节点。
ProcessDefinition:流程定义类,可以从这里获得资源文件等。
六、数据库介绍
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
表结构操作:
3.1:资源库流程规则表
1) act_re_deployment 部署信息表
2) act_re_model 流程设计模型部署表
3) act_re_procdef 流程定义数据表
3.2:运行时数据库表
1) act_ru_execution 运行时流程执行实例表
2) act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
3) act_ru_task 运行时任务节点表
4) act_ru_variable 运行时流程变量数据表
3.3:历史数据库表
1) act_hi_actinst 历史节点表
2) act_hi_attachment 历史附件表
3) act_hi_comment 历史意见表
4) act_hi_identitylink 历史流程人员表
5) act_hi_detail 历史详情表,提供历史变量的查询
6) act_hi_procinst 历史流程实例表
7) act_hi_taskinst 历史任务实例表
8) act_hi_varinst 历史变量表
3.4:组织机构表
1) act_id_group 用户组信息表
2) act_id_info 用户扩展信息表
3) act_id_membership 用户与用户组对应信息表
4) act_id_user 用户信息表
这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足
3.5:通用数据表
act_ge_bytearray 二进制数据表(一个存储xml,一个存储图片)
act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
来源:oschina
链接:https://my.oschina.net/u/2445551/blog/3078144