DynamicActivity は、パブリック コンストラクターを持つ具象のシールされたクラスです。 DynamicActivity は、アクティビティ DOM を使用して実行時にアクティビティ機能をアセンブルするために使用できます。
DynamicActivity 機能
DynamicActivity は実行プロパティ、引数、変数にアクセスできますが、子アクティビティのスケジュールや追跡などのランタイム サービスにはアクセスできません。
最上位レベルのプロパティは、ワークフロー Argument オブジェクトを使用して設定できます。 命令型コードでは、これらの引数は新しい型の CLR プロパティを使用して作成されます。 XAML では、 x:Class
タグと x:Member
タグを使用して宣言されます。
ICustomTypeDescriptorを使用してデザイナーとのインターフェイスDynamicActivity使用して構築されたアクティビティ。 デザイナーで作成されたアクティビティは、次の手順に示すように、 Loadを使用して動的に読み込むことができます。
命令型コードを使用して実行時にアクティビティを作成するには
OpenVisual Studio 2010。
[ファイル]、[新規作成]、[プロジェクト] の順に選択します。 [プロジェクトの種類] ウィンドウの [Visual C#] で [ワークフロー 4.0] を選択し、v2010 ノードを選択します。 [テンプレート] ウィンドウで [シーケンシャル ワークフロー コンソール アプリケーション] を選択します。 新しいプロジェクトに DynamicActivitySample という名前を付けます。
HelloActivity プロジェクトで Workflow1.xaml を右クリックし、[削除] を選択 します。
Program.cs を開きます。 ファイルの先頭に次のディレクティブを追加します。
using System.Collections.Generic;
Main
メソッドの内容を次のコードに置き換えます。このコードにより、1 つのWriteLine アクティビティを含むSequence アクティビティが作成され、新しい動的アクティビティのImplementation プロパティに割り当てられます。//Define the input argument for the activity var textOut = new InArgument<string>(); //Create the activity, property, and implementation Activity dynamicWorkflow = new DynamicActivity() { Properties = { new DynamicActivityProperty { Name = "Text", Type = typeof(InArgument<String>), Value = textOut } }, Implementation = () => new Sequence() { Activities = { new WriteLine() { Text = new InArgument<string>(env => textOut.Get(env)) } } } }; //Execute the activity with a parameter dictionary WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } }); Console.ReadLine();
アプリケーションを実行します。 "Hello World!" というテキストが表示されたコンソール ウィンドウ。
XAML を使用して実行時にアクティビティを作成するには
Visual Studio 2010 を開きます。
[ファイル]、[新規作成]、[プロジェクト] の順に選択します。 [プロジェクトの種類] ウィンドウの [Visual C#] で [ワークフロー 4.0] を選択し、v2010 ノードを選択します。 [テンプレート] ウィンドウで [ワークフロー コンソール アプリケーション] を選択します。 新しいプロジェクトに DynamicActivitySample という名前を付けます。
HelloActivity プロジェクトで Workflow1.xaml を開きます。 デザイナーの下部にある [引数 ] オプションをクリックします。
String
型のTextToWrite
と呼ばれる新しいIn
引数を作成します。ツールボックスの [プリミティブ] セクションからデザイナー画面に WriteLine アクティビティをドラッグします。 アクティビティの Text プロパティに
TextToWrite
値を割り当てます。Program.cs を開きます。 ファイルの先頭に次のディレクティブを追加します。
using System.Activities.XamlIntegration;
Main
メソッドの内容を次のコードに置き換えます。Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
アプリケーションを実行します。 "Hello World!" というテキストが表示されたコンソール ウィンドウが表示されます。
ソリューション エクスプローラーで Workflow1.xaml ファイルを右クリックし、[コードの表示] を選択します。 アクティビティ クラスは
x:Class
で作成され、プロパティはx:Property
で作成されることに注意してください。
こちらも参照ください
.NET