TerminateWorkflow.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / TerminateWorkflow.cs / 1305376 / TerminateWorkflow.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------

namespace System.Activities.Statements 
{
    using System; 
    using System.Activities; 
    using System.ComponentModel;
    using System.Collections.ObjectModel; 

    public sealed class TerminateWorkflow : NativeActivity
    {
        public TerminateWorkflow() { } 

        [DefaultValue(null)] 
        public InArgument Reason { get; set; } 

        [DefaultValue(null)] 
        public InArgument Exception { get; set; }

        protected override void CacheMetadata(NativeActivityMetadata metadata)
        { 
            Collection arguments = new Collection();
 
            RuntimeArgument reasonArgument = new RuntimeArgument("Reason", typeof(string), ArgumentDirection.In, false); 
            metadata.Bind(this.Reason, reasonArgument);
 
            RuntimeArgument exceptionArgument = new RuntimeArgument("Exception", typeof(Exception), ArgumentDirection.In, false);
            metadata.Bind(this.Exception, exceptionArgument);

            arguments.Add(reasonArgument); 
            arguments.Add(exceptionArgument);
 
            metadata.SetArgumentsCollection(arguments); 

            if((this.Reason == null || this.Reason.IsEmpty) && 
                (this.Exception == null || this.Exception.IsEmpty))
            {
                metadata.AddValidationError(SR.OneOfTwoPropertiesMustBeSet("Reason", "Exception", "TerminateWorkflow", this.DisplayName));
            } 
        }
 
        protected override void Execute(NativeActivityContext context) 
        {
            // If Reason is provided, we'll create a WorkflowApplicationTerminatedException from 
            // it, wrapping Exception if it is also provided. Otherwise just use Exception.
            // If neither is provided just throw a new WorkflowTerminatedException.
            string reason = Reason.Get(context);
            Exception exception = Exception.Get(context); 
            if (!string.IsNullOrEmpty(reason))
            { 
                context.Terminate(new WorkflowTerminatedException(reason, exception)); 
            }
            else if(exception != null) 
            {
                context.Terminate(exception);
            }
            else 
            {
                context.Terminate(new WorkflowTerminatedException()); 
            } 
        }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK