2016-12-10 13 views
1

私の以前の質問updating long-running flows with multiple child flows and custom activitiesに関連して、プロダクションにリリースされた後にワークフローを変更するための計画とコードを実装しています。ビジュアルデザイナを使用した動的更新:フローをコードに変換することは可能ですか?

他の質問に記載されているさまざまな問題のほかに、私はビジュアルデザイナをデバッグしようとしていますが、ダイナミックアップデートのためにそれを準備した後に混乱しています。 .xamlでdiffを実行すると、WorkflowViewStateが混乱する問題があるようです。

previous postsによれば、ビジュアルデザイナーを放棄することは、この問題を解決する確実な方法の1つです。しかし、私はと思われるコードを見つけました。ほぼが私にそこにいます。このメソッドを呼び出すと、ビジュアルデザイナでの.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); 
       } 
      } 
     } 
    } 

、活動は順不同である:ここで私はDynamicUpdateServices.PrepareForUpdateメソッドを呼び出した後、バックファイルへのMainProcessFlow.xamlを保存しています方法です。矢印は正しい方向を向いていますが、レイアウトは混乱しています。変更を行った後、更新マップを作成し、.xamlをdynamicupdate情報なしで保存すると、順序は間違いです。 ViewStateをxamlに設定することについては、(私が見つけることができる)非常に多くのドキュメントはありません。何か不足していますか?

また、ビジュアルデザイナーはより良い選択肢を放棄していますか?ワークフローは1年近くしかかかりませんでした。そのため、大規模な取り組みになるでしょうが、DynamicUpdateを稼動させることが優先されます。

+0

ビジュアルデザイナーを捨てるのではなく、ワークフローファンデーションを完全に放棄し、独自のワークフローエンジンを導入しました。 – alaskanloops

答えて

3

私はちょうどそのような問題を修正しました。私はWorkflowViewState.GetViewStateManager(builder.Implementation)DynamicUpdateServices.PrepareForUpdate(builder)の前に取っていました。私は問題が何であるかはわかりませんが、PrepareForUpdateの後、GetViewStateManagerの結果はnullです。 私はすべてのものをやった後、ViewStateManagerSaveBuilderToFile()に渡してそこで使用します。

関連する問題