このトピックの内容は、Windows Workflow Foundation 4 に該当します。
.NET Framework Version 4 には、カスタム アクティビティを作成するオプションがいくつか用意されています。特定のアクティビティを作成するために使用する適切な方法は、実行時に必要な機能によって異なります。
カスタム アクティビティを作成するために使用する基本アクティビティ クラスの決定
次の表は、カスタム アクティビティの基本クラスに使用できる機能の一覧です。
基本アクティビティ クラス | 使用できる機能 |
---|---|
システム標準アクティビティおよびカスタム アクティビティのグループを複合アクティビティに構成します。 |
|
オーバーライドできる Execute メソッドを提供することで、命令型機能を実装します。また、追跡、変数、および引数へのアクセスを提供します。 |
|
CodeActivity のすべての機能を提供します。さらに、アクティビティの実行中止、子アクティビティの実行の取り消し、ブックマークの使用、および、アクティビティ、アクティビティのアクション、および機能のスケジュールも提供します。 |
|
WF デザイナーおよび IcustomTypeDescriptor を介したランタイム機構と連携するアクティビティの構築に対応する、DOM のようなアプローチを提供します。これにより、新しい型を定義せずに新しいアクティビティを作成できるようになります。 |
アクティビティを使用したアクティビティの作成
Activity から派生するアクティビティは、他の既存のアクティビティをまとめることで機能を構成します。これらのアクティビティには、既存のカスタム アクティビティと、.NET Framework Version 4 アクティビティ ライブラリのアクティビティを使用できます。これらのアクティビティをまとめることは、カスタム機能を作成するための最も基本的な方法です。このアプローチは、ワークフローを作成するうえでビジュアル デザイン環境を使用するときによく採用されます。
CodeActivity を使用したアクティビティの作成
CodeActivity から派生するアクティビティは、Execute メソッドをカスタムの命令型コードでオーバーライドすることで、命令型機能を実装できます。カスタム コードが実行されるのは、アクティビティが実行時に実行されるときです。この方法で作成されたアクティビティはカスタム機能にアクセスできますが、実行時環境へのフル アクセス、Cancel メソッドまたは Abort メソッドのサポートなど、ランタイムのすべての機能にアクセスすることはできません。CodeActivity を実行すると、(CodeActivityContext クラスを介して) 限定されたバージョンの実行時環境にアクセスできます。CodeActivity を使用して作成したアクティビティは、引数と変数の解決、拡張、および追跡にアクセスできます。非同期アクティビティのスケジュールは、AsyncCodeActivity を使用して実行できます。
NativeActivity を使用したアクティビティの作成
NativeActivity から派生するアクティビティは、CodeActivity から派生するアクティビティと同様に、Execute をオーバーライドすることで、命令型機能を作成します。ただし、Execute メソッドに渡される NativeActivityContext を介して、ワークフロー ランタイムのすべての機能にもアクセスできます。このコンテキストは、子アクティビティのスケジュールと取り消し、ActivityAction オブジェクトと ActivityFunc オブジェクトの実行、実行の取り消しと中止、プロパティと拡張の実行へのアクセス、およびブックマーク (一時停止したワークフローの再開を処理) をサポートします。
DynamicActivity を使用したアクティビティの作成
他の 3 種類のアクティビティとは異なり、DynamicActivity から新しい型を派生することでは新しい機能は作成されません (クラスはシールされています)。その代わり、アクティビティのドキュメント オブジェクト モデル (DOM) を使用して、Properties プロパティと Implementation プロパティに機能をまとめることで、新しい機能を作成します。
結果を返すアクティビティの作成
多くのアクティビティは、実行後に結果を返します。この目的でアクティビティにカスタムの OutArgument を定義することは常に可能ですが、代わりに Activity を使用するか、CodeActivity または NativeActivity から派生することをお勧めします。これらの各基本クラスには、アクティビティの戻り値に使用できる Result という OutArgument があります。