В связи с моим предыдущим вопросом о updating long-running flows with multiple child flows and custom activities, я работаю над реализацией плана, а также кодом для изменения рабочих процессов после того, как они были выпущены на производство.Динамическое обновление с помощью визуального дизайнера: возможно ли, или лучше конвертировать потоки в код?
Помимо различных проблем, изложенных в другом вопросе, я пытаюсь отладить визуальный конструктор, возникший в результате смешения после его подготовки для динамического обновления. После запуска diff на .xaml, похоже, проблема в том, что WorkflowViewState запутался.
Согласно previous posts, кажется, что отказ от визуального дизайнера - это один верный способ решения этой проблемы. Тем не менее, я нашел код, который кажется почти. Вот как я спасая MainProcessFlow.xaml обратно в файл, после вызова метода DynamicUpdateServices.PrepareForUpdate
:
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 обратно без информации о динамическом обновлении порядок по-прежнему неверен. Существует не очень много документации (что я могу найти) при установке Viewstate в xaml. Я что-то упускаю?
В качестве альтернативы, отказ от визуального дизайнера - лучший вариант? У нас почти много рабочих дней, поэтому это будет огромная работа, но работа DynamicUpdate будет более приоритетной.
Вместо того, чтобы отказаться от визуального дизайнера, мы полностью отказались от основания рабочего процесса и развернули собственный механизм рабочего процесса. – alaskanloops