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));
        }
示例#2
0
        /// <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);
            }
        }