public override IEventLogEntryEntity GenerateEventLogEntry(CommandContext <IEventLogEntryEntity> commandContext) { IActivitiSequenceFlowTakenEvent sequenceFlowTakenEvent = (IActivitiSequenceFlowTakenEvent)@event; IDictionary <string, object> data = new Dictionary <string, object>(); PutInMapIfNotNull(data, FieldsFields.ID, sequenceFlowTakenEvent.Id); PutInMapIfNotNull(data, FieldsFields.SOURCE_ACTIVITY_ID, sequenceFlowTakenEvent.SourceActivityId); PutInMapIfNotNull(data, FieldsFields.SOURCE_ACTIVITY_NAME, sequenceFlowTakenEvent.SourceActivityName); PutInMapIfNotNull(data, FieldsFields.SOURCE_ACTIVITY_TYPE, sequenceFlowTakenEvent.SourceActivityType); PutInMapIfNotNull(data, FieldsFields.SOURCE_ACTIVITY_BEHAVIOR_CLASS, sequenceFlowTakenEvent.SourceActivityBehaviorClass); PutInMapIfNotNull(data, FieldsFields.TARGET_ACTIVITY_ID, sequenceFlowTakenEvent.TargetActivityId); PutInMapIfNotNull(data, FieldsFields.TARGET_ACTIVITY_NAME, sequenceFlowTakenEvent.TargetActivityName); PutInMapIfNotNull(data, FieldsFields.TARGET_ACTIVITY_TYPE, sequenceFlowTakenEvent.TargetActivityType); PutInMapIfNotNull(data, FieldsFields.TARGET_ACTIVITY_BEHAVIOR_CLASS, sequenceFlowTakenEvent.TargetActivityBehaviorClass); return(CreateEventLogEntry(@event.ProcessDefinitionId, @event.ProcessInstanceId, @event.ExecutionId, null, data)); }
/// <summary> /// /// </summary> /// <param name="sequenceFlow"></param> protected internal virtual void ContinueThroughSequenceFlow(SequenceFlow sequenceFlow) { // Execution listener. Sequenceflow only 'take' makes sense ... but we've supported all three since the beginning if (CollectionUtil.IsNotEmpty(sequenceFlow.ExecutionListeners)) { ExecuteExecutionListeners(sequenceFlow, BaseExecutionListenerFields.EVENTNAME_START); ExecuteExecutionListeners(sequenceFlow, BaseExecutionListenerFields.EVENTNAME_TAKE); ExecuteExecutionListeners(sequenceFlow, BaseExecutionListenerFields.EVENTNAME_END); } // Firing event that transition is being taken ProcessEngineConfigurationImpl processEngineConfiguration = Context.ProcessEngineConfiguration; if (processEngineConfiguration != null && processEngineConfiguration.EventDispatcher.Enabled) { FlowElement sourceFlowElement = sequenceFlow.SourceFlowElement; FlowElement targetFlowElement = sequenceFlow.TargetFlowElement; IActivitiSequenceFlowTakenEvent asft = ActivitiEventBuilder.CreateSequenceFlowTakenEvent(execution, ActivitiEventType.SEQUENCEFLOW_TAKEN, sequenceFlow.Id, sourceFlowElement?.Id, sourceFlowElement?.Name, sourceFlowElement?.GetType().FullName, sourceFlowElement == null ? null : ((FlowNode)sourceFlowElement).Behavior, targetFlowElement?.Id, targetFlowElement?.Name, targetFlowElement?.GetType().FullName, targetFlowElement == null ? null : ((FlowNode)targetFlowElement).Behavior); processEngineConfiguration.EventDispatcher.DispatchEvent(asft); } { FlowElement targetFlowElement = sequenceFlow.TargetFlowElement; execution.CurrentFlowElement = targetFlowElement; log.LogDebug($"Sequence flow '{sequenceFlow.Id}' encountered. Continuing process by following it using execution {execution.Id}"); Context.Agenda.PlanContinueProcessOperation(execution); } }