更改工作流的定义

Changing the definition of a workflow

我们有一个使用 VS 设计器创建并存储在 .xaml 文件中的 WF 4.5 工作流,我们希望在调用它之前以编程方式更改该文件。我们只想根据服务调用的结果将一个 activity 换成另一个。当我尝试进行概念验证时,无法将更新的定义更新为 运行。

        ChangeMe changeMe = new ChangeMe();
        DynamicUpdateServices.PrepareForUpdate(changeMe);
        var sequence = WorkflowInspectionServices.GetActivities(changeMe).ToArray()[0] as Sequence;
        sequence.Activities.RemoveAt(0);
        WriteLine writeLine = new WriteLine();
        writeLine.Text = new InArgument<string>("after");
        sequence.Activities.Insert(0, writeLine);
        WorkflowInvoker.Invoke(changeMe);
        Console.ReadKey();

ChangeMe activity 是一个 activity,它有一个 Sequence,其中包含一个 WriteLine activity,打印 "before"。我希望能够将那条写行 activity 换成后面写的新行。重要的是换掉它,而不仅仅是更改文本,因为将来我们希望能够使用不同类型的 Activity

此代码编译并 运行s,但不是显示 "after",而是显示 "before"。

是否可以按照我的要求做?

谢谢

我明白了。诀窍是使用 XamlServices 创建一个 ActivityBuilder,然后可以轻松修改它:

        string xaml = File.ReadAllText("../../ChangeMe.xaml");
        ActivityBuilder ab = XamlServices.Load(ActivityXamlServices.CreateBuilderReader(
            new XamlXmlReader(new StringReader(xaml))
            )) as ActivityBuilder;
        Sequence root = ab.Implementation as Sequence;
        WriteLine writeLine = new WriteLine();
        writeLine.Text = new InArgument<string>("after");
        root.Activities[0] = writeLine;
        WorkflowInvoker.Invoke(ab.Implementation);
        Console.ReadKey();