一般的なイベント フィルター パターン

Windows Workflow Foundation (WF) の BAM インターセプターを使用する場合、インターセプター構成ファイルで頻繁に使用する一連の一般的なフィルター パターンがあることに気付くでしょう。 これらのフィルター パターンの一部はアプリケーションと環境に固有ですが、さまざまな環境やさまざまなアプリケーションで多くのパターンを使用できます。

このトピックでは、WF アプリケーション用に記述されたインターセプター構成ファイルで使用される一般的なフィルター パターンの多くを収集します。 パターンは、Windows Workflow Foundation 追跡イベントによってグループ化されます。

  • アクティビティの状態イベント

  • ワークフローの状態イベント

  • ユーザー イベント

    各パターンをインターセプター構成ファイルにコピーし、アプリケーションに合わせて変更できます。

アクティビティステータスイベントフィルタパターン

アクティビティは、ワークフローの基本的な構成要素です。 ワークフローは、ツリー構造で階層的に編成されたアクティビティのセットです。 アクティビティは、ワークフロー内のアクションを表します。 遅延などの単純なアクションを指定することも、複数の子アクティビティで構成される複合アクティビティにすることもできます。

このセクションのフィルターはアクティビティをフィルター処理し、WF カスタム操作に次の BAM インターセプターの 1 つ以上を使用します。

  • GetActivityName

  • GetActivityEvent

  • GetActivityType

  • GetActivityProperty

  • GetWorkflowProperty

  • GetContextProperty

フィルターで GetActivityEvent 操作を使用しない場合、フィルターは Closed アクティビティ イベントのみを検索します。

アクティビティ名でフィルター処理 (終了したアクティビティ)

多くの場合、アクティビティ名で閉じたアクティビティ イベントをフィルター処理する必要があります。 これは、ファイルの受信やデータベースへのデータの書き込みなど、特定のアクティビティからデータをキャプチャする必要がある場合に便利です。

次のフラグメントは、"MyActivity" という名前の閉じたアクティビティをフィルター処理します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティの種類でフィルター処理 (Closed アクティビティ イベント)

名前ではなく種類によってアクティビティをフィルター処理する場合があります。 たとえば、ワークフロー内のすべてのアクティビティのアクティビティ名と日付/タイム スタンプを保存できます。 これを行うには、 GetActivityType 操作を使用します。 GetActivityType は、指定された型を基本型とすべての派生型と比較して一致を判断します。 すべてのワークフロー アクティビティはそこから派生する必要があるため、 System.Workflow.ComponentModel.Activity との比較は一致します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ イベントでフィルター処理 (任意のアクティビティの種類)

このフィルターでは、GetActivityEvent 操作を使用して、閉じたアクティビティを検索します。 これは、閉じられたすべてのイベントに関する情報をキャプチャする場合に便利です (名前または種類別の特定のイベントに対して)。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityEvent" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>Closed</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ名と種類でフィルター処理する (Closed Activity イベント)

検索するアクティビティの正確な種類 (プロセッサ アーキテクチャを含む) を指定する場合は、アクティビティの名前とアクティビティの種類でアクティビティをフィルター処理できます。 次のサンプルでは、 System.Workflow.ComponentModel.Activityから派生した "MyActivity" を検索します。これを派生型に変更して、より制限を厳しくすることができます。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
<ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ名とイベントでフィルター処理する (任意のアクティビティの種類)

この式は、アクティビティ名とアクティビティ イベントに基づいてフィルター処理されます。 これは、特定のアクティビティとイベントの情報をキャプチャする場合や、特定のアクティビティの複数のアクティビティ イベントからデータをキャプチャする場合に便利です。 たとえば、次に示すように、2 つの異なる OnEvent 要素 (実行中は MyActivity 用、1 つは Closed の場合) が必要な場合があります。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetActivityEvent" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>Closed</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティの種類とイベントでフィルター処理する

このフィルターは、1 つのアクティビティ イベント中に特定の種類から派生するすべてのアクティビティに関する情報をキャプチャするのに役立ちます。 たとえば、ワークフローを流れる発注書 ID と日付/タイム スタンプを発注書から追跡することに関心がある場合があります。 これを実現するには、 GetActivityEvent 操作と GetActivityType 操作を使用します。 GetActivityType は、指定された型を基本型とすべての派生型と比較して一致を判断します。 すべてのワークフロー アクティビティはそこから派生する必要があるため、 System.Workflow.ComponentModel.Activity との比較は一致します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityEvent" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>Closed</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ名、種類、およびイベントでフィルター処理する

アクティビティを名前、種類、イベントでフィルター処理すると、追跡対象のアクティビティをより適切に修飾する場合に役立ちます。 たとえば、次のフィルターは、 System.Workflow.ComponentModel.Activityと等しいか、または派生した型を持つ閉じたアクティビティ "MyActivity" を検索します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetActivityEvent" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>Closed</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

ワークフローステータスイベントフィルタパターン

このセクションのフィルターは、ワークフロー イベントをフィルター処理し、WF カスタム操作に次の BAM インターセプターの 1 つ以上を使用します。

  • GetWorkflowEvent

  • GetContextProperty

ワークフロー イベントによるフィルター処理

この式は、ワークフロー イベントによってフィルター処理されます。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetWorkflowEvent" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>Created</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
  </ic:Expression>  
</ic:Filter>  

ユーザー イベント フィルター パターン

アプリケーションで TrackData メソッドを使用してカスタム情報を追跡する場合は、WF カスタム ユーザー データ操作に対して次の BAM インターセプターの 1 つ以上を使用して、データの特性に基づいてフィルター処理できます。

  • GetUserDataType

  • GetUserKey

  • ユーザーデータ取得

    フィルターでは、これらの操作を次の操作と組み合わせて、より複雑な式を作成できます。

  • GetActivityName

  • GetActivityType

  • GetActivityProperty

  • GetWorkflowProperty

  • GetContextProperty

    フィルターに少なくとも 1 つのユーザー データ操作が含まれていない場合、フィルターはユーザー イベント フィルターではなく、外側の OnEvent によってエラーが発生するか (ユーザー操作が対応する更新式に表示される場合)、またはユーザー 追跡ポイントではなくアクティビティ 追跡ポイントとして識別されます。

アクティビティ名とユーザー データ型でフィルター処理する

多くの場合、アクティビティ名とユーザー データ型でイベントを識別できます。 次の式は、"MyActivity" という名前のアクティビティと、 System.Objectから派生したユーザー データ型をフィルター処理します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetUserDataType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Object</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティの種類とユーザー データ型でフィルター処理する

アクティビティの種類とユーザー データ型に基づいてフィルター処理できます。 これにより、派生元の型に基づいてイベントをフィルター処理する緯度が付与されます。これは、 GetActivityTypeGetUserDataType の両方が、指定した型とすべての派生型と比較されるためです。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetUserDataType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Object</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ名、アクティビティの種類、ユーザー データ型でフィルター処理する

このフィルターは、アクティビティ名を含めることで、アクティビティの種類とユーザー データ型のフィルター パターンをさらに制限します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
    <wf:Operation Name="GetUserDataType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Object</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ名とユーザー キーでフィルター処理する

アプリケーションに、実行時に決定されたキーを使用して TrackData を呼び出すアクティビティがある場合は、アクティビティ名とユーザー キーでフィルター処理できます。 これにより、特定のキー値に基づいて OnEvent をトリガーできます。 たとえば、アプリケーションで複数のキーを定義し、アクティビティ内で 1 つのキーを動的に選択する場合があります。

次の式は、"ItemKey" という名前のユーザー キーを含む "MyActivity" をフィルター処理します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetUserKey" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>ItemKey</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティの種類とユーザー キーでフィルター処理する

アプリケーションに、実行時に決定されたキーで TrackData を呼び出す複数のアクティビティが含まれている場合は、アクティビティ名とユーザー キーでフィルター処理できます。 これにより、特定のキー値に基づいて OnEvent をトリガーできます。 たとえば、アプリケーションで複数のキーを定義し、アクティビティ内で 1 つのキーを動的に選択する場合があります。

次の式は、"ItemKey" という名前のユーザー キーを含む System.Workflow.ComponentModel.Activity から派生するすべてのアクティビティをフィルター処理します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetUserKey" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>ItemKey</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ名、アクティビティの種類、ユーザー キーでフィルター処理する

このフィルター パターンでは、アクティビティ名をフィルターに含めることで、アクティビティの種類とユーザー キーのフィルター パターンをさらに絞り込みます。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
    <wf:Operation Name="GetUserKey" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>key</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ名、ユーザー データ型、およびユーザー キーでフィルター処理する

このフィルターは、特定のユーザー キーを持つ名前付きアクティビティにフィルターを制限し、特定のデータ型から派生させる場合に便利です。 たとえば、アクティビティでは、項目の種類に応じて、キー "Item" と文字列または整数のデータ値を使用して TrackData を呼び出します。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetUserDataType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Object</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
    <wf:Operation Name="GetUserKey" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>key</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティの種類、ユーザー データ型、ユーザー キーでフィルター処理する

このフィルターは、特定のユーザー キーを持つアクティビティの種類にフィルターを制限し、特定のデータ型から派生させる場合に便利です。 アクティビティ名、ユーザー データ型、および使用される型に基づくユーザー キーを使用するよりも、より制限が厳しいか、制限が緩い場合があります。 最も派生型を指定すると、より制限が厳しい可能性があります。ルートの基本型を指定する場合は、制限が少なくなる可能性があります。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetUserDataType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Object</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
    <wf:Operation Name="GetUserKey" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>key</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>  

アクティビティ名、アクティビティの種類、ユーザー データ型、ユーザー キーでフィルター処理する

このフィルターでは、アクティビティ名の追加によって、アクティビティの種類、ユーザー データ型、およびユーザー キー パターンがさらに制限されます。

<ic:Filter>  
  <ic:Expression>  
    <wf:Operation Name="GetActivityType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <wf:Operation Name="GetActivityName" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>MyActivity</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
    <wf:Operation Name="GetUserDataType" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>System.Object</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
    <wf:Operation Name="GetUserKey" />  
    <ic:Operation Name="Constant">  
      <ic:Argument>key</ic:Argument>  
    </ic:Operation>  
    <ic:Operation Name="Equals" />  
    <ic:Operation Name="And" />  
  </ic:Expression>  
</ic:Filter>