コード例 #1
0
        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;
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
 /// <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);
 }
コード例 #3
0
 /// <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);
 }