activiti学习文档.doc_第1页
activiti学习文档.doc_第2页
activiti学习文档.doc_第3页
activiti学习文档.doc_第4页
activiti学习文档.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、工作流工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。简单的说,就是做事的流程,一个流程中有多个环节,每个环节都有特定的人来进行审核和办理。工作流管理系统:工作流管理系统顾名思义就是管理工作流的一个系统。一个流程有了,要想按照这种预定义的流程自动进行就需要将流程通过工作流管理系统管理起来。工作流管理系统是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流规则进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。二、Activiti工作流管理系统Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。2.1、工作流引擎(ProcessEngine)ProcessEngine是activiti工作的核心,负责生成流程运行时的各种实例及数据、监控和管理流程的运行。2.2、核心配置文件(activiti.cfg.xml)activiti.cfg.xml作为Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数。简单的说就是,通过配置文件配置工作流引擎生成工具参数获取想要的工作流引擎,通过工作流引擎获取各种操作对象。2.3、数据库表Activiti的后台是有数据库的支持,一共23张表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。1) ACT_RE_*: RE表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。2) ACT_RU_*: RU表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。3) ACT_ID_*: ID表示identity。 这些表包含身份信息,比如用户,组等等。4) ACT_HI_*: HI表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。5) ACT_GE_*: 通用数据, 用于不同场景下。2.3.1资源库流程规则表1) act_re_deployment 部署信息表2) act_re_model 流程设计模型部署表3) act_re_procdef 流程定义数据表2.3.2运行时数据库表1) act_ru_execution运行时流程执行实例表2) act_ru_identitylink运行时流程人员表,主要存储任务节点与参与者的相关信息3) act_ru_task运行时任务节点表4) act_ru_variable运行时流程变量数据表2.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历史变量表2.3.4组织机构表1) act_id_group用户组信息表 JBPM_ID_MEMBERSHIP 2) act_id_info用户扩展信息表3) act_id_membership用户与用户组对应信息表4) act_id_user用户信息表这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足 2.3.5通用数据表1) act_ge_bytearray二进制数据表act_ge_property属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,2.4核心API流程引擎(ProcessEngine)在Activiti中最核心的类,其他的类都是由他而来。产生方式:ProcessEngines的getDefaultProceeEngine方法时会自动加载classpath下名为activiti.cfg.xml文件。可以产生RepositoryService可以产生RuntimeService可以产生TaskServiceRepositoryService管理流程定义RuntimeService执行管理,包括启动、推进、删除流程实例等操作TaskService任务管理HistoryService历史管理(执行完的数据的管理)IdentityService组织机构管理FormService一个可选服务,任务表单管理各个Service的作用:三、activiti开发环境准备Activiti特色是提供了Eclipse插件,开发人员可以通过插件直接绘画出业务流程图。流程设计器按照方法:3.1、在线安装步骤如下:打开Help - Install New Software. 在如下面板中:1) 在如下Install界面板中,点击Add按钮:配置新装插件的地址和名称2) 然后填入下列字段Name: Activiti BPMN 2.0 designerLocation: /designer/update/如图所示:3) 回到Install界面,在面板正中列表中把所有展示出来的项目都勾上:4) 点击复选框在Detail部分记得选中 Contact all updates sites. , 因为它会检查所有当前安装所需要的插件并可以被Eclipse下载.5) 安装完以后,点击新建工程new-Other打开面板,如果看到下图内容:说明安装成功了。3.2、离线安装步骤如下:1. 解压2. 把压缩包中的内容放入eclipse根目录的dropins文件夹下3. 重启eclipse,点击新建工程new-Other打开面板,如果看到下图内容:说明安装成功。3.3、对流程设计器的使用说明打开菜单Windows-Preferences-Activiti-Save下流程流程图片的生成方式:虽然流程引擎在单独部署bpmn文件时会自动生成图片,但在实际开发过程中,自动生成的图片会导致和BPMN中的坐标有出入,在实际项目中展示流程当前位置图会有问题。所在完成以上配置后,会由我们自己来管理流程图片。在发布流程时把流程规则文件和流程图片一起上传就行了。3.4、BPMN2.0业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)常用的流程符号:如上图中的空白区为流程设计区域,流程设计就是将工具区的元素放到设计区形成流程图并可以给流程里的元素在配置区里配置一些属性。1、事件:l 空开始事件描述:空开始事件技术上意味着没有指定启动流程实例的触发条件,而是利用API通过调用startProcessInstanceByXXX方法启动流程。ProcessInstance processInstance = runtimeService.startProcessInstanceByXXX();图标:工具区符号:流程图图标:xml:l 空结束事件描述:引擎会直接结束当前执行的分支,不会做其他事情。图标:工具区符号:流程图图标:Xml:2、 顺序流:,流程图中效果图如下:描述:顺序流是连接两个流程节点的连线。 流程执行完一个节点后,会沿着节点的所有外出顺序流继续执行。 就是说,BPMN 2.0默认的行为就是并发的: 两个外出顺序流会创造两个单独的,并发流程分支。图标:工具区符号:流程图图标:xml:3、用户任务描述:用户任务用来设置必须由人员完成的工作。 当流程执行到用户任务,会创建一个新任务, 并把这个新任务加入到分配人或群组的任务列表中。图标:工具区符号:流程图图标:Xml:4、网关网关用来控制流程的流向。图标是一个菱形,菱形里面的小图标决定了网关的类型。 l 排他网关(异或网关)描述:流程执行到此网关,所有外出顺序流都被处理一遍,处理结果为true的会被选中,流程会按照此顺序流继续运行。注意:排他网关处理多个外出顺序流时其结果可能会有多个为true,但是只有第一个会被选中。图标:如下都表示一个排他网关xml: $input = 1 $input = 2 $input = 3l 并行网关描述:并行网关是最简单的网关,主要作用是分支和聚合分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。汇聚: 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后,流程就会通过汇聚网关。图标:xml:l 包含网关描述:包含网关是排他网关和并行网关的功能结合。可以说是排他网关可以有多个外出顺序流或并行网关有了条件判断图标: xml:实例流程图:4、 审批组管理,任务分配形成流程图的过程中需要给流程中的图元设置属性,如用户任务设置办理人、网关设置判断条件等。4.1、审批组管理点击“增加”一个组,用于某个环节的审批组;选中一个组,点击“管理组内用户”跳转到管理组内用户界面;在管理组内用户界面中,点击“选择组内用户”,弹出系统用户列表,然后选中审批人点击“添加”按钮,将系统用户同步到activiti工作流管理系统组织机构表中。4.2、任务分配4.2.1使用流程变量使用流程变量,动态获取任务的办理者。选择一个审批环节,如“经理审批环节”,有三种任务分配的配置项:Assignee:表示个人任务,只有一个可以查看、办理任务Candidate users:表示为多人任务,多个人都可以查看、认领办理任务Candidate groups:表示为组任务,组内的成员都可以查看、认领办理任务。通过流程变量设置他们的值,如 Assignee设置为$inputUser,其中inputUser为流程变量,在程序中给流程变量赋值,那么这个任务就会分配给流程中设置的这个用户,当登录的时候就可以审核、办理这个任务了。4.2.2使用任务处理器使用任务处理器进行任务分配的步骤:1)编写一个实现TaskListener接口的java类2)实现相应逻辑,获取审批组管理中预先配置给这个环节的审批组 3)配置任务处理器 如图选择listeners项进入监听配置界面,配置监听动态设置任务办理者。在Listener configuration界面里点击“Select class”按钮,选择上面编写好的Java类。这样配置完成后,当流程流转到该环节时,就会触发监听获取Java类中获取到的组,这个组就拥有了这个任务。5、 流程定义管理、流程实例管理首先理解两个概念:流程定义(规则)和流程实例。流程定义:通过流程设计器设计出的流程图,就是一个流程定义,是我们定义好的流程规则,流程会以这个规则进行流转。流程实例:启动流程会产生一个流程实例对象,流程实例对象是用来描述流程执行过程,流程实例对象会指向当前活动节点;而每个活动节点都会对应一个节点执行对象,用来描述节点情况(比如活动节点id)。(流程定义)(流程实例)5.1、流程定义管理l 发布流程 方式一: RepositoryService# createDeployment() .name(请假流程)/ 添加部署规则的显示别名 .addClasspathResource(diagrams/Leave2.bpmn)/ 添加规则文件 .addClasspathResource(diagrams/Leave2.png);/ 添加规则图片 方式二: RepositoryService# createDeployment() .name(请假流程)/ 添加部署规则的显示别名 .addZipInputStream(zipInputStream ); 注意:要同时发布bpmn和PNG文件,如果只发布bpmn文件,png自动生产的话流程图里会出现乱码。发布流程表的变化,会在三张表中产生数据:* act_ge_bytearray 产生两条数据 * act_re_deployment 产生一条数据 * act_re_procdef 产生一条数据l 查看流程定义 ProcessDefinitionQuery#createProcessDefinitionQuery()l 删除流程 ProcessDefinitionQuery#deleteDeployment(deploymentId)ProcessDefinitionQuery#deleteDeployment(deploymentId,true);/也会删除历史记录l 查看流程图查询资源-转换为流-保存为文件或浏览器显示ProcessDefinitionQuery#getDeploymentResourceNames(deploymentId)补充:在act_re_procdef表key对应流程描述(bpmn)里的id 5.2、流程实例管理启动流程会产生一个流程实例对象,流程实例对象是用来描述流程执行过程,流程实例对象会指向当前活动节点;而每个活动节点都会对应一个节点执行对象,用来描述节点情况(比如活动节点id)。数据库表的数据变化:当流程到达一个节点时,会在act_ru_execution表中产生1条数据 如果当前节点是用户任务节点,这时会在act_ru_task表中产生1条数据(任务的办理人,任务的创建时间)l 启动流程实例 RuntimeService#startProcessInstanceByKey(key);l 查看任务 个人任务 TaskQuery#taskAssignee(assignee) 组任务 TaskQuery# taskCandidateUser(candidateAssignee)l 认领(拾取)任务 TaskQuery#(taskId,userId)l 办理任务 TaskQuery#complete()l 查看流程状态 活的流程实例对象 查看当前活动节点TaskQuery#createProcessInstanceQuery().processInstanceId(processInstanceId)ProcessInstance#getActivityId()关于流程实例需要明确的几个问题:1.一个流程只有一个流程实例对象2.流程实例对象永远指向当前活动的节点3.一个流程的流程实例的ID永远不会变4. 如果是单线流程,流程实例就是Execution;如果是分支流程(并行流程),这时会在分支处产生一个Execution(root),分支流程中每个节点产生的execution,会统一挂在Execution(root)下 (单线流程)(并行流程)6、 流程历史虽然已完成的任务在act_ru_task和act_ru_execution表中都已被删除,但

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论