2016-12-10 3 views
1

В связи с моим предыдущим вопросом о 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 будет более приоритетной.

+0

Вместо того, чтобы отказаться от визуального дизайнера, мы полностью отказались от основания рабочего процесса и развернули собственный механизм рабочего процесса. – alaskanloops

ответ

3

Я просто исправил такую ​​проблему, и я сделал это, взяв WorkflowViewState.GetViewStateManager(builder.Implementation) до DynamicUpdateServices.PrepareForUpdate(builder). Я не знаю, в чем проблема, но после I PrepareForUpdate и результат GetViewStateManager равен NULL. После того, как я все сделаю, я передаю ViewStateManager в SaveBuilderToFile() и использую его там.

Смежные вопросы