1

従来のワークフローシステムをWF4に変換しているので、アプリケーションのAPIと一致させるために、いくつかのフープをジャンプする必要があります。そのため、問題の説明をできるだけ単純に保つようにします。:)

シーケンスを引数として取り、それを実行するカスタムアクティビティがあります。カスタムアクティビティは、実行する前に、シーケンス(およびそのブランチなど)をトラバースして特定のタイプの子アクティビティを探す必要があります。次に、これらの特定の子アクティビティに関するレポートを作成します。

制約がGetChildSubtreeアクティビティを使用できる場合、検証時にアクティビティの子サブツリーをトラバースできることは知っていますが、実行時にリストにアクセスすることはできません。また、ホストアプリケーションからActivityValidationServicesを使用して同様の呼び出しを実行することも可能ですが、それは私のシナリオでも機能しません。

では、カスタムアクティビティの実行メソッド内から子サブツリーのアクティビティのリストを取得するための最良の方法は何ですか。

前もって感謝します!

マーカス。

4

1 に答える 1

2

アクティビティツリーのランタイムメタデータを操作するためのメソッドを提供するWorkflowInspectionServicesクラスを確認することをお勧めします。特にGetActivitiesメソッド。

GetActivitiesは、アクティビティ、デリゲートハンドラ、変数のデフォルト、引数式など、アクティビティの直接の子をすべて返します。これで、内部ブランチを含むすべてのアクティビティを返す拡張メソッドを作成できます。

public static IEnumerable<Activity> GetInnerActivities(this Activity activity)
{
    var children = WorkflowInspectionServices.GetActivities(activity);

    foreach (var child in children)
    {
        children = children.Concat(child.GetChildren());
    }

    return children;
}

次に、指定したタイプのすべてのアクティビティの内部アクティビティを取得します。

activity.GetInnerActivities().OfType<MySpecificType>();
于 2012-09-21T21:46:19.387 に答える