保存在WF4 WorkflowDesigner中

时间:2010-08-23 16:44:07

标签: .net-4.0 workflow-foundation workflow-foundation-4

如何在重新托管的设计器中保存WAM4工作流的XAML,不用将其写入文件?我想将序列化工作流作为XML字符串存储在数据库中。

给定一个名为w的WorkflowDesigner实例,这将保存到文件:

WorkflowDesigner.Flush();
w.Save("filename.xaml");

我希望这会序列化为字符串 - 但它失败了:

WorkflowDesigner.Flush();
var modelService = WorkflowDesigner.Context.Services.GetService<ModelService>();
var workflow = modelService.Root;
var xml = XamlServices.Save(workflow);

...在保存单个Sequence活动时,它会显示“Type”System.Activities.Presentation.Model.ModelItemImpl'不可见。如果类型是本地的,请在XamlReaderSettings中设置LocalAssembly字段。

3 个答案:

答案 0 :(得分:3)

是的,使用Flush()和Text将xaml作为字符串。使用Save()保存到文件或流,在这种情况下不需要Flush()。

答案 1 :(得分:2)

嗯,我没有用过这个; API似乎有点......奇怪。但是从文档中可以看出,当您在Flush()的实例上调用WorkflowDesigner时,它会将当前工作流保存到名为Text的公共属性中。您应该能够抓住该文本并将其粘贴到您的数据库中。

来自docs

  

在获得此值之前,请致电   Flush()转换当前   文本工作流程。设置完之后   value,调用Load()加载XAML   进入工作流程。

答案 2 :(得分:1)

使用ActivityXamlServices和StringWriter将内容刷新为字符串。