Example #1
0
        private Constraint ProcessParentChainConstraints()
        {
            DelegateInArgument <System.Activities.Statements.TransactionScope> element = new DelegateInArgument <System.Activities.Statements.TransactionScope> {
                Name = "element"
            };
            DelegateInArgument <ValidationContext> argument = new DelegateInArgument <ValidationContext> {
                Name = "validationContext"
            };
            DelegateInArgument <Activity> argument2 = new DelegateInArgument <Activity> {
                Name = "parent"
            };
            Constraint <System.Activities.Statements.TransactionScope> constraint = new Constraint <System.Activities.Statements.TransactionScope>();
            ActivityAction <System.Activities.Statements.TransactionScope, ValidationContext> action = new ActivityAction <System.Activities.Statements.TransactionScope, ValidationContext> {
                Argument1 = element,
                Argument2 = argument
            };
            Sequence           sequence = new Sequence();
            ForEach <Activity> item     = new ForEach <Activity>();
            GetParentChain     chain    = new GetParentChain {
                ValidationContext = argument
            };

            item.Values = chain;
            ActivityAction <Activity> action2 = new ActivityAction <Activity> {
                Argument = argument2
            };
            Sequence sequence2             = new Sequence();
            If       @if                   = new If();
            Equal <Type, Type, bool> equal = new Equal <Type, Type, bool>();
            ObtainType type                = new ObtainType {
                Input = argument2
            };

            equal.Left    = type;
            equal.Right   = new InArgument <Type>(context => typeof(System.Activities.Statements.TransactionScope));
            @if.Condition = equal;
            Sequence         sequence3  = new Sequence();
            AssertValidation validation = new AssertValidation {
                IsWarning = 1
            };
            AbortInstanceFlagValidator validator = new AbortInstanceFlagValidator {
                ParentActivity   = argument2,
                TransactionScope = new InArgument <System.Activities.Statements.TransactionScope>(context => element.Get(context))
            };

            validation.Assertion    = validator;
            validation.Message      = new InArgument <string>(System.Activities.SR.AbortInstanceOnTransactionFailureDoesNotMatch);
            validation.PropertyName = "AbortInstanceOnTransactionFailure";
            sequence3.Activities.Add(validation);
            AssertValidation        validation2 = new AssertValidation();
            IsolationLevelValidator validator2  = new IsolationLevelValidator {
                ParentActivity        = argument2,
                CurrentIsolationLevel = new InArgument <System.Transactions.IsolationLevel>(context => element.Get(context).IsolationLevel)
            };

            validation2.Assertion    = validator2;
            validation2.Message      = new InArgument <string>(System.Activities.SR.IsolationLevelValidation);
            validation2.PropertyName = "IsolationLevel";
            sequence3.Activities.Add(validation2);
            @if.Then = sequence3;
            sequence2.Activities.Add(@if);
            action2.Handler = sequence2;
            item.Body       = action2;
            sequence.Activities.Add(item);
            action.Handler  = sequence;
            constraint.Body = action;
            return(constraint);
        }
Example #2
0
        private Constraint ProcessChildSubtreeConstraints()
        {
            DelegateInArgument <System.Activities.Statements.TransactionScope> argument = new DelegateInArgument <System.Activities.Statements.TransactionScope> {
                Name = "element"
            };
            DelegateInArgument <ValidationContext> argument2 = new DelegateInArgument <ValidationContext> {
                Name = "validationContext"
            };
            DelegateInArgument <Activity> delegateArgument = new DelegateInArgument <Activity> {
                Name = "child"
            };
            Variable <bool> variable = new Variable <bool>();
            Constraint <System.Activities.Statements.TransactionScope> constraint = new Constraint <System.Activities.Statements.TransactionScope>();
            ActivityAction <System.Activities.Statements.TransactionScope, ValidationContext> action = new ActivityAction <System.Activities.Statements.TransactionScope, ValidationContext> {
                Argument1 = argument,
                Argument2 = argument2
            };
            Sequence sequence = new Sequence {
                Variables = { variable }
            };
            ForEach <Activity> item    = new ForEach <Activity>();
            GetChildSubtree    subtree = new GetChildSubtree {
                ValidationContext = argument2
            };

            item.Values = subtree;
            ActivityAction <Activity> action2 = new ActivityAction <Activity> {
                Argument = delegateArgument
            };
            Sequence sequence2             = new Sequence();
            If       @if                   = new If();
            Equal <Type, Type, bool> equal = new Equal <Type, Type, bool>();
            ObtainType type                = new ObtainType {
                Input = new InArgument <Activity>(delegateArgument)
            };

            equal.Left    = type;
            equal.Right   = new InArgument <Type>(context => typeof(CompensableActivity));
            @if.Condition = equal;
            Assign <bool> assign = new Assign <bool> {
                To    = new OutArgument <bool>(variable),
                Value = new InArgument <bool>(true)
            };

            @if.Then = assign;
            sequence2.Activities.Add(@if);
            action2.Handler = sequence2;
            item.Body       = action2;
            sequence.Activities.Add(item);
            AssertValidation     validation = new AssertValidation();
            Not <bool, bool>     expression = new Not <bool, bool>();
            VariableValue <bool> value2     = new VariableValue <bool> {
                Variable = variable
            };

            expression.Operand      = value2;
            validation.Assertion    = new InArgument <bool>(expression);
            validation.Message      = new InArgument <string>(System.Activities.SR.CompensableActivityInsideTransactionScopeActivity);
            validation.PropertyName = "Body";
            sequence.Activities.Add(validation);
            action.Handler  = sequence;
            constraint.Body = action;
            return(constraint);
        }