与我之前关于使用多个子流和自定义活动更新长期运行的流的问题相关,我正在实施计划以及在工作流发布到生产后修改工作流的代码。
除了另一个问题中概述的各种问题外,我还试图调试在准备好进行动态更新后出现混乱的视觉设计器。在 .xaml 上运行差异后,WorkflowViewState 变得混乱似乎是一个问题。
根据之前的帖子,似乎放弃视觉设计师是解决这个问题的一种可靠方法。但是,我发现似乎几乎可以让我到达那里的代码。这是我在调用DynamicUpdateServices.PrepareForUpdate
方法后将 MainProcessFlow.xaml 保存回文件的方式:
private static void SaveBuilderToFile(ActivityBuilder builder, string filePath)
{
// Make sure the activity builder has the right information about the c# expressions (even though its visual basic)
VisualBasic.SetSettings(builder, VisualBasic.GetSettings(builder));
// Set c# as the language
System.Activities.Presentation.Expressions.ExpressionActivityEditor.SetExpressionActivityEditor(builder, "C#");
// This is what I was hoping would correctly set the Viewstate
WorkflowViewState.SetViewStateManager(
builder.Implementation, WorkflowViewState.GetViewStateManager(builder.Implementation));
string fullPath = Path.GetFullPath(filePath);
using (FileStream file = File.Create(fullPath))
{
using (XmlWriter xmlWriter = XmlWriter.Create(file, new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true }))
{
using (XamlWriter xamlWriter = ActivityXamlServices.CreateBuilderWriter( new XamlXmlWriter(xmlWriter, new XamlSchemaContext())))
{
XamlServices.Save(xamlWriter, builder);
}
}
}
}
调用此方法并在可视化设计器中打开 .xaml 后,活动出现故障。流程仍然“正确”,因为箭头指向正确的方向,但布局混乱。在进行更改、创建更新映射并在没有动态更新信息的情况下将 .xaml 保存回来后,顺序仍然不正确。关于在 xaml 中设置 Viewstate 的文档(我可以找到)并不多。我错过了什么吗?
或者,放弃视觉设计师是更好的选择吗?我们有将近一年的工作流程,所以这将是一项艰巨的任务,但让 DynamicUpdate 工作是一个更高的优先级。