Domanda

Sto creando un ActivityToolboxItem per un'attività personalizzata in WF. Sto cercando di fare quanto più lavoro possibile per i progettisti all'interno del metodo CreateComponentsCore. Quello che sto cercando di finire con è la seguente:

1) La mia attività su misura ( TriggerActivity , un SequenceActivity ), contenente le seguenti:
2) Una TriggerEvaluatorActivity (un semplice attività ), che è destinato a una proprietà sulla TriggerActivity
3) Un IfElseActivity , che ha due rami
4) Una IfElseBranchActivity che contiene
5) Una TerminateActivity , e
6) Un IfElseBranchActivity che è vuoto, attraverso il quale fluisce l'esecuzione quando il TriggerEvaluatorActivity restituisce true.

Designers passare il TriggerEvaluatorActivity con uno o più implementazioni che eseguono le valutazioni complesse contro un contesto di esecuzione.

La sua piuttosto semplice da impostare questo nel codice, ma sono completamente bloccato su come spin up un ActivityCondition che verrà aggiunto al IfElseBranchActivity per il controllo della flusso di esecuzione.

Tutto quello che devi fare è valutare una proprietà sulla TriggerEvaluatorActivity . Ho creato una regola bella bel tramite il codice dom, ma non riesco a impostare che direttamente sul IfElseBranchActivity , devo riporre la regola da qualche parte e farvi riferimento nell'attività.

Quindi, credo che la mia domanda è, una volta che ho creato una regola nel codice, come faccio ad aggiungere la mia regola per il flusso di lavoro all'interno di un ActivityToolboxItem personalizzato in modo che le attività che ho costruito nel codice possono fare riferimento a esso?

È stato utile?

Soluzione

questa domanda su MSDN , la sua memorizzato in una proprietà di dipendenza sotto la radice di attività. Non sono sicuro se l'esempio di codice è corretto o non ancora.


Opere. Ecco alcuni esempi di codice:

protected override System.ComponentModel.IComponent[] 
    CreateComponentsCore(System.ComponentModel.Design.IDesignerHost host)
{
    var trigger = new Trigger() { Name = "Trigger" };
    var never = new Never() { Name = "NeverTrigger" };
    var ifelse = new IfElseActivity() { Name = "IfElse" };
    var stop = new TerminateActivity() { Name = "StopJob" };
    var failed = new IfElseBranchActivity() { Name = "NotTriggered" };
    var succeeded = new IfElseBranchActivity() { Name = "Triggered" };
    // build tree
    failed.Activities.Add(stop);
    ifelse.Activities.Add(failed);
    ifelse.Activities.Add(succeeded);
    trigger.Activities.Add(never);
    trigger.Activities.Add(ifelse);
    // create rule if it doesn't already exist
    var ruleDefinitions = GetRuleDefinitions
        (host.RootComponent as DependencyObject);
    if (!ruleDefinitions.Conditions.Contains(RuleName))
    {
        var neverTrigger = 
            new CodePropertyReferenceExpression
                (new CodeThisReferenceExpression(), 
                "NeverTrigger");
        var triggered = 
            new CodePropertyReferenceExpression
                (neverTrigger, 
                "Triggered");
        var falseSide = new CodeBinaryOperatorExpression();
        falseSide.Left = triggered;
        falseSide.Right = new CodePrimitiveExpression(false);
        falseSide.Operator = CodeBinaryOperatorType.ValueEquality;

        var ruleCondition = new RuleExpressionCondition
            (RuleName, falseSide);


        ruleDefinitions.Conditions.Add(ruleCondition);
    }
    // add rule to the failed branch; 
    // don't need a rule for the succeeded branch
    failed.Condition = new RuleConditionReference() 
        { ConditionName = RuleName };

    return new IComponent[] { trigger };
}

private RuleDefinitions GetRuleDefinitions
    (DependencyObject rootComponent)
{
    var ruleDefinitions = rootComponent.GetValue
        (RuleDefinitions.RuleDefinitionsProperty) as RuleDefinitions;
    if (ruleDefinitions == null)
    {
        ruleDefinitions = new RuleDefinitions();
        rootComponent.SetValue(RuleDefinitions.RuleDefinitionsProperty, 
            ruleDefinitions);
    }
    return ruleDefinitions;
}

Altri suggerimenti

Will -

E 'possibile che le nuove regole sono contrassegnati fino a quando non sono stati convalidati. Hai visto se si potesse direttamente li convalidare subito dopo l'aggiunta di loro?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top