Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / ActivityExecutorOperation.cs / 1305376 / ActivityExecutorOperation.cs
namespace System.Workflow.ComponentModel { using System; using System.Diagnostics; using System.Globalization; using System.Collections.Generic; [Serializable] internal abstract class SchedulableItem { private int contextId = -1; string activityId = null; protected SchedulableItem(int contextId, string activityId) { this.contextId = contextId; this.activityId = activityId; } public int ContextId { get { return this.contextId; } } public string ActivityId { get { return this.activityId; } } public abstract bool Run(IWorkflowCoreRuntime workflowCoreRuntime); } internal enum ActivityOperationType : byte { Execute = 0, Cancel = 1, Compensate = 2, HandleFault = 3 } [Serializable] internal sealed class ActivityExecutorOperation : SchedulableItem { private string activityName; private ActivityOperationType operation; private Exception exceptionToDeliver; public ActivityExecutorOperation(Activity activity, ActivityOperationType opt, int contextId) : base(contextId, activity.QualifiedName) { this.activityName = activity.QualifiedName; this.operation = opt; } public ActivityExecutorOperation(Activity activity, ActivityOperationType opt, int contextId, Exception e) : this(activity, opt, contextId) { this.exceptionToDeliver = e; } 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 string ToString() { return "ActivityOperation(" + "(" + this.ContextId.ToString(CultureInfo.CurrentCulture) + ")" + this.activityName + ", " + ActivityOperationToString(this.operation) + ")"; } private string ActivityOperationToString(ActivityOperationType operationType) { string retVal = string.Empty; switch (operationType) { case ActivityOperationType.Execute: retVal = "Execute"; break; case ActivityOperationType.Cancel: retVal = "Cancel"; break; case ActivityOperationType.HandleFault: retVal = "HandleFault"; break; case ActivityOperationType.Compensate: retVal = "Compensate"; break; } return retVal; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MultiView.cs
- DBParameter.cs
- OperationFormatter.cs
- CopyAction.cs
- SynchronizingStream.cs
- SqlUtil.cs
- StatusBarAutomationPeer.cs
- CodeNamespace.cs
- FactoryRecord.cs
- ConsoleCancelEventArgs.cs
- DefaultValueTypeConverter.cs
- ServiceBuildProvider.cs
- RuleSettings.cs
- GroupBoxAutomationPeer.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- Substitution.cs
- AggregateNode.cs
- ActivityExecutionContext.cs
- XamlStream.cs
- ServiceSettingsResponseInfo.cs
- GifBitmapEncoder.cs
- Slider.cs
- ServiceDiscoveryElement.cs
- PeerNodeTraceRecord.cs
- DesignerDataColumn.cs
- ExternalCalls.cs
- PartialClassGenerationTaskInternal.cs
- CodeDOMUtility.cs
- AutoResetEvent.cs
- SiteMapHierarchicalDataSourceView.cs
- AddInContractAttribute.cs
- ExceptionWrapper.cs
- Attributes.cs
- GridViewColumn.cs
- ChooseAction.cs
- StackOverflowException.cs
- Action.cs
- HtmlUtf8RawTextWriter.cs
- PackageDigitalSignatureManager.cs
- DataGridViewColumnStateChangedEventArgs.cs
- MethodImplAttribute.cs
- DataPagerFieldItem.cs
- RelationshipDetailsRow.cs
- EntityFrameworkVersions.cs
- WrapPanel.cs
- ControlTemplate.cs
- RecognitionResult.cs
- Utils.cs
- SizeAnimationUsingKeyFrames.cs
- DiscoveryMessageSequenceGenerator.cs
- SettingsPropertyIsReadOnlyException.cs
- Vector3DConverter.cs
- XPathDocument.cs
- COSERVERINFO.cs
- ISFTagAndGuidCache.cs
- ResolveNameEventArgs.cs
- Paragraph.cs
- WebHttpDispatchOperationSelector.cs
- odbcmetadatacolumnnames.cs
- __TransparentProxy.cs
- Themes.cs
- PlainXmlSerializer.cs
- SafeEventLogWriteHandle.cs
- HttpCookie.cs
- ReaderOutput.cs
- InkPresenter.cs
- PaperSize.cs
- SapiRecognizer.cs
- AssemblyName.cs
- AssemblyHash.cs
- Object.cs
- ExtensionSimplifierMarkupObject.cs
- SqlStream.cs
- TimeSpan.cs
- HuffmanTree.cs
- SqlUtils.cs
- invalidudtexception.cs
- ArgumentOutOfRangeException.cs
- DropShadowEffect.cs
- DesignerResources.cs
- HGlobalSafeHandle.cs
- WebSysDescriptionAttribute.cs
- Aggregates.cs
- ExpressionLexer.cs
- WorkflowViewElement.cs
- DefaultProxySection.cs
- COM2TypeInfoProcessor.cs
- WindowsFormsHostAutomationPeer.cs
- HttpListenerRequest.cs
- GeneralTransformCollection.cs
- GPPOINT.cs
- QilXmlReader.cs
- MarshalByValueComponent.cs
- ComponentChangedEvent.cs
- ReaderWriterLockWrapper.cs
- DataView.cs
- TextRange.cs
- TextRangeProviderWrapper.cs
- OracleParameter.cs
- StubHelpers.cs