BPMN2.0:
- 是一套业务流程模型与符号建模标准
- 精准的执行语义来描述元素的操作
- 以 XML 为载体, 以符号可视化业务
BPMN2.0元素:
- 流对象
- 连接对象
- 数据
- 泳道
- 描述对象
其中最重要的流对象, 流对象包括活动, 事件和网关, 通过连接对象连接起来, 用来表示数据的流转, 泳道用来对业务的范围做区分, 描述对象并不影响业务的进行, 为流程图的可读性做补充性的描述.
1. 事件
1.1 分类
按照位置分类:
- 开始事件
- 中间事件/边界事件(中间事件是指出现在流程中, 可以单独作为流程节点的事件, 而边界事件指的是附属于某个流程节点的事件)
- 结束事件
按照特征分类:
- 捕获时间, 捕获事件是一直在等待被触发的事件, 所有的开始事件都是等待被触发的事件
- 抛出事件, 执行到节点会自动执行并抛出结果, 结束事件都属于抛出事件.
按照定义分类:
- 定时事件
- 错误事件
- 信号事件
- 消息事件
1.1.1 定时事件
在使用定时事件时, 首先需要流程引擎的异步开关打开
- 指定时间(timeDate)
- 指定持续时间(timeDuration)
- 周期执行(timeCycle)
定时事件的定义方式:
1 | <timerEventDefinition> |
1.1.1.1 定时开始事件
1 | <startEvent id="timerStartEvent" name="Timer Start"> |
1.1.1.2 定时边界事件
流程流转到一个普通任务时, 如果在指定时间内没有完成, 就会触发定时边界事件
流程定义
1 | <startEvent id="startEvent"/> |
测试代码
1 | /** |
日志输出
11:06:06,568 [main] INFO org.destiny.activiti.bpmn20.TimerEventTest - task 总数: 1
11:06:06,568 [main] INFO org.destiny.activiti.bpmn20.TimerEventTest - task.name = Common Task
...
11:06:16,573 [main] INFO org.destiny.activiti.bpmn20.TimerEventTest - 休眠后 task 总数: 1
11:06:16,573 [main] INFO org.destiny.activiti.bpmn20.TimerEventTest - 休眠后 task.name = Timeout Task
1.1.2 错误事件
网关中由提交的表单信息判断正常结束还是异常结束, 错误事件会被错误信息所触发, 主要用于处理业务异常
流程图简单分析
提交一个新的
sales leader
, 创建一个子流程, 在子流程中同时对customer rating
以及profitability
进行考察, 如果同时通过, 则结束子流程, 完成主流程的Store lead in CRM system
任务以及结束节点如果
profitability
任务没有提供足够的信息, 则会抛出错误事件, 错误事件被边界事件所捕获, 进入Provide additional details
流程, 并进入开始子流程
流程定义
1 | <error id="notEnoughInfoError" errorCode="not_enough_info" /> |
测试代码
1 | public class BoundaryErrorEventTest extends PluggableActivitiTestCase { |
日志输出
分析日志可以看到, 没有错误所有的断言全部通过, 证明整个流程无误(日志量比较大, 为了能够清晰描述流程特地将日志格式调整)
03:53:20,823 [main] INFO org.activiti.engine.ProcessEngines - initialised process engine default
03:53:23,006 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,008 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : theStart (StartEvent, parent id 5 (active)
03:53:23,009 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,009 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : theStart (StartEvent, parent id 5 (active)
03:53:23,010 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,010 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : theStart -> provideNewSalesLead, parent id 5 (active)
03:53:23,010 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,011 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : provideNewSalesLead (UserTask, parent id 5 (active)
03:53:23,053 [main] INFO org.activiti.engine.impl.test.AbstractTestCase - processInstance: {"currentFlowElement":null,"currentActivitiListener":null,"processInstance":"ProcessInstance[5]","parent":null,"executions":[Execution[ id '10' ] - activity 'provideNewSalesLead - parent '5'],"superExecution":null,"subProcessInstance":null,"tenantId":"","name":null,"description":null,"localizedName":null,"localizedDescription":null,"lockTime":null,"isActive":true,"isScope":true,"isConcurrent":false,"isEnded":false,"isEventScope":false,"isMultiInstanceRoot":false,"isCountEnabled":false,"eventName":null,"eventSubscriptions":[],"jobs":[],"timerJobs":[],"tasks":[],"identityLinks":[IdentityLinkEntity[id=7, type=starter, userId=destiny, processInstanceId=5]],"deleteReason":null,"suspensionState":1,"startUserId":"destiny","startTime":"Sat Dec 08 15:53:23 CST 2018","eventSubscriptionCount":0,"taskCount":0,"jobCount":0,"timerJobCount":0,"suspendedJobCount":0,"deadLetterJobCount":0,"variableCount":0,"identityLinkCount":0,"processDefinitionId":"reviewSaledLead:1:4","processDefinitionKey":"reviewSaledLead","processDefinitionName":"Review sales lead","processDefinitionVersion":1,"deploymentId":null,"activityId":null,"activityName":null,"processInstanceId":"5","businessKey":null,"parentId":null,"superExecutionId":null,"rootProcessInstanceId":"5","rootProcessInstance":null,"forcedUpdate":false,"queryVariables":null,"isDeleted":false,"variableInstances":{details=VariableInstanceEntity[id=8, name=details, type=string, textValue=interesting], customerName=VariableInstanceEntity[id=9, name=customerName, type=string, textValue=Camery], initiator=VariableInstanceEntity[id=6, name=initiator, type=string, textValue=destiny]},"usedVariablesCache":{},"transientVariabes":null,"cachedElContext":null,"id":"5","revision":1,"isInserted":true,"isUpdated":false,"isDeleted":false}
03:53:23,075 [main] INFO org.activiti.engine.impl.test.AbstractTestCase - task: {"owner":null,"assigneeUpdatedCount":1,"originalAssignee":null,"assignee":"destiny","delegationState":null,"parentTaskId":null,"name":"Provide new sales lead","localizedName":null,"description":null,"localizedDescription":null,"priority":50,"createTime":"Sat Dec 08 15:53:23 CST 2018","dueDate":null,"suspensionState":1,"category":null,"isIdentityLinksInitialized":false,"taskIdentityLinkEntities":[],"executionId":"10","execution":null,"processInstanceId":"5","processInstance":null,"processDefinitionId":"reviewSaledLead:1:4","taskDefinitionKey":"provideNewSalesLead","formKey":null,"isDeleted":false,"isCanceled":false,"eventName":null,"currentActivitiListener":null,"tenantId":"","queryVariables":null,"forcedUpdate":false,"claimTime":null,"variableInstances":null,"usedVariablesCache":{},"transientVariabes":null,"cachedElContext":null,"id":"13","revision":1,"isInserted":false,"isUpdated":false,"isDeleted":false}
03:53:23,081 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TriggerExecutionOperation :
03:53:23,082 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : provideNewSalesLead (UserTask, parent id 5 (active)
03:53:23,083 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,083 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : provideNewSalesLead (UserTask, parent id 5 (active)
03:53:23,084 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,084 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : provideNewSalesLead -> reviewSalesLeadSubProcess, parent id 5 (active)
03:53:23,084 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,084 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active)
03:53:23,086 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,087 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
└── 17 : subProcessStart (StartEvent, parent id 14 (active)
03:53:23,087 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,087 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
└── 17 : subProcessStart (StartEvent, parent id 14 (active)
03:53:23,087 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,088 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
└── 17 : subProcessStart -> fork, parent id 14 (active)
03:53:23,088 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,088 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
└── 17 : fork (ParallelGateway, parent id 14 (active)
03:53:23,088 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,089 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
└── 17 : fork (ParallelGateway, parent id 14 (not active)
03:53:23,089 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,089 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : fork -> reviewProfitability, parent id 14 (active)
└── 20 : fork -> reviewCustomerRating, parent id 14 (active)
03:53:23,089 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,090 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : reviewProfitability (UserTask, parent id 14 (active)
└── 20 : fork -> reviewCustomerRating, parent id 14 (active)
03:53:23,090 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,090 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : reviewProfitability (UserTask, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,092 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,092 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 10 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : reviewProfitability (UserTask, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,114 [main] INFO org.activiti.engine.impl.test.AbstractTestCase - ratingTask: {"owner":null,"assigneeUpdatedCount":0,"originalAssignee":null,"assignee":null,"delegationState":null,"parentTaskId":null,"name":"Review customer rating","localizedName":null,"description":null,"localizedDescription":null,"priority":50,"createTime":"Sat Dec 08 15:53:23 CST 2018","dueDate":null,"suspensionState":1,"category":null,"isIdentityLinksInitialized":false,"taskIdentityLinkEntities":[],"executionId":"20","execution":null,"processInstanceId":"5","processInstance":null,"processDefinitionId":"reviewSaledLead:1:4","taskDefinitionKey":"reviewCustomerRating","formKey":null,"isDeleted":false,"isCanceled":false,"eventName":null,"currentActivitiListener":null,"tenantId":"","queryVariables":null,"forcedUpdate":false,"claimTime":null,"variableInstances":null,"usedVariablesCache":{},"transientVariabes":null,"cachedElContext":null,"id":"25","revision":1,"isInserted":false,"isUpdated":false,"isDeleted":false}
03:53:23,116 [main] INFO org.activiti.engine.impl.test.AbstractTestCase - profitabilityTask: {"owner":null,"assigneeUpdatedCount":0,"originalAssignee":null,"assignee":null,"delegationState":null,"parentTaskId":null,"name":"Review profitability","localizedName":null,"description":"destiny has published a new sales lead: Camery. Details: interesting","localizedDescription":null,"priority":50,"createTime":"Sat Dec 08 15:53:23 CST 2018","dueDate":null,"suspensionState":1,"category":null,"isIdentityLinksInitialized":false,"taskIdentityLinkEntities":[],"executionId":"17","execution":null,"processInstanceId":"5","processInstance":null,"processDefinitionId":"reviewSaledLead:1:4","taskDefinitionKey":"reviewProfitability","formKey":null,"isDeleted":false,"isCanceled":false,"eventName":null,"currentActivitiListener":null,"tenantId":"","queryVariables":null,"forcedUpdate":false,"claimTime":null,"variableInstances":null,"usedVariablesCache":{},"transientVariabes":null,"cachedElContext":null,"id":"22","revision":1,"isInserted":false,"isUpdated":false,"isDeleted":false}
03:53:23,122 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TriggerExecutionOperation :
03:53:23,125 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : reviewProfitability (UserTask, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,126 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,126 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : reviewProfitability (UserTask, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,126 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,127 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : reviewProfitability -> enoughInformationCheck, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,127 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,127 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : enoughInformationCheck (ExclusiveGateway, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,131 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,131 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : enoughInformationCheck -> notEnoughInformationEnd, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,132 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,132 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : enoughInformationCheck -> notEnoughInformationEnd, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,132 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,132 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : notEnoughInformationEnd (EndEvent, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,133 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TriggerExecutionOperation :
03:53:23,134 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 14 (active)
├── 17 : notEnoughInformationEnd (EndEvent, parent id 14 (active)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (active)
03:53:23,139 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,139 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 17 : notEnoughInformationEnd (EndEvent, parent id 14 (not active) (ended)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (not active) (ended)
└── 16 : catchNotEnoughInformationError (BoundaryEvent, parent id 5 (active)
03:53:23,139 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,139 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 17 : notEnoughInformationEnd (EndEvent, parent id 14 (not active) (ended)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (not active) (ended)
└── 16 : catchNotEnoughInformationError -> provideAdditionalDetails, parent id 5 (active)
03:53:23,139 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,140 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 14 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 17 : notEnoughInformationEnd (EndEvent, parent id 14 (not active) (ended)
└── 20 : reviewCustomerRating (UserTask, parent id 14 (not active) (ended)
└── 16 : provideAdditionalDetails (UserTask, parent id 5 (active)
03:53:23,150 [main] INFO org.activiti.engine.impl.test.AbstractTestCase - provideDetailsTask: {"owner":null,"assigneeUpdatedCount":1,"originalAssignee":null,"assignee":"destiny","delegationState":null,"parentTaskId":null,"name":"Provide additional details","localizedName":null,"description":"Provide additional details for Camery.","localizedDescription":null,"priority":50,"createTime":"Sat Dec 08 15:53:23 CST 2018","dueDate":null,"suspensionState":1,"category":null,"isIdentityLinksInitialized":false,"taskIdentityLinkEntities":[],"executionId":"16","execution":null,"processInstanceId":"5","processInstance":null,"processDefinitionId":"reviewSaledLead:1:4","taskDefinitionKey":"provideAdditionalDetails","formKey":null,"isDeleted":false,"isCanceled":false,"eventName":null,"currentActivitiListener":null,"tenantId":"","queryVariables":null,"forcedUpdate":false,"claimTime":null,"variableInstances":null,"usedVariablesCache":{},"transientVariabes":null,"cachedElContext":null,"id":"32","revision":1,"isInserted":false,"isUpdated":false,"isDeleted":false}
03:53:23,152 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TriggerExecutionOperation :
03:53:23,153 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : provideAdditionalDetails (UserTask, parent id 5 (active)
03:53:23,154 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,154 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : provideAdditionalDetails (UserTask, parent id 5 (active)
03:53:23,155 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,155 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : provideAdditionalDetails -> reviewSalesLeadSubProcess, parent id 5 (active)
03:53:23,155 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,155 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active)
03:53:23,156 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,157 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : subProcessStart (StartEvent, parent id 33 (active)
03:53:23,157 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,157 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : subProcessStart (StartEvent, parent id 33 (active)
03:53:23,157 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,158 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : subProcessStart -> fork, parent id 33 (active)
03:53:23,158 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,158 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : fork (ParallelGateway, parent id 33 (active)
03:53:23,159 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,159 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : fork (ParallelGateway, parent id 33 (not active)
03:53:23,159 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,159 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
├── 36 : fork -> reviewProfitability, parent id 33 (active)
└── 39 : fork -> reviewCustomerRating, parent id 33 (active)
03:53:23,159 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,159 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
├── 36 : reviewProfitability (UserTask, parent id 33 (active)
└── 39 : fork -> reviewCustomerRating, parent id 33 (active)
03:53:23,159 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,160 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
├── 36 : reviewProfitability (UserTask, parent id 33 (active)
└── 39 : reviewCustomerRating (UserTask, parent id 33 (active)
03:53:23,161 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,162 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 16 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (ended)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
├── 36 : reviewProfitability (UserTask, parent id 33 (active)
└── 39 : reviewCustomerRating (UserTask, parent id 33 (active)
03:53:23,180 [main] INFO org.activiti.engine.impl.test.AbstractTestCase - reviewTask: {"owner":null,"assigneeUpdatedCount":0,"originalAssignee":null,"assignee":null,"delegationState":null,"parentTaskId":null,"name":"Review customer rating","localizedName":null,"description":null,"localizedDescription":null,"priority":50,"createTime":"Sat Dec 08 15:53:23 CST 2018","dueDate":null,"suspensionState":1,"category":null,"isIdentityLinksInitialized":false,"taskIdentityLinkEntities":[],"executionId":"39","execution":null,"processInstanceId":"5","processInstance":null,"processDefinitionId":"reviewSaledLead:1:4","taskDefinitionKey":"reviewCustomerRating","formKey":null,"isDeleted":false,"isCanceled":false,"eventName":null,"currentActivitiListener":null,"tenantId":"","queryVariables":null,"forcedUpdate":false,"claimTime":null,"variableInstances":null,"usedVariablesCache":{},"transientVariabes":null,"cachedElContext":null,"id":"44","revision":1,"isInserted":false,"isUpdated":false,"isDeleted":false}
03:53:23,180 [main] INFO org.activiti.engine.impl.test.AbstractTestCase - reviewTask: {"owner":null,"assigneeUpdatedCount":0,"originalAssignee":null,"assignee":null,"delegationState":null,"parentTaskId":null,"name":"Review profitability","localizedName":null,"description":"destiny has published a new sales lead: Camery. Details: interesting","localizedDescription":null,"priority":50,"createTime":"Sat Dec 08 15:53:23 CST 2018","dueDate":null,"suspensionState":1,"category":null,"isIdentityLinksInitialized":false,"taskIdentityLinkEntities":[],"executionId":"36","execution":null,"processInstanceId":"5","processInstance":null,"processDefinitionId":"reviewSaledLead:1:4","taskDefinitionKey":"reviewProfitability","formKey":null,"isDeleted":false,"isCanceled":false,"eventName":null,"currentActivitiListener":null,"tenantId":"","queryVariables":null,"forcedUpdate":false,"claimTime":null,"variableInstances":null,"usedVariablesCache":{},"transientVariabes":null,"cachedElContext":null,"id":"41","revision":1,"isInserted":false,"isUpdated":false,"isDeleted":false}
03:53:23,183 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TriggerExecutionOperation :
03:53:23,190 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 39 : reviewCustomerRating (UserTask, parent id 33 (active)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability (UserTask, parent id 33 (active)
03:53:23,190 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,190 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 39 : reviewCustomerRating (UserTask, parent id 33 (active)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability (UserTask, parent id 33 (active)
03:53:23,191 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,191 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 39 : reviewCustomerRating -> subProcessEnd1, parent id 33 (active)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability (UserTask, parent id 33 (active)
03:53:23,191 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,191 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 39 : subProcessEnd1 (EndEvent, parent id 33 (active)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability (UserTask, parent id 33 (active)
03:53:23,191 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,192 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 39 : subProcessEnd1 (EndEvent, parent id 33 (active)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability (UserTask, parent id 33 (active)
03:53:23,192 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.EndExecutionOperation :
03:53:23,193 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 39 : subProcessEnd1 (EndEvent, parent id 33 (active)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability (UserTask, parent id 33 (active)
03:53:23,203 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TriggerExecutionOperation :
03:53:23,204 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability (UserTask, parent id 33 (active)
03:53:23,205 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,205 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability (UserTask, parent id 33 (active)
03:53:23,206 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,206 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : reviewProfitability -> enoughInformationCheck, parent id 33 (active)
03:53:23,206 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,206 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : enoughInformationCheck (ExclusiveGateway, parent id 33 (active)
03:53:23,206 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,206 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : enoughInformationCheck -> subProcessEnd2, parent id 33 (active)
03:53:23,207 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,207 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : enoughInformationCheck -> subProcessEnd2, parent id 33 (active)
03:53:23,207 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,207 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (active)
03:53:23,207 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,207 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (active)
03:53:23,208 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.EndExecutionOperation :
03:53:23,208 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active) (scope)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (active)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (active)
03:53:23,211 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,211 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (not active) (ended)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (not active) (ended)
└── 49 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (active)
03:53:23,211 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,211 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (not active) (ended)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (not active) (ended)
└── 49 : reviewSalesLeadSubProcess -> storeLeadInCrmSystem, parent id 5 (active)
03:53:23,211 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,212 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (not active) (ended)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (not active) (ended)
└── 49 : storeLeadInCrmSystem (ManualTask, parent id 5 (active)
03:53:23,212 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,212 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (not active) (ended)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (not active) (ended)
└── 49 : storeLeadInCrmSystem (ManualTask, parent id 5 (active)
03:53:23,212 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,212 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (not active) (ended)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (not active) (ended)
└── 49 : storeLeadInCrmSystem -> processEnd, parent id 5 (active)
03:53:23,212 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation :
03:53:23,212 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (not active) (ended)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (not active) (ended)
└── 49 : processEnd (EndEvent, parent id 5 (active)
03:53:23,212 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TakeOutgoingSequenceFlowsOperation :
03:53:23,213 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (not active) (ended)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (not active) (ended)
└── 49 : processEnd (EndEvent, parent id 5 (active)
03:53:23,213 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.EndExecutionOperation :
03:53:23,213 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker -
5 (process instance)
└── 33 : reviewSalesLeadSubProcess (SubProcess, parent id 5 (not active) (scope) (ended)
├── 35 : catchNotEnoughInformationError (BoundaryEvent, parent id 33 (not active) (ended)
└── 36 : subProcessEnd2 (EndEvent, parent id 33 (not active) (ended)
└── 49 : processEnd (EndEvent, parent id 5 (active)
03:53:23,281 [main] INFO org.activiti.engine.impl.test.AbstractTestCase - database was clean
1.1.3. 信号事件
1.1.3.1. 信号开始事件
信号开始事件的启动方式与普通开始事件启动方式很接近, 需要发出对应的信号去启动它
1 | <signal id="theSignal" name="The signal"/> |
1.1.3.2 信号中间事件
1 | <signal id="alterSignal" name="alter"/> |
1.1.4 消息事件
消息事件的定义和信号事件的定义非常相近
1 | <message id="newInvoice" name="newInvoiceMessage"/> |
3. 顺序流和和网关
顺序流的分类:
- 顺序流
- 条件顺序流
- 默认顺序流
3.1. 网关
网关的分类:
- 排他网关(Exclusive Gateway)
- 并行网关(Parallel Gateway)
- 包容网关(Inclusive Gateway), 类似排他网关和并行网关的组合体, 即支持多条路, 有支持表达式
- 事件网关(Event-based Gateway), 每个分支都有一个捕获事件等待被触发, 一个触发后, 其他都会失效
3.1.1. 排他网关
分支判断
只能选一
支持默认
流程定义
1 | <exclusiveGateway id="exclusiveGateway1" name="Exclusive Gateway"/> |
测试代码
1 |
|
3.1.2. 并行网关
让流程从单线程变为并发情况, 原有的一条流转数据变为两条, 可以同时进行确认支付和确认收货, 当这两个条件同时满足时, 继续进行后面的操作
- 流程并发
- 分支
- 合并
- 忽略条件(即使填了条件也不会生效)
- 非对称(不要求所有的分支最终都合并在一起)
流程定义
1 | <parallelGateway id="parallelGateway1" name="Parallel Gateway"/> |
测试代码
1 |
|
日志输出
06:17:51,705 [main] INFO org.destiny.activiti.bpmn20.GatewayTest - 过并行网关时的 task 数量: 2
06:17:51,705 [main] INFO org.destiny.activiti.bpmn20.GatewayTest - task name: 确认支付
06:17:51,706 [main] INFO org.destiny.activiti.bpmn20.GatewayTest - task name: 确认收货
06:17:51,710 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TriggerExecutionOperation :
06:17:51,721 [main] INFO org.destiny.activiti.bpmn20.GatewayTest - 提交第 1 个任务时的 task 数量: [1]
06:17:51,721 [main] INFO org.destiny.activiti.bpmn20.GatewayTest - task name: 确认收货
06:17:51,724 [main] INFO org.activiti.engine.impl.interceptor.DebugCommandInvoker - Execution tree while executing operation class org.activiti.engine.impl.agenda.TriggerExecutionOperation :
06:17:51,738 [main] INFO org.destiny.activiti.bpmn20.GatewayTest - 提交第 2 个任务时的 task 数量: [1]
06:17:51,738 [main] INFO org.destiny.activiti.bpmn20.GatewayTest - task name: 订单完成
3.1.3. 包容性网关
可以理解为排他网关和并行网关的结合体
- 排他网关有条件, 只能选择一条路径
- 并行网关不带条件, 所有路径都会执行
- 包容性网关有条件, 且支持并行运行
- 并发
- 分支
- 合并
- 条件
- 非对称
事件网关
会根据连接的捕获时间决定流程的走向, 只能走一条线路
- 流程暂停
- 事件订阅
- 捕获事件
- 单一执行