次の方法で共有


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

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

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

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

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

  • ユーザー イベント

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

アクティビティ状態イベントのフィルタ パターン

アクティビティは、ワークフローの基本的なビルディング ブロックです。 ワークフローは、ツリー状に階層化された一連のアクティビティです。 1 つのアクティビティは、ワークフロー内の 1 つのアクションを表します。 遅延などの単純なアクションのこともあれば、複数の子アクティビティで構成される複合的なアクティビティの場合もあります。

このセクションのフィルタは、アクティビティに対してフィルタを適用し、以下の BAM インターセプタの 1 つ以上を使用して、WF の操作をカスタマイズします。

  • GetActivityName

  • GetActivityEvent

  • GetActivityType

  • GetActivityProperty

  • GetWorkflowProperty

  • GetContextProperty

Note

フィルタ内で GetActivityEvent 操作を使用しない場合は、終了したアクティビティ イベントだけがフィルタの対象となります。

アクティビティ名によるフィルタ (終了したアクティビティ)

終了したアクティビティ イベントに対し、アクティビティ名によってフィルタを適用する必要になることが頻繁にあります。 これは、ファイルの受信やデータベースへのデータの書き込みなど、特定のアクティビティからのデータをキャプチャする必要があるときに便利です。

以下のコード例は、"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>  

アクティビティ タイプによるフィルタ (終了したアクティビティ イベント)

名前ではなくタイプでアクティビティをフィルタしたい場合があります。 たとえば、ワークフロー内のすべてのアクティビティに対して、アクティビティ名と日付/タイムスタンプを保存したいことがあります。 これを実現するには、 操作を使用します GetActivityTypeGetActivityType は、指定された型を基本型とすべての派生型と比較して一致を判断します。 との 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>  

アクティビティ名とタイプによるフィルタ (終了したアクティビティ イベント)

対象とするアクティビティのタイプ (プロセッサ アーキテクチャを含む) を正確に指定したい場合は、アクティビティ名とアクティビティ タイプでアクティビティをフィルタすることができます。 次のサンプルでは、 から 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>  

アクティビティ名とイベントによるフィルタ (任意のアクティビティ タイプ)

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

<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>  

アクティビティ タイプとイベントによるフィルタ

このフィルタは、単一のアクティビティ イベント中に特定のタイプから派生したすべてのアクティビティに関する情報をキャプチャするのに便利です。 たとえば、ワークフロー内を流れる注文書から注文書 ID と日付/タイムスタンプを追跡したいことがあります。 これを実現するには、 操作と 操作を使用 GetActivityEvent します GetActivityTypeGetActivityType は、指定された型を基本型とすべての派生型と比較して一致を判断します。 との 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>  

ワークフロー状態イベントのフィルタ パターン

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

  • 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 メソッドを使用してカスタム情報を追跡する場合、以下の BAM インターセプタを 1 つ以上使用して、WF のユーザー データ操作をカスタマイズするために、データの特性に基づいてフィルタをすることができます。

  • GetUserDataType

  • GetUserKey

  • GetUserData

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

  • 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>  

アクティビティ タイプとユーザー データ型によるフィルタ

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

<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>