void IActivityEventListener <ActivityExecutionStatusChangedEventArgs> .OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e) { if (sender == null) { throw new ArgumentNullException("sender"); } if (e == null) { throw new ArgumentNullException("e"); } ActivityExecutionContext context = sender as ActivityExecutionContext; if (context == null) { throw new ArgumentException(SR.Error_SenderMustBeActivityExecutionContext, "sender"); } if (e.ExecutionStatus == ActivityExecutionStatus.Closed) { // Remove status change subscription. e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, this); // Do it again if there are any more. ActivityExecutionStatus status = CompensateTargetActivity(context); if (status == ActivityExecutionStatus.Closed) { context.CloseActivity(); } } }
void IActivityEventListener <ActivityExecutionStatusChangedEventArgs> .OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e) { if (sender == null) { throw new ArgumentNullException("sender"); } if (e == null) { throw new ArgumentNullException("e"); } ActivityExecutionContext context = sender as ActivityExecutionContext; if (context == null) { throw new ArgumentException("Error_SenderMustBeActivityExecutionContext", "sender"); } if (e.ExecutionStatus == ActivityExecutionStatus.Closed) { e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, this); if (this.CompensateTargetActivity(context) == ActivityExecutionStatus.Closed) { context.CloseActivity(); } } }
protected internal sealed override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { executionContext.CloseActivity(); string error = this.Error; executionContext.TerminateWorkflowInstance(new WorkflowTerminatedException(error)); return(ActivityExecutionStatus.Closed); }
protected internal sealed override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { executionContext.CloseActivity(); string error = this.Error; executionContext.SuspendWorkflowInstance(error); return(ActivityExecutionStatus.Closed); }
void IActivityEventListener <EventArgs> .OnEvent(object sender, EventArgs e) { ActivityExecutionContext context = (ActivityExecutionContext)sender; if ((context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) && (ExecuteActivity(context.Activity, context, true) == ActivityExecutionStatus.Closed)) { context.CloseActivity(); } }
protected internal override sealed ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { executionContext.CloseActivity(); string suspendReason = this.Error; executionContext.SuspendWorkflowInstance(suspendReason); return(ActivityExecutionStatus.Closed); }
public void OnEvent(object sender, EventArgs e) { ActivityExecutionContext context = (ActivityExecutionContext)sender; if ((context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) && (this.ExecuteActivityNow(context) == ActivityExecutionStatus.Closed)) { context.CloseActivity(); } }
public static void OnEvent(CompositeActivity activity, object sender, ActivityExecutionStatusChangedEventArgs e) { ActivityExecutionContext executionContext = sender as ActivityExecutionContext; e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, (IActivityEventListener <ActivityExecutionStatusChangedEventArgs>)activity); if (((activity.ExecutionStatus == ActivityExecutionStatus.Canceling) || (activity.ExecutionStatus == ActivityExecutionStatus.Faulting)) || ((activity.ExecutionStatus == ActivityExecutionStatus.Executing) && !TryScheduleNextChild(activity, executionContext))) { activity.RemoveProperty(ActiveChildQualifiedNameProperty); executionContext.CloseActivity(); } }
public static void OnWorkflowChangesCompleted(CompositeActivity activity, ActivityExecutionContext executionContext) { string str = activity.GetValue(ActiveChildQualifiedNameProperty) as string; bool flag = (bool)activity.GetValue(ActiveChildRemovedProperty); if (((str != null) && flag) && (((activity.ExecutionStatus == ActivityExecutionStatus.Canceling) || (activity.ExecutionStatus == ActivityExecutionStatus.Faulting)) || ((activity.ExecutionStatus == ActivityExecutionStatus.Executing) && !TryScheduleNextChild(activity, executionContext)))) { activity.RemoveProperty(ActiveChildQualifiedNameProperty); executionContext.CloseActivity(); } activity.RemoveProperty(ActiveChildRemovedProperty); }
protected internal override void OnWorkflowChangesCompleted(ActivityExecutionContext executionContext) { if (executionContext == null) { throw new ArgumentNullException("executionContext"); } if (this.activeChildRemoved) { executionContext.CloseActivity(); this.activeChildRemoved = false; } base.OnWorkflowChangesCompleted(executionContext); }
void IActivityEventListener <EventArgs> .OnEvent(object sender, EventArgs e) { ActivityExecutionContext context = (ActivityExecutionContext)sender; // only if activity is still executing, then run it if (context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) { ActivityExecutionStatus newStatus = TransactedContextFilter.ExecuteActivity(context.Activity, context, true); if (newStatus == ActivityExecutionStatus.Closed) { context.CloseActivity(); } } }
public void OnEvent(object sender, EventArgs e) { ActivityExecutionContext context = (ActivityExecutionContext)sender; // only if activity is still executing, then run it if (context.Activity.ExecutionStatus == ActivityExecutionStatus.Executing) { ActivityExecutionStatus newStatus = ExecuteActivityNow(context); if (newStatus == ActivityExecutionStatus.Closed) { context.CloseActivity(); } } }
public static void OnWorkflowChangesCompleted(CompositeActivity activity, ActivityExecutionContext executionContext) { String activeChildQualifiedName = activity.GetValue(ActiveChildQualifiedNameProperty) as String; bool activeChildRemovedInDynamicUpdate = (bool)activity.GetValue(ActiveChildRemovedProperty); if (activeChildQualifiedName != null && activeChildRemovedInDynamicUpdate) { //We have our active child removed. if (activity.ExecutionStatus == ActivityExecutionStatus.Canceling || activity.ExecutionStatus == ActivityExecutionStatus.Faulting || activity.ExecutionStatus == ActivityExecutionStatus.Executing && !TryScheduleNextChild(activity, executionContext)) { activity.RemoveProperty(ActiveChildQualifiedNameProperty); executionContext.CloseActivity(); } } activity.RemoveProperty(ActiveChildRemovedProperty); }
void IActivityEventListener <ActivityExecutionStatusChangedEventArgs> .OnEvent(object sender, ActivityExecutionStatusChangedEventArgs e) { if (sender == null) { throw new ArgumentNullException("sender"); } if (e == null) { throw new ArgumentNullException("e"); } ActivityExecutionContext context = sender as ActivityExecutionContext; if (context == null) { throw new ArgumentException(SR.Error_SenderMustBeActivityExecutionContext, "sender"); } e.Activity.UnregisterForStatusChange(Activity.ClosedEvent, this); context.CloseActivity(); }
public override bool Run(IWorkflowCoreRuntime workflowCoreRuntime) { // get state reader Activity contextActivity = workflowCoreRuntime.GetContextActivityForId(this.ContextId); Activity activity = contextActivity.GetActivityByName(this.activityName); using (workflowCoreRuntime.SetCurrentActivity(activity)) { using (ActivityExecutionContext activityExecutionContext = new ActivityExecutionContext(activity)) { ActivityExecutor activityExecutor = ActivityExecutors.GetActivityExecutor(activity); switch (this.operation) { case ActivityOperationType.Execute: if (activity.ExecutionStatus == ActivityExecutionStatus.Executing) { try { workflowCoreRuntime.RaiseActivityExecuting(activity); ActivityExecutionStatus newStatus = activityExecutor.Execute(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) { activityExecutionContext.CloseActivity(); } else if (newStatus != ActivityExecutionStatus.Executing) { throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Executing.ToString())); } } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Execute of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.Cancel: if (activity.ExecutionStatus == ActivityExecutionStatus.Canceling) { try { ActivityExecutionStatus newStatus = activityExecutor.Cancel(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) { activityExecutionContext.CloseActivity(); } else if (newStatus != ActivityExecutionStatus.Canceling) { throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Canceling.ToString())); } } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Cancel of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.Compensate: if (activity.ExecutionStatus == ActivityExecutionStatus.Compensating) { try { ActivityExecutionStatus newStatus = activityExecutor.Compensate(activity, activityExecutionContext); if (newStatus == ActivityExecutionStatus.Closed) { activityExecutionContext.CloseActivity(); } else if (newStatus != ActivityExecutionStatus.Compensating) { throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Compensating.ToString())); } } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; case ActivityOperationType.HandleFault: if (activity.ExecutionStatus == ActivityExecutionStatus.Faulting) { try { ActivityExecutionStatus newStatus = activityExecutor.HandleFault(activity, activityExecutionContext, this.exceptionToDeliver); if (newStatus == ActivityExecutionStatus.Closed) { activityExecutionContext.CloseActivity(); } else if (newStatus != ActivityExecutionStatus.Faulting) { throw new InvalidOperationException(SR.GetString(SR.InvalidExecutionStatus, activity.QualifiedName, newStatus.ToString(), ActivityExecutionStatus.Faulting.ToString())); } } catch (Exception e) { System.Workflow.Runtime.WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", activity.QualifiedName, e.ToString()); throw; } } break; } } } return(true); }
public override bool Run(IWorkflowCoreRuntime workflowCoreRuntime) { Activity activityByName = workflowCoreRuntime.GetContextActivityForId(base.ContextId).GetActivityByName(this.activityName); using (workflowCoreRuntime.SetCurrentActivity(activityByName)) { using (ActivityExecutionContext context = new ActivityExecutionContext(activityByName)) { ActivityExecutor activityExecutor = ActivityExecutors.GetActivityExecutor(activityByName); switch (this.operation) { case ActivityOperationType.Execute: if (activityByName.ExecutionStatus != ActivityExecutionStatus.Executing) { goto Label_0309; } try { workflowCoreRuntime.RaiseActivityExecuting(activityByName); ActivityExecutionStatus status = activityExecutor.Execute(activityByName, context); if (status == ActivityExecutionStatus.Closed) { context.CloseActivity(); } else if (status != ActivityExecutionStatus.Executing) { throw new InvalidOperationException(SR.GetString("InvalidExecutionStatus", new object[] { activityByName.QualifiedName, status.ToString(), ActivityExecutionStatus.Executing.ToString() })); } goto Label_0309; } catch (Exception exception) { WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Execute of Activity {0} threw {1}", new object[] { activityByName.QualifiedName, exception.ToString() }); throw; } break; case ActivityOperationType.Cancel: break; case ActivityOperationType.Compensate: goto Label_01A4; case ActivityOperationType.HandleFault: goto Label_0248; default: goto Label_0309; } if (activityByName.ExecutionStatus != ActivityExecutionStatus.Canceling) { goto Label_0309; } try { ActivityExecutionStatus status2 = activityExecutor.Cancel(activityByName, context); if (status2 == ActivityExecutionStatus.Closed) { context.CloseActivity(); } else if (status2 != ActivityExecutionStatus.Canceling) { throw new InvalidOperationException(SR.GetString("InvalidExecutionStatus", new object[] { activityByName.QualifiedName, status2.ToString(), ActivityExecutionStatus.Canceling.ToString() })); } goto Label_0309; } catch (Exception exception2) { WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Cancel of Activity {0} threw {1}", new object[] { activityByName.QualifiedName, exception2.ToString() }); throw; } Label_01A4: if (activityByName.ExecutionStatus != ActivityExecutionStatus.Compensating) { goto Label_0309; } try { ActivityExecutionStatus status3 = activityExecutor.Compensate(activityByName, context); if (status3 == ActivityExecutionStatus.Closed) { context.CloseActivity(); } else if (status3 != ActivityExecutionStatus.Compensating) { throw new InvalidOperationException(SR.GetString("InvalidExecutionStatus", new object[] { activityByName.QualifiedName, status3.ToString(), ActivityExecutionStatus.Compensating.ToString() })); } goto Label_0309; } catch (Exception exception3) { WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", new object[] { activityByName.QualifiedName, exception3.ToString() }); throw; } Label_0248: if (activityByName.ExecutionStatus == ActivityExecutionStatus.Faulting) { try { ActivityExecutionStatus status4 = activityExecutor.HandleFault(activityByName, context, this.exceptionToDeliver); if (status4 == ActivityExecutionStatus.Closed) { context.CloseActivity(); } else if (status4 != ActivityExecutionStatus.Faulting) { throw new InvalidOperationException(SR.GetString("InvalidExecutionStatus", new object[] { activityByName.QualifiedName, status4.ToString(), ActivityExecutionStatus.Faulting.ToString() })); } goto Label_0309; } catch (Exception exception4) { WorkflowTrace.Runtime.TraceEvent(TraceEventType.Error, 1, "Compensate of Activity {0} threw {1}", new object[] { activityByName.QualifiedName, exception4.ToString() }); throw; } } } } Label_0309: return(true); }