美文网首页
activiti流程控制

activiti流程控制

作者: lv_shun | 来源:发表于2020-05-26 22:21 被阅读0次

    流程实例与执行流

    启动流程,会产生一个流程实例,如果没有分支的情况下,会产生一个执行流,如果存在分支,activiti会生成一个主执行流和分支执行流.

    流程实例和执行流对象

    ProcessInstance是一个接口,一个ProcessInstance表示一个流程实例,同时ProcessInstance是执行流Execution的子接口,一个实例属于一个执行流,并且ProcessInstance有Execution没有的属性,比如流程定义和业务主键.
    流程实例和执行流数据保存在ACT_RU_EXECUTION中,对应映射实体为ExecutionEntityImpl,主要属性包括:

    • id 主键
    • revision 数据版本
    • businessKey 流程实例的业务主键 只有流程实例有值
    • parentId 父执行流的id
    • processDefinitionId 流程定义Id,流程实例和执行流都有值
    • superExecutionId 父执行流Id
    • activityId 当前执行流的操作,一般为流程节点的名称
    • isActive 该执行流状态是否活跃
    • isConcurrent 执行流是否并行
    • isScope 是否在执行范围内
    • isEventScope 是否在事件范围内
    • suspensionState 流程中断状态 1 为活跃 2 中断

    启动流程

    RuntimeService提供了几种启动流程方法,返回都是ProcessInstance对象:

    startProcessInstanceId方法

    • startProcessInstanceId(String processDefinitionId) 根据流程定义id启动流程
    • startProcessInstanceId(String processDefinitionId,Map<String,Object> variables) 根据流程定义id创建并传入参数
    • startProcessInstanceId(String processDefinitionId,String businessKey) 根据流程定义id和业务id启动流程
    • startProcessInstanceId(String processDefinitionId,String businessKey,Map<String,Object> variables) 根据流程定义id和业务id启动流程,并设置参数
      此处的参数会保存到参数表中.

    startProcessInstanceByKey方法

    这里面的key为流程定义文件中id.

    • startProcessInstanceByKey(String processDefinitioinKey) 根据id启动
    • startProcessInstanceByKey(String processDefinitioinKey,Map<String,Object> variables) 带参方法
    • startProcessInstanceByKey(String processDefinitioinKey,String businessKey) 通过id和业务id启动
    • startProcessInstanceByKey(String processDefinitioinKey,String businessKey,Map<String,Object> variables) 通过id和业务id启动,并设置参数

    startProcessInstanceMessage方法

    在流程定义的时候,可以为启动事件添加自定义事件,通过自定义事件来启动流程实例.

    • startProcessInstanceMessage(String messageName) 根据消息名称启动流程
    • startProcessInstanceMessage(String messageName,Map<String,Object> variables) 带参方法
    • startProcessInstanceMessage(String messageName,String businessKey) 通过事件名称和业务id启动
    • startProcessInstanceMessage(String messageName,String businessKey,Map<String,Object> variables) 通过事件名称和业务id启动并设置参数
      这里面的messageName并不是事件id,而是事件name属性,流程定义启动事件引用此事件是ref的是id.

    流程实例参数

    参数设置同任务参数.注意需要指定执行流的id,不是流程实例id,没有分支的情况两个id相同.

    流程操作

    RuntimeService提供了启动流程、发送信号、中断流程和激活流程等操作.

    流程触发

    UserTask使用complete来完成,对于receiveTask等流程节点,使用trigger方法来触发,使流程继续
    RuntimeService.trigger方法:

    • trigger(String executionId) 触发流程中的等待节点使其继续.
    • trigger(String executionId,Map<String,Object> variables) 触发等待节点并设置参数
    • trigger(String executionId,Map<String,Object> variables,,Map<String,Object> transientVariables) 第三个参数是临时参数

    此处第二个参数作用于整个流程

    触发信号事件

    事件节点是在流程中记录事件发生的流程元素.BPMN2.0规范中主要有两种类型的事件:

    • 捕获事件(Catching) 流程中在某节点定义了捕获事件,当流程执行到此节点时,会等待事件的触发,知道收到触发信号,流程才继续下去.触发信号使用RuntimeService的signalEventReceived(String signalName)方法.
    • 抛出事件(Throwing) 流程中在某节点定义了抛出事件,当流程执行到此节点时,会抛出事件,并继续下去

    触发消息事件

    除了信号事件节点外,还提供了消息事件节点.可以使用messageEventDefinition元素定义一个消息事件,该元素可以定义在startEvent和intermediateCatchEvent.

    • 在startEvent中定义,可以使用RuntimeService.startProcessInstanceByMessage方法启动流程.
    • 在intermediateCatchEvent中定义,则属于捕获事件,当流程运行到此节点时,需要等待消息事件触发才能继续下去,通过RuntimeService的messageEventReceived方法向其发出信号.

    中断与激活流程

    RuntimeService的suspendProcessInstanceById中断流程实例
    RuntimeService的activateProcessInstanceById激活流程实例

    删除流程实例

    RuntimeService的deleteProcessInstance(String processInstanceId,String reason)

    流程查询

    RuntimeService的createExecutionQuery查询执行流相关数据
    RuntimeService的createProcessInstanceQuery查询流程实例相关数据

    相关文章

      网友评论

          本文标题:activiti流程控制

          本文链接:https://www.haomeiwen.com/subject/ftfgvqtx.html