Windowsワークフローファンデーションでは、外部ファイルからワークフローをロードすることは可能ですか?その目的は、ファイルからステートマシンのワークフローを取り出してロードする一般的なワークフローコントローラを作成することです。もし私が行って、VSで利用可能なデザイナを使用すると、ワークフロー図は固定され、特定のユースケースに対してのみ使用できますが、一般的なものを作成する必要があります。ビジュアルスタジオ
0
A
答えて
1
はい、XamlActivityServices
とActivityBuilder
タイプを使用して、XAMLワークフローを保存してファイルから読み込むことができます。ワークフローをコードで動的に構築し、そのサービスをXMLにシリアル化して後で使用することができます。
ユーザーがワークフローを作成および編集できるようにする場合は、必要に応じてアプリケーションでデザイナーを直接再ホストすることもできます。
保存ファイルへのワークフロー
はここでファイルにワークフローを保存するのに非常に速いサンプルです:
:上記var activityBuilder = new ActivityBuilder();
activityBuilder.Name = "HelloWorldApp";
activityBuilder.Properties.Add(new DynamicActivityProperty { Name = "UserName", Type = typeof(InArgument<string>) });
activityBuilder.Implementation = new Sequence
{
Activities =
{
new WriteLine
{
Text = new CSharpValue<string>("\"Hello, \" + UserName + \", how are you?\"")
}
}
};
using (var streamWriter = File.CreateText(@"C:\Temp\MyWorkflow.xaml"))
{
using (var xamlWriter = new XamlXmlWriter(streamWriter, new XamlSchemaContext()))
{
using (var builderWriter = ActivityXamlServices.CreateBuilderWriter(xamlWriter))
{
XamlServices.Save(builderWriter, activityBuilder);
}
}
}
は次のようなXMLファイルを生成する必要があります
<?xml version="1.0" encoding="utf-8"?>
<Activity x:Class="HelloWorld"
xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
xmlns:mca="clr-namespace:Microsoft.CSharp.Activities;assembly=System.Activities"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<x:Members>
<x:Property Name="UserName" Type="InArgument(x:String)" />
</x:Members>
<Sequence>
<WriteLine>
<InArgument x:TypeArguments="x:String">
<mca:CSharpValue x:TypeArguments="x:String">
"Hello, " + UserName + ", how are you?"
</mca:CSharpValue>
</InArgument>
</WriteLine>
</Sequence>
</Activity>
Loading A XA MLからのワークフロー
次のスニペットは、ファイルからワークフローをロードしてから、水和ワークフローを実行する方法を示しています。
var activityXamlServicesSettings = new ActivityXamlServicesSettings
{
CompileExpressions = true
};
var dynamicActivity = ActivityXamlServices.Load(File.OpenRead(@"C:\Temp\MyWorkflow.xaml"), activityXamlServicesSettings) as DynamicActivity;
var workflowInputs = new Dictionary<string, object>
{
{ "UserName", "Me" }
};
var workflowInvoker = new WorkflowInvoker(dynamicActivity);
workflowInvoker.Invoke(workflowInputs);
関連する問題
- 1. ビジュアルスタジオのシンボルツリービュー( "not"ビジュアルスタジオ)
- 2. ビジュアルスタジオ2010とビジュアルスタジオ6
- 3. ビジュアルスタジオ
- 4. ビジュアルスタジオ
- 5. ビジュアルスタジオ
- 6. ビジュアルスタジオ - dotless.compiler
- 7. ビジュアルスタジオ6.0
- 8. ビジュアルスタジオ2015
- 9. ビジュアルスタジオ2010 ExtJsビジュアルデザイナ
- 10. ビジュアルスタジオ2012のLua?
- 11. コンパイラエラーcs1061ビジュアルスタジオ
- 12. ビジュアルスタジオ2017インテリセンスエラー
- 13. ビジュアルスタジオのデバッグツール
- 14. ビジュアルスタジオのキーボードショートカット2015
- 15. ビジュアルスタジオ用Gitエクステンション
- 16. ビジュアルスタジオ2015 intellisense
- 17. ビジュアルスタジオ2013のODAC
- 18. ビジュアルスタジオ2015インストーラプロジェクト
- 19. ビジュアルスタジオ(MAC)コンソールアプリケーション
- 20. ビジュアルスタジオ15インストール
- 21. ビジュアルスタジオ2015タイプスクリプトデバッグ
- 22. ビジュアルスタジオfor Macソリューションエラー
- 23. ビジュアルスタジオ "inconsistent line endings"
- 24. ビジュアルスタジオ完成python
- 25. ビジュアルスタジオ拡張エラー?
- 26. ビジュアルスタジオ統合モード
- 27. ビジュアルスタジオのリンクエラー2015
- 28. ビジュアルスタジオ2015プロフェッショナルアフターコミュニティー
- 29. WebUserControl CSSビジュアルスタジオ
- 30. ビジュアルスタジオと例外
XAMLファイルからクラスメソッドが呼び出されている場所の例を示してください。答えにたくさん感謝して、本当に助けてくれました。 –
ここであなたの他の質問に基づいて、これを行う方法をすでに理解しているようです:http://stackoverflow.com/questions/37390601/how-to-conditionally-use-invokemethod-in-an-xaml-windows-workflow -財団 – ajawad987