Вопрос

Я создаю ActivityToolboxItem Элемент ActivityToolboxItem для пользовательского действия в WF.Я пытаюсь выполнить как можно больше работы для дизайнеров в рамках метода CreateComponentsCore.В итоге я пытаюсь получить следующее:

1) Моя пользовательская активность (Триггерактивность, а Последовательность действий), содержащий следующее:
2) А triggerevaluatorактивность (простой Активность), который привязан к свойству TriggerActivity
3) Ан IfElseActivity ( если активен ), который имеет две ветви
4) Ан ifelsebranchактивность который содержит
5) А Завершать активность, и
6) Ан ifelsebranchактивность это пустое значение, через которое выполняется выполнение, когда TriggerEvaluatorActivity принимает значение true .

Дизайнеры переключают triggerevaluatorактивность с одной или несколькими реализациями, которые выполняют сложные вычисления в контексте выполнения.

Настроить это в коде довольно просто, но я полностью зациклен на том, как раскрутить Условие активности это будет добавлено к ifelsebranchактивность для управления потоком выполнения.

Все, что мне нужно сделать, это оценить свойство на triggerevaluatorактивность.Я создал приятное правило lovely с помощью code dom, но я не могу установить его непосредственно на ifelsebranchактивность, Я должен где-нибудь спрятать правило и ссылаться на него в упражнении.

Итак, я предполагаю, что мой вопрос заключается в следующем: как только я создам правило в коде, как мне добавить мое правило в рабочий процесс из пользовательского ActivityToolboxItem, чтобы действия, которые я создаю в коде, могли ссылаться на него?

Это было полезно?

Решение

Согласно этот вопрос в MSDN, он хранится в свойстве dependency в корневом Activity.Не уверен, верен ли пример кода или еще нет.


Работает.Вот несколько примеров кода:

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;
}

Другие советы

Будет -

Может случиться так, что новые правила будут помечены до тех пор, пока они не будут проверены.Видели ли вы, можете ли вы напрямую проверить их сразу после добавления?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top