public virtual void ExecuteExecutionListeners(IHasExecutionListeners elementWithExecutionListeners, IExecutionEntity execution, string eventType) { IList <ActivitiListener> listeners = elementWithExecutionListeners.ExecutionListeners; if (listeners != null && listeners.Count > 0) { IListenerFactory listenerFactory = Context.ProcessEngineConfiguration.ListenerFactory; foreach (ActivitiListener activitiListener in listeners) { if (eventType.Equals(activitiListener.Event)) { IBaseExecutionListener executionListener = null; if (ImplementationType.IMPLEMENTATION_TYPE_CLASS.Equals(activitiListener.ImplementationType, StringComparison.CurrentCultureIgnoreCase)) { executionListener = listenerFactory.CreateClassDelegateExecutionListener(activitiListener); } else if (ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.Equals(activitiListener.ImplementationType, StringComparison.CurrentCultureIgnoreCase)) { executionListener = listenerFactory.CreateExpressionExecutionListener(activitiListener); } else if (ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.Equals(activitiListener.ImplementationType, StringComparison.CurrentCultureIgnoreCase)) { if (activitiListener.OnTransaction is object) { executionListener = listenerFactory.CreateTransactionDependentDelegateExpressionExecutionListener(activitiListener); } else { executionListener = listenerFactory.CreateDelegateExpressionExecutionListener(activitiListener); } } else if (ImplementationType.IMPLEMENTATION_TYPE_INSTANCE.Equals(activitiListener.ImplementationType, StringComparison.CurrentCultureIgnoreCase)) { executionListener = (IExecutionListener)activitiListener.Instance; } if (executionListener != null) { if (activitiListener.OnTransaction is object) { PlanTransactionDependentExecutionListener(listenerFactory, execution, (ITransactionDependentExecutionListener)executionListener, activitiListener); } else { execution.EventName = eventType; // eventName is used to differentiate the event when reusing an execution listener for various events execution.CurrentActivitiListener = activitiListener; ((IExecutionListener)executionListener).Notify(execution); execution.EventName = null; execution.CurrentActivitiListener = null; } } } } } }
/// <summary> /// Executes the execution listeners defined on the given element, with the given event type, /// and passing the provided execution to the <seealso cref="IExecutionListener"/> instances. /// </summary> protected internal virtual void ExecuteExecutionListeners(IHasExecutionListeners elementWithExecutionListeners, IExecutionEntity executionEntity, string eventType) { commandContext.ProcessEngineConfiguration.ListenerNotificationHelper.ExecuteExecutionListeners(elementWithExecutionListeners, executionEntity, eventType); }
/// <summary> /// Executes the execution listeners defined on the given element, with the given event type. /// Uses the <seealso cref="#execution"/> of this operation instance as argument for the execution listener. /// </summary> protected internal virtual void ExecuteExecutionListeners(IHasExecutionListeners elementWithExecutionListeners, string eventType) { ExecuteExecutionListeners(elementWithExecutionListeners, execution, eventType); }