public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action) { if (activity == null) { throw new ArgumentNullException("activity"); } if (action == null) { throw new ArgumentNullException("action"); } RemovedActivityAction removedAction = action as RemovedActivityAction; if (removedAction != null && removedAction.RemovedActivityIndex == 0) { return(new ValidationError(SR.GetString(SR.Error_EventActivityIsImmutable), ErrorNumbers.Error_DynamicActivity, false)); } else { AddedActivityAction addedAction = action as AddedActivityAction; if (addedAction != null && addedAction.Index == 0) { return(new ValidationError(SR.GetString(SR.Error_EventActivityIsImmutable), ErrorNumbers.Error_DynamicActivity, false)); } } return(base.ValidateActivityChange(activity, action)); }
public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action) { if (activity == null) { throw new ArgumentNullException("activity"); } if (action == null) { throw new ArgumentNullException("action"); } AddedActivityAction addedAction = action as AddedActivityAction; if (addedAction != null) { //Check existence of nested PersistOnClose/ICompensatable/SupportsTransaction nested anywhere //in the added activity branch System.Collections.Generic.Queue <Activity> childrenQueue = new System.Collections.Generic.Queue <Activity>(); childrenQueue.Enqueue(addedAction.AddedActivity); while (childrenQueue.Count != 0) { Activity childActivity = childrenQueue.Dequeue(); if (childActivity.SupportsTransaction) { return(new ValidationError(SR.GetString(SR.Error_AtomicScopeNestedInNonLRT), ErrorNumbers.Error_AtomicScopeNestedInNonLRT)); } if (childActivity.PersistOnClose) { return(new ValidationError(SR.GetString(SR.Error_NestedPersistOnClose, activity.QualifiedName), ErrorNumbers.Error_NestedPersistOnClose)); } if (childActivity is ICompensatableActivity) { return(new ValidationError(SR.GetString(SR.Error_NestedCompensatableActivity, activity.QualifiedName), ErrorNumbers.Error_NestedCompensatableActivity)); } CompositeActivity compositeActivity = childActivity as CompositeActivity; if (compositeActivity != null) { foreach (Activity grandChild in compositeActivity.EnabledActivities) { childrenQueue.Enqueue(grandChild); } } } } return(base.ValidateActivityChange(activity, action)); }
/// <summary> /// Serialise a <see cref="TrackingWorkflowChangedEventArgs" /> ready for persistence. /// </summary> /// <param name="eventArgs"> /// The original <see cref="TrackingWorkflowChangedEventArgs" /> to serialise. /// </param> /// <returns> /// A <see cref="SerialisableTrackingWorkflowChangedEventArgs" /> containing a /// serialised copy of the <see cref="TrackingWorkflowChangedEventArgs" />. /// </returns> private static SerialisableTrackingWorkflowChangedEventArgs buildSerialisableTrackingWorkflowChangedEventArgs(TrackingWorkflowChangedEventArgs eventArgs) { SerialisableTrackingWorkflowChangedEventArgs serialisableEventArgs = new SerialisableTrackingWorkflowChangedEventArgs(); byte [] serialisedData; bool nonSerialisable; serialiseData(eventArgs, out serialisedData, out nonSerialisable); serialisableEventArgs.NonSerialisable = nonSerialisable; serialisableEventArgs.SerialisedData = serialisedData; serialisableEventArgs.StringData = eventArgs.ToString(); serialisableEventArgs.Type = eventArgs.GetType(); serialisableEventArgs.UnserialisedData = eventArgs; for (int i = 0; i < eventArgs.Changes.Count; i++) { AddedActivityAction addedActivityAction = eventArgs.Changes[i] as AddedActivityAction; if (addedActivityAction != null) { List <SerialisableActivityAddedAction> addedActions = buildSerialisableAddedActivityAction(addedActivityAction, i); foreach (SerialisableActivityAddedAction addedAction in addedActions) { serialisableEventArgs.Changes.Add(addedAction); } continue; } RemovedActivityAction removedActivityAction = eventArgs.Changes[i] as RemovedActivityAction; if (removedActivityAction != null) { List <SerialisableActivityRemovedAction> removedActions = buildSerialisableRemovedActivityAction(removedActivityAction, i); foreach (SerialisableActivityRemovedAction removedAction in removedActions) { serialisableEventArgs.Changes.Add(removedAction); } continue; } } return(serialisableEventArgs); }
public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action) { if (activity == null) { throw new ArgumentNullException("activity"); } if (action == null) { throw new ArgumentNullException("action"); } AddedActivityAction action2 = action as AddedActivityAction; if (action2 != null) { Queue <Activity> queue = new Queue <Activity>(); queue.Enqueue(action2.AddedActivity); while (queue.Count != 0) { Activity activity2 = queue.Dequeue(); if (activity2.SupportsTransaction) { return(new ValidationError(SR.GetString("Error_AtomicScopeNestedInNonLRT"), 0x52e)); } if (activity2.PersistOnClose) { return(new ValidationError(SR.GetString("Error_NestedPersistOnClose", new object[] { activity.QualifiedName }), 0x1a2)); } if (activity2 is ICompensatableActivity) { return(new ValidationError(SR.GetString("Error_NestedCompensatableActivity", new object[] { activity.QualifiedName }), 0x1a6)); } CompositeActivity activity3 = activity2 as CompositeActivity; if (activity3 != null) { foreach (Activity activity4 in activity3.EnabledActivities) { queue.Enqueue(activity4); } } } } return(base.ValidateActivityChange(activity, action)); }
public override ValidationError ValidateActivityChange(Activity activity, ActivityChangeAction action) { if (activity == null) { throw new ArgumentNullException("activity"); } if (action == null) { throw new ArgumentNullException("action"); } RemovedActivityAction action2 = action as RemovedActivityAction; if ((action2 != null) && (action2.RemovedActivityIndex == 0)) { return(new ValidationError(SR.GetString("Error_EventActivityIsImmutable"), 260, false)); } AddedActivityAction action3 = action as AddedActivityAction; if ((action3 != null) && (action3.Index == 0)) { return(new ValidationError(SR.GetString("Error_EventActivityIsImmutable"), 260, false)); } return(base.ValidateActivityChange(activity, action)); }
private static List <SerialisableActivityAddedAction> buildSerialisableAddedActivityAction(AddedActivityAction action, int order) { List <SerialisableActivityAddedAction> addedActivities = new List <SerialisableActivityAddedAction>(); Queue <Activity> activityQueue = new Queue <Activity>(); activityQueue.Enqueue(action.AddedActivity); while (activityQueue.Count > 0) { Activity currentActivity = activityQueue.Dequeue(); if (currentActivity == action.AddedActivity) { // this the top-level activity addedActivities.Add(new SerialisableActivityAddedAction( currentActivity.GetType(), currentActivity.QualifiedName, currentActivity.Parent == null ? null : currentActivity.Parent.QualifiedName, order, WorkflowInstanceHelper.GetXomlDocument(currentActivity))); } else { addedActivities.Add(new SerialisableActivityAddedAction( currentActivity.GetType(), currentActivity.QualifiedName, currentActivity.Parent == null ? null : currentActivity.Parent.QualifiedName, -1, WorkflowInstanceHelper.GetXomlDocument(currentActivity))); } CompositeActivity parentActivity = currentActivity as CompositeActivity; if (parentActivity != null) { foreach (Activity childActivity in parentActivity.Activities) { activityQueue.Enqueue(childActivity); } } } return(addedActivities); }