微信商城网站如何做,全国免费发布信息平台,中小企业网站建设开题报告,做 爱 网站小视频Activiti 为什么使用activitiactiviti流程步骤表结构分四种#xff1a;四个重要的服务类BusinessKey挂起流程变量#xff1a;注意#xff1a;网关#xff1a;精细控制流程走向组任务分配#xff1a;抄送#xff1a;activiti工作流获取流程定义中所有的节点: 为什么使用ac… Activiti 为什么使用activitiactiviti流程步骤表结构分四种四个重要的服务类BusinessKey挂起流程变量注意网关精细控制流程走向组任务分配抄送activiti工作流获取流程定义中所有的节点: 为什么使用activiti
状态--------------------------------------------------引擎engin(业务变动不影响程序的进行) 每个人只能看到个人负责的流程变更困难 bpmn建模语言
activiti流程步骤
步骤 1、部署流程 2、定义流程 3、部署流程定义使用activiti中的API把流程定义存储在Acitivti执行过程汇总可以查询定义的内容通过数据库来存储业务流程 4、启动流程实例ProcessInstance启动流程实例代表开始一次业务流程的运作。【提交某个申请后-开启流程-推动审批进行】 5、用户查询待办任务task系统业务已经交给了activiti管理通过activiti就可以查询当前流程执行到哪个步骤 6、用户办理任务用户查到待办任务后办理某个业务【如果业务办理还需要其他用户办理就可以由activiti帮我们把工作流程往后面推动】 7、流程结束任务办理没有下一个任务节点后流程实例就执行完成了。
表结构分四种
表结构 re流程定义流程静态资源 ruruntime任务 hi历史信息 ge通用属性
//示例
SELECT * FROM act_re_deployment #流程定义部署表记录流程部署信息
SELECT * FROM act_re_procdef #流程定义表记录流程定义信息
SELECT * FROM act_ge_bytearray #资源表 文件存储地方四个重要的服务类
ProcessEngineHistoryServiceRepostoryServiceRuntimeServiceTaskService,ManagementService(开发维护使用)
bpmn设计id(定义的文件后缀前的东西) name assignee(审批人) 流程设计 id name bpmn文件definnitions配置—process多个也可正常一个定义的工作流程----bpmndi画布图形 图png
流程定义ProcessDefinition是BPMN文件定义的一个具体的业务流程 流程实例ProcessInstance则是指一个具体的业务流程 某人发起什么就会实例化什么 不同流程实例之间按时互相不影响的 【定义部署后就形成了流程实例数据库就存在了】
BusinessKey
BusinessKey在ru_execution表中---------- 【绑定业务ID】 流程发起后审批人在此之前要知道相关审批单信息【请假时间、请假理由】是如何绑定到流程中呢
挂起
挂起就是说每月最后一天不处理出差申请这个流程暂停至此 流程定义挂起该流程下就不能启动新的流程定义 如果是激活状态改为挂起状态。参数一流程定义id 参数2是否暂停 参数3暂停的时间 repositoryService.suspendProcessDefinitionById( , , );
流程实例挂起则此流程不再执行如果进行完成操作将报错 runtimeService.suspendProcessInstanceById( instanceId )
概念
之前我们已经测试了如何删除一个流程有很多时候我们只是需要暂时停止一个流程过一段时间就要恢复。
例如月底不接受报销审批流程年底不接受借贷审批流程或者非工作日不接受售后报销流程等这个时候就可以将流程进行挂起操作。
挂起后的流程就不会再继续执行。挂起任务不可以
流程变量
之前定义的请假流程并没有用到流程变量每个步骤都是非常固定的但是当我们需要实现一些复杂的业务流程 比如请假3天以内由部门经理审批3天以上需要增加总经理审批这样的流程时就需要用到流程变量
注意
【和之前介绍的业务关键字有些相似都可以携带业务信息并且可以通过activiti的api查询出来。但在使用中应减少流程变量中的业务信息】 流程变量的类型是MapString,Object。 所以流程变量比业务关键字要强大很多。变量值不仅仅是字符串也可以是POJO对象。 但是当需要将一个POJO对象放入流程变量时要注意这个对象必须要实现序列化接口serializable MapString,Object variables new HashMap(); 流程变量作用域Global和Local两种 使用${ 流程变量 } ${ 流程变量3 } Global变量 这个是流程变量的默认作用域表示是一个完整的流程实例。定义一个变量在这整个流程中会传递下去 Global变量中变量名不能重复如果设置了相同的变量名后面设置的值会直接覆盖前面设置的变量值。 启动流程时设置变量 在启动流程实例时设置流程变量这时流程变量的作用域是整个流程实例。相当于是Global作用域。核心代码: ProcessInstance processInstance runtimeService.startProcessInstanceByKey(key, map);任务办理时设置变量 在完成任务时设置流程变量该流程变量只有在该任务完成后其它结点才可使用该变量 它的作用域是整个流程实例如果设置的流程变量的key在流程实例中已存在相同的名字则后设置的变量替换前边设置的变量。 核心代码:taskService.complete(task.getId(), map); 任务完成交给的下一个人 注意这种方式设置流程变量如果当前执行的任务ID不存在则会抛出异常流程变量也会设置失败。通过当前流程实例 设置……………… Local变量 Local变量的作用域只针对一个任务或一个执行实例的范围没有流程实例大。 Local变量由于作用在不同的任务或不同的执行实例中所以不同变量的作用域是互不影响的变量名可以相同。 Local变量名也可以和Global变量名相同不会有影响。 ………………
网关精细控制流程走向
线条联系已将无法支持复杂流程需要用网关【排他网关并行网关包含网关事务网关】ExlusiveGateway排他网关决定接下来走哪一条线如果从网关出去的线所有条件都不满足系统则抛出异常。 所有条件满足的话会选择“id”小的那一条去走 ParallelGateway并行网关允许将流程分成多条分支也可以把分支汇聚到一起并行网关的功能是基于进入和外出顺序流的。 fork分支并行后的所有外出顺序流为每个顺序流都创建一个并发分支 join汇聚所有到达并行网关在此等待的进入分支直到所有进入顺序流的分支都到达以后流程就会通过汇聚网关。 注意每一条分支都会走条件会被忽略技术经理和财务经理都会执行会汇聚才会完成后续的流程 InclusiveGateway包含网关可以看作是排他和并行的结合体 事务网关不常用
组任务分配
多个经理找哪个经理批在候选人中任选一个 taskService.claim(taskId, candidateUser_定 义任务领取人) //拾取任务退还任务把负责人设置为null taskService.setAssigine(taskIdnull)
抄送
抄送抄送是指将你的审批抄送给【需要了解审批内容但不具备决定权】的人。
activiti工作流获取流程定义中所有的节点:
将xml定义文件解析成BpmnModel对象使用BpmnModel的 getMainProcess()获取一个Process对象 该对象实际是一个继承自BaseElement、FlowElementContainer的节点容器通过 getFlowElements()获取当前流程定义文件中所有的节点对象