コード例 #1
0
        public void SubscribeForCorrelationTokenInitializedEvent(Activity activity, IActivityEventListener <CorrelationTokenEventArgs> dataChangeListener)
        {
            if (dataChangeListener == null)
            {
                throw new ArgumentNullException("dataChangeListener");
            }
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }

            ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> subscriber =
                new ActivityExecutorDelegateInfo <CorrelationTokenEventArgs>(dataChangeListener,
                                                                             ContextActivityUtils.ContextActivity(activity), true);

            IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> > subscriptions = GetValue(SubscriptionsProperty) as IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> >;

            if (subscriptions == null)
            {
                subscriptions = new List <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> >();
                SetValue(SubscriptionsProperty, subscriptions);
            }

            subscriptions.Add(subscriber);
        }
コード例 #2
0
        public static CorrelationToken GetCorrelationToken(Activity activity, string correlationTokenName, string ownerActivityName)
        {
            if (null == correlationTokenName)
            {
                throw new ArgumentNullException("correlationTokenName");
            }
            if (null == ownerActivityName)
            {
                throw new ArgumentNullException("ownerActivityName");
            }
            if (null == activity)
            {
                throw new ArgumentNullException("activity");
            }

            Activity contextActivity = ContextActivityUtils.ContextActivity(activity);
            Activity owner           = null;

            if (!String.IsNullOrEmpty(ownerActivityName))
            {
                while (contextActivity != null)
                {
                    owner = contextActivity.GetActivityByName(ownerActivityName, true);
                    if (owner != null)
                    {
                        break;
                    }
                    contextActivity = ContextActivityUtils.ParentContextActivity(contextActivity);
                }

                if (owner == null)
                {
                    owner = Helpers.ParseActivityForBind(activity, ownerActivityName);
                }
            }

            if (owner == null)
            {
                throw new InvalidOperationException(ExecutionStringManager.OwnerActivityMissing);
            }

            CorrelationTokenCollection collection = owner.GetValue(CorrelationTokenCollectionProperty) as CorrelationTokenCollection;

            if (collection == null)
            {
                collection = new CorrelationTokenCollection();
                owner.SetValue(CorrelationTokenCollection.CorrelationTokenCollectionProperty, collection);
            }

            if (!collection.Contains(correlationTokenName))
            {
                collection.Add(new CorrelationToken(correlationTokenName));
            }
            return(collection[correlationTokenName]);
        }
コード例 #3
0
        public static CorrelationToken GetCorrelationToken(Activity activity, string correlationTokenName, string ownerActivityName)
        {
            if (correlationTokenName == null)
            {
                throw new ArgumentNullException("correlationTokenName");
            }
            if (ownerActivityName == null)
            {
                throw new ArgumentNullException("ownerActivityName");
            }
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }
            Activity activity2      = ContextActivityUtils.ContextActivity(activity);
            Activity activityByName = null;

            if (!string.IsNullOrEmpty(ownerActivityName))
            {
                while (activity2 != null)
                {
                    activityByName = activity2.GetActivityByName(ownerActivityName, true);
                    if (activityByName != null)
                    {
                        break;
                    }
                    activity2 = ContextActivityUtils.ParentContextActivity(activity2);
                }
                if (activityByName == null)
                {
                    activityByName = Helpers.ParseActivityForBind(activity, ownerActivityName);
                }
            }
            if (activityByName == null)
            {
                throw new InvalidOperationException(ExecutionStringManager.OwnerActivityMissing);
            }
            CorrelationTokenCollection tokens = activityByName.GetValue(CorrelationTokenCollectionProperty) as CorrelationTokenCollection;

            if (tokens == null)
            {
                tokens = new CorrelationTokenCollection();
                activityByName.SetValue(CorrelationTokenCollectionProperty, tokens);
            }
            if (!tokens.Contains(correlationTokenName))
            {
                tokens.Add(new CorrelationToken(correlationTokenName));
            }
            return(tokens[correlationTokenName]);
        }
コード例 #4
0
 internal void RequestRevertToCheckpointState(Activity currentActivity, EventHandler <EventArgs> callbackHandler, EventArgs callbackData, bool suspendOnRevert, string suspendInfo)
 {
     if (this.clonedInstanceStateStream == null)
     {
         throw new InvalidOperationException(ExecutionStringManager.InvalidRevertRequest);
     }
     this.activityContextId                 = ContextActivityUtils.ContextId(ContextActivityUtils.ContextActivity(currentActivity));
     this.activityQualifiedName             = currentActivity.QualifiedName;
     this.callbackData                      = callbackData;
     this.callbackHandler                   = callbackHandler;
     this.suspendOnRevert                   = suspendOnRevert;
     this.suspendOnRevertInfo               = suspendInfo;
     this.isInstanceStateRevertRequested    = true;
     this.workflowExecutor.Scheduler.CanRun = false;
 }
コード例 #5
0
        internal void Uninitialize(Activity activity)
        {
            base.SetValue(PropertiesProperty, null);
            CorrelationTokenEventArgs e = new CorrelationTokenEventArgs(this, false);
            IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> > list = base.GetValue(SubscriptionsProperty) as IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> >;

            if (list != null)
            {
                ActivityExecutorDelegateInfo <CorrelationTokenEventArgs>[] array = new ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> [list.Count];
                list.CopyTo(array, 0);
                foreach (ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> info in array)
                {
                    info.InvokeDelegate(ContextActivityUtils.ContextActivity(activity), e, true, false);
                }
            }
            WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "CorrelationToken Uninitialized for {0} owner activity {1}", new object[] { this.Name, this.OwnerActivityName });
        }
コード例 #6
0
        internal void Uninitialize(Activity activity)
        {
            SetValue(PropertiesProperty, null);

            // fire correlation uninitialized events
            CorrelationTokenEventArgs eventArgs = new CorrelationTokenEventArgs(this, false);
            IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> > subscribers = GetValue(SubscriptionsProperty) as IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> >;

            if (subscribers != null)
            {
                ActivityExecutorDelegateInfo <CorrelationTokenEventArgs>[] clonedSubscribers = new ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> [subscribers.Count];
                subscribers.CopyTo(clonedSubscribers, 0);
                foreach (ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> subscriber in clonedSubscribers)
                {
                    subscriber.InvokeDelegate(ContextActivityUtils.ContextActivity(activity), eventArgs, true, false);
                }
            }
            //SetValue(InitializedProperty, false);
            WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "CorrelationToken Uninitialized for {0} owner activity {1}", this.Name, this.OwnerActivityName);
        }
コード例 #7
0
        public void Initialize(Activity activity, ICollection <CorrelationProperty> propertyValues)
        {
            if (this.Initialized)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, ExecutionStringManager.CorrelationAlreadyInitialized, new object[] { this.Name }));
            }
            base.SetValue(PropertiesProperty, propertyValues);
            CorrelationTokenEventArgs e = new CorrelationTokenEventArgs(this, true);
            IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> > list = base.GetValue(SubscriptionsProperty) as IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> >;

            if (list != null)
            {
                foreach (ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> info in list)
                {
                    info.InvokeDelegate(ContextActivityUtils.ContextActivity(activity), e, true, false);
                }
            }
            base.SetValue(InitializedProperty, true);
            WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "CorrelationToken initialized for {0} owner activity {1} ", new object[] { this.Name, this.OwnerActivityName });
        }
コード例 #8
0
        public void Initialize(Activity activity, ICollection <CorrelationProperty> propertyValues)
        {
            if (this.Initialized)
            {
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, ExecutionStringManager.CorrelationAlreadyInitialized, this.Name));
            }

            SetValue(PropertiesProperty, propertyValues);

            // fire correlation initialized events
            CorrelationTokenEventArgs eventArgs = new CorrelationTokenEventArgs(this, true);
            IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> > subscribers = GetValue(SubscriptionsProperty) as IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> >;

            if (subscribers != null)
            {
                foreach (ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> subscriber in subscribers)
                {
                    subscriber.InvokeDelegate(ContextActivityUtils.ContextActivity(activity), eventArgs, true, false);
                }
            }
            SetValue(InitializedProperty, true);
            WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "CorrelationToken initialized for {0} owner activity {1} ", this.Name, this.OwnerActivityName);
        }
コード例 #9
0
 internal Guid GetContext(Activity activity)
 {
     return(((ActivityExecutionContextInfo)ContextActivityUtils.ContextActivity(activity).GetValue(Activity.ActivityExecutionContextInfoProperty)).ContextGuid);
 }
コード例 #10
0
        public void SubscribeForCorrelationTokenInitializedEvent(Activity activity, IActivityEventListener <CorrelationTokenEventArgs> dataChangeListener)
        {
            if (dataChangeListener == null)
            {
                throw new ArgumentNullException("dataChangeListener");
            }
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }
            ActivityExecutorDelegateInfo <CorrelationTokenEventArgs>          item = new ActivityExecutorDelegateInfo <CorrelationTokenEventArgs>(dataChangeListener, ContextActivityUtils.ContextActivity(activity), true);
            IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> > list = base.GetValue(SubscriptionsProperty) as IList <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> >;

            if (list == null)
            {
                list = new List <ActivityExecutorDelegateInfo <CorrelationTokenEventArgs> >();
                base.SetValue(SubscriptionsProperty, list);
            }
            list.Add(item);
        }