我们使用VS设计器创建了一个WF 4.5工作流,并存储在.xaml文件中,我们希望在调用之前以编程方式更改该文件。我们只想根据服务调用的结果将一个活动换成另一个活动。当我尝试进行概念验证时,我无法运行更新的定义。
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
活动是一个活动,其中包含一个Sequence
活动,其中包含一个{&#34}之前打印的WriteLine
活动。我希望能够将写入行活动换成后面说的新行。交换它并不仅仅是更改文本很重要,因为将来我们希望能够使用不同类型的Activity
。
此代码编译并运行,但不是在&#34;之后显示&#34;它显示&#34;之前&#34;。
有可能做我要问的事吗?
谢谢
答案 0 :(得分:0)
我明白了。诀窍是使用ActivityBuilder
创建XamlServices
,然后可以轻松修改:
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();