オブジェクトのスコープ設定や可視性と同様に、アクティビティ定義のスコープと可視性は、他のオブジェクトまたはアクティビティがアクティビティのメンバーにアクセスする機能です。 アクティビティ定義は、次の実装によって実行されます。
アクティビティがユーザーに公開するメンバー (Argument、 Variable、 ActivityDelegate オブジェクト、および子アクティビティ) を決定する。
アクティビティの実行ロジックの実装
実装には、アクティビティのコンシューマーには公開されず、実装の詳細であるメンバーが含まれる場合があります。 型定義と同様に、アクティビティ モデルを使用すると、作成者は定義されているアクティビティの定義に関するアクティビティ メンバーの可視性を修飾できます。 この可視性は、データ スコープなど、メンバーの使用状況の側面を制御します。
範囲
アクティビティ モデルの可視性では、データ スコープに加えて、検証、デバッグ、追跡、トレースなど、アクティビティの他の側面へのアクセスを制限できます。 実行プロパティでは、定義の特定のスコープに対して実行特性を制限するために、可視性とスコープが使用されます。 セカンダリ ルートでは、可視性とスコープを使用して、 CompensableActivity によってキャプチャされた状態を、依存可能なアクティビティが使用される定義のスコープに制限します。
定義と使用法
ワークフローは、基本アクティビティ クラスから継承し、 Built-In アクティビティ ライブラリのアクティビティを使用して、新しいアクティビティを作成することによって記述されます。 アクティビティを使用するには、アクティビティ作成者が定義の各コンポーネントの可視性を構成する必要があります。
Activity メンバー
アクティビティ モデルでは、アクティビティがコンシューマーが使用できるようにする引数、変数、デリゲート、および子アクティビティを定義します。 これらの各メンバーは、 public
または private
として宣言できます。 パブリック メンバーはアクティビティのコンシューマーによって構成されますが、 private
メンバーはアクティビティの作成者によって固定された実装を使用します。 データ スコープの表示規則は次のとおりです。
パブリック メンバーとパブリック子アクティビティのパブリック メンバーは、パブリック変数を参照できます。
プライベート メンバーとパブリック子アクティビティのパブリック メンバーは、引数とプライベート変数を参照できます。
アクティビティのコンシューマーが設定できるメンバーをプライベートにしないでください。
モデルの作成
カスタム アクティビティは、 NativeActivity、 Activity、 CodeActivity、または AsyncCodeActivityを使用して定義されます。 これらのクラスから派生したアクティビティは、可視性が異なるさまざまなメンバー型を公開できます。
NativeActivity
NativeActivityから派生したアクティビティには、命令型コードで記述された動作があり、必要に応じて既存のアクティビティを使用して定義できます。
NativeActivityからアクティビティを派生すると、ランタイムによって公開されるすべての機能へのアクセスが許可されます。 このようなアクティビティのメンバーは、引数を除き、パブリックまたはプライベートの可視性を使用して定義できます。引数は、 public
としてのみ宣言できます。
NativeActivityから派生したクラスのメンバーは、CacheMetadata メソッドに渡されるNativeActivityMetadata構造体を使用してランタイムに宣言されます。
活動
Activityを使用して作成されたアクティビティには、他のアクティビティを作成することによって厳密に設計された動作があります。 Activity クラスには、Implementationを使用してランタイムによって取得された 1 つの実装子アクティビティがあります。 Activityから派生するアクティビティは、パブリック引数、パブリック変数、インポートされた ActivityDelegate、およびインポートされたアクティビティを定義できます。
インポートされた ActivityDelegates とアクティビティは、アクティビティのパブリック子として宣言されますが、アクティビティによって直接スケジュールすることはできません。 この情報は、アクティビティが実行されない場所で親向けの検証を実行しないように、検証中に使用されます。 また、パブリックの子と同様に、インポートされた子も、アクティビティの実装によって参照およびスケジュールできます。 つまり、Activity1 というアクティビティをインポートするアクティビティには、Activity1 をスケジュールする Sequence を実装に含めることができます。
CodeActivity/AsyncCodeActivity
この基本クラスは、命令型コードでの動作の作成に使用されます。 このクラスから派生したアクティビティは、公開する引数にのみアクセスできます。 つまり、これらのアクティビティが公開できるメンバーはパブリック引数だけです。 これらのアクティビティには、他のメンバーや可視性は適用されません。
可視性の概要
次の表は、このセクションの前半の情報をまとめたものです。
メンバーの型 | NativeActivity | 活動 | CodeActivity/AsyncCodeActivity |
---|---|---|---|
論争 | パブリック/プライベート | パブリック | 適用されません |
変数 | パブリック/プライベート | パブリック | 適用されません |
子アクティビティ | パブリック/プライベート | パブリック。実装で定義された 1 つの固定プライベート子。 | 適用されません |
ActivityDelegates | パブリック/プライベート | パブリック | 適用されません |
一般に、アクティビティのコンシューマーが設定できないメンバーをパブリックにすることはできません。
実行プロパティ
一部のシナリオでは、特定の実行プロパティのスコープをアクティビティのパブリック子に設定すると便利です。
ExecutionProperties コレクションは、この機能を Add メソッドと共に提供します。 このメソッドには、特定のプロパティのスコープをすべての子にするか、パブリックの子のみを対象にするかを示すブール型パラメーターがあります。 このパラメーターが true
に設定されている場合、プロパティはパブリック メンバーとそのパブリック子のパブリック メンバーにのみ表示されます。
セカンダリ ルート
セカンダリ ルートは、補正アクティビティの状態を管理するためのランタイムの内部メカニズムです。 CompensableActivityの実行が完了すると、その状態はすぐにはクリーンアップされません。 代わりに、補正エピソードが完了するまで、ランタイムによってセカンダリ ルートの状態が維持されます。 セカンダリ ルートでキャプチャされた場所環境は、Compensable アクティビティが使用される定義のスコープに対応します。
.NET