2016-12-10 8 views
1

updating long-running flows with multiple child flows and custom activities에 대한 내 이전 질문과 관련하여 제작 준비가 완료된 워크 플로를 수정하기위한 코드는 물론 계획을 구현하고 있습니다.비주얼 디자이너를 사용한 동적 업데이트 : 흐름을 코드로 변환 할 수 있습니까?

다른 질문에서 설명한 여러 문제 외에도 동적 업데이트를 위해 준비한 비주얼 디자이너를 디버깅하려고합니다. .xaml에서 diff를 실행 한 후 WorkflowViewState가 혼란 스러울 때 나타나는 문제입니다.

previous posts에 따르면 시각적 디자이너를 포기하는 것이이 문제를 해결하는 확실한 방법 중 하나입니다. 그러나, 나는 보이는 코드를 발견했습니다. 거기에 저를 데려옵니다. 나는 DynamicUpdateServices.PrepareForUpdate 방법을 호출 한 후, 다시 파일에 MainProcessFlow.xaml를 저장하고있어 어떻게 여기에 있습니다 :이 메서드를 호출하고, 비주얼 디자이너에서 .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을 dynamicupdate 정보없이 다시 저장하면 순서는 여전히 올바르지 않습니다. xaml에서 Viewstate를 설정하는 데 필요한 많은 설명서가 없습니다. 내가 놓친 게 있니?

다른 방법으로 비주얼 디자이너를 선택하지 않는 것이 좋습니다. 우리는 거의 1 년 간의 워크 플로우를 가지고 있기 때문에 엄청난 사업 일 것이지만 DynamicUpdate를 작동시키는 것이 더 중요합니다.

+0

비주얼 디자이너를 포기하는 대신 워크 플로 기반을 완전히 포기하고 자체 워크 플로 엔진을 사용했습니다. – alaskanloops

답변

3

방금 ​​문제를 해결했는데 을 DynamicUpdateServices.PrepareForUpdate(builder) 앞에 넣었습니다. 문제가 무엇인지 모르겠지만 PrepareForUpdate 후에 GetViewStateManager의 결과가 null입니다. 모든 작업을 수행 한 후에 ViewStateManagerSaveBuilderToFile()으로 전달하여 사용합니다.