Share via


追跡プロファイルの作成と使用

追跡プロファイルは、関心のある追跡情報だけを受け取るように追跡情報をフィルタするために使用します。そのために、追跡サービスでは追跡情報を要求するための TrackingProfile オブジェクトを使用します。新しいワークフロー インスタンスを開始すると、追跡フレームワークはランタイムに登録されている各追跡サービスに対して TryGetProfile を呼び出します。ワークフロー インスタンスの種類が、この呼び出しのパラメータとして提供されます。対象とするインスタンス (通常は実行中のインスタンスの種類によって決定される) についての追跡情報を受け取りたい場合、追跡サービスは true を返し、out パラメータとしてTrackingProfile オブジェクトを指定します。TrackingProfile オブジェクトには、追跡サービスが受け取る必要のあるイベントとデータを追跡ランタイムに指示するための情報が含まれています。追跡フレームワークが追跡プロファイルに指定されているイベントを受け取った場合は、追跡フレームワークは追跡チャネルを使用して、追跡サービスにイベント情報を送信します。

追跡プロファイルは、Windows Workflow Foundation に定義されている TrackingProfile スキーマを使用する XML ファイルで表現されます。また、追跡プロファイルには、詳細を抽出する複雑なオブジェクト モデルがあります。追跡プロファイルは、オブジェクト モデルまたは XML を使用して作成できます。しかし、ランタイムでは TrackingProfile オブジェクトを想定しているため、XML 形式で表現されている追跡プロファイルは、TrackingProfile オブジェクトに逆シリアル化する必要があります。

Caution note注意 :

追跡プロファイルで英語以外の変数を使用する場合は、追跡プロファイル ファイルを Unicode エンコーディングで保存する必要があります。

追跡プロファイル オブジェクト モデルの要素

TrackingProfile オブジェクトは、ワークフロー インスタンスのイベント、個々のアクティビティ イベント、およびカスタム ユーザー イベントの追跡を可能にします。追跡プロファイル オブジェクト モデルでは、さまざまなオブジェクトを使用して、追跡サービスがランタイム エンジンから受け取る情報について詳細な制御を行うための追跡プロファイルを構築します。

追跡ポイント

TrackingProfile には、3 種類の追跡ポイントが含まれています。次の 3 の種類の追跡イベントをフィルタ処理することができます。

  • アクティビティ ステータス イベント

  • ワークフロー ステータス イベント

  • ユーザー イベント

WorkflowTrackPoint オブジェクトを WorkflowTrackPoints プロパティに追加すると、特定のワークフロー ステータス イベントを照合できます。ActivityTrackPoint オブジェクトを ActivityTrackPoints プロパティに追加すると、特定のアクティビティ ステータス イベントを照合できます。UserTrackPoint オブジェクトを UserTrackPoints プロパティに追加すると、特定のユーザー イベントを照合できます。

WorkflowTrackPoint

ワークフロー インスタンスのステータスが変わるたびに、ワークフロー インスタンスは TrackingWorkflowEvent のいずれかの値に基づいてワークフロー ステータス イベントをランタイム追跡インフラストラクチャに送出します。WorkflowTrackPoint は、ワークフロー インスタンスの実行中に特定の種類のワークフロー ステータス イベントが発生したすべてのポイントを追跡することを定義します。これらのステータス イベントは、WorkflowTrackPointMatchingLocation プロパティで定義されています。追跡位置および WorkflowTrackPoint の関係については、このトピックの「追跡位置」セクションを参照してください。

WorkflowTrackPoint では、Annotations を追加することによって、ランタイム追跡インフラストラクチャが送信する追加の関連情報も指定できます。注釈は、WorkflowTrackPoint に関連付ける情報を含む、ユーザー定義の文字列です。たとえば、注釈には、この追跡ポイントからのワークフローの実行パスに関する情報を含めたり、アプリケーションに表示する情報を含めたりできます。

ActivityTrackPoint

アクティビティのステータスが変わるたびに、ワークフロー インスタンスは ActivityExecutionStatus のいずれかの値に基づいてアクティビティ ステータス イベントをランタイム追跡インフラストラクチャに送出します。ActivityTrackPoint は、ルート ワークフローの実行パス内で、そのようなアクティビティ ステータス イベントで修飾されたポイントを追跡することを定義します。ActivityTrackPoint には、MatchingLocations プロパティを使用した照合に含まれる場所、ExcludedLocations プロパティを使用した照合から除外される場所、および Extracts プロパティを使用した追跡ポイントの照合時にワークフロー インスタンスから抽出されるデータが格納されます。

Extracts プロパティは、ActivityDataTrackingExtract または WorkflowDataTrackingExtract オブジェクトを格納する ExtractCollection です。ActivityDataTrackingExtract オブジェクトを ExtractCollection に追加する場合、Member プロパティは、アクティビティのフィールドまたはプロパティ、そのフィールドまたはプロパティのメンバ、あるいは IEnumerable インターフェイスを実装するフィールドまたはプロパティ (またはどちらかのメンバ) の 1 つの要素を参照します。メンバの値は、ActivityTrackPoint の照合時に、関連付けられている ActivityTrackingRecordBody プロパティに入れられます。この特定のアクティビティ イベント中にワークフローのメンバを抽出するには、WorkflowDataTrackingExtract オブジェクトを使用できます。

UserTrackPoint

アクティビティ デザイナまたはワークフロー デザイナは、ワークフローを使ってデータをユーザー イベントとしてランタイム追跡インフラストラクチャに送出するために、オーバーロードされた System.Workflow.ComponentModel.Activity.TrackData(System.Object) メソッドおよび System.Workflow.ComponentModel.ActivityExecutionContext.TrackData(System.Object) メソッドを使用する場合があります。送出されたデータは、ユーザー データと呼ばれます。アクティビティ ステータス イベントやワークフロー ステータス イベントはステータスが変わった場合にのみ発生しますが、ユーザー イベントはワークフロー内のどの場所でも発生する可能性があります。ワークフローを使用してユーザー イベントを送出する理由は多数あります。たとえば、ワークフロー デザイナがワークフローの進行状況についての論理的な状態情報を伝達する場合や、アクティビティ デザイナがアクティビティ ステータスの変化以外の時点でアクティビティ メンバに機会を与える場合があります。

UserTrackPoint は、ユーザー イベントに関連したルート ワークフロー インスタンスの実行パスにおける、追跡対象のポイントを定義します。UserTrackPoint には、照合に含める場所、照合から除外する場所、および追跡ポイントの照合時にワークフロー インスタンスから抽出する追加データが格納されています。UserTrackPointSystem.Workflow.Runtime.Tracking.TrackingProfile.UserTrackPoints に追加すると、ランタイム追跡インフラストラクチャは追跡ポイントを照合するときに UserTrackingRecord を追跡サービスに送信します。ユーザー データは、System.Workflow.Runtime.Tracking.UserTrackingRecord.UserData で返されます。単一の UserTrackPoint をワークフロー インスタンス内の複数のポイントで照合できます。

UserTrackingLocation には、ワークフロー インスタンスの実行パスにおけるユーザー イベントに関連した場所についての一致条件が格納されます。UserTrackingLocation オブジェクトを MatchingLocations に追加して、追跡ポイントの照合に含める場所を定義できます。同様に、UserTrackingLocation オブジェクトを ExcludedLocations に追加して、追跡ポイントの照合から除外する場所を定義できます。追跡位置および UserTrackPoint の関係については、このトピックの「追跡位置」セクションを参照してください。

ActivityDataTrackingExtract オブジェクトと WorkflowDataTrackingExtract オブジェクトを Extracts に追加して、追跡ポイントと一致するときにワークフロー インスタンスから抽出するデータを指定します。抽出されたデータは、System.Workflow.Runtime.Tracking.UserTrackingRecord.Body で返されます。

Annotations に追加することによって、追跡ポイントに関連付ける追加情報を指定できます。これらの注釈は Annotations で返されます。

追跡位置

前のセクションでは、追跡ポイントを TrackingProfile に関連付けて、Windows Workflow Foundation ランタイム エンジンで使用する追跡サービスが処理するイベントの種類を指定する方法について説明しました。これらの追跡ポイントは、追跡位置を使用して、ワークフロー定義内の特定の種類を照合します。

WorkflowTrackingLocation

WorkflowTrackingLocation は、ワークフロー インスタンスのステータスが変化するたびに発生するイベントを追跡するために使用します。WorkflowTrackingLocation クラスに定義されている Events プロパティによって、照合するワークフロー ステータス イベントのリストを設定できます。これらのイベントは、TrackingWorkflowEvent 列挙体に定義されている値の任意の組み合わせです。

ActivityTrackingLocation

ActivityTrackingLocation は、ワークフロー インスタンス内のアクティビティ ステータスが変化するたびに発生するイベントを追跡するために使用します。ActivityTrackingLocation は、ActivityTypeName または ActivityType プロパティで指定されているアクティビティから発生するイベントを照合します。Type オブジェクトを指定するときは、ActivityType プロパティを使用します。ただし、ActivityTypeName プロパティを使用して、参照アクティビティ タイプの非修飾名を指定することもできます。たとえば、CodeActivity アクティビティの非修飾名を指定するには、ActivityTypeName プロパティを "CodeActivity" に設定します。

ActivityTrackingLocation クラスに定義されている ExecutionStatusEvents プロパティによって、追跡サービスが処理するアクティビティ レベルのイベントの種類をフィルタできます。ExecutionStatusEvents コレクションの ActivityExecutionStatus の値を少なくとも 1 つ照合する必要があります。また、ActivityTrackingLocation を照合するには、Conditions プロパティの TrackingCondition がすべて true である必要があります。リストが空の場合は、照合されるイベントはありません。

ActivityTrackingCondition を使用すると、追跡するアクティビティの単位をさらに詳細に制御することができます。ActivityTrackingCondition クラスの Member プロパティは、プロパティまたはフィールド、アクティビティ プロパティまたはフィールドのメンバ、あるいは追跡するアクティビティに定義されている IEnumerable インターフェイスを実装するアクティビティ プロパティまたはフィールド (またはどちらかのメンバ) の 1 つの要素を指定します。Value プロパティは、指定された Operator を使用して Member プロパティと比較する値を示します。ActivityTrackingCondition クラスのこれら 3 つのプロパティを ActivityTrackingLocation で使用することで、たとえば Name プロパティが "CodeActivity1" である CodeActivity アクティビティだけを追跡するように指定できます。

UserTrackingLocation

アクティビティ デザイナまたはワークフロー デザイナは、ワークフローを使ってデータをユーザー イベントとしてランタイム追跡インフラストラクチャに送出するために、オーバーロードされた任意の System.Workflow.ComponentModel.Activity.TrackData(System.Object) メソッドおよび System.Workflow.ComponentModel.ActivityExecutionContext.TrackData(System.Object) メソッドを使用できます。送出されたデータは、ユーザー データと呼ばれます。アクティビティ ステータス イベントやワークフロー ステータス イベントは、アクティビティやワークフローのステータスが変わった場合にのみ発生しますが、ユーザー イベントはワークフロー内のどの場所でも発生する可能性があります。UserTrackingLocation は、そのような場所の照合パラメータを定義します。これらのパラメータを定義するには、ユーザー データの型、データの送出元アクティビティ タイプ、このアクティビティのインスタンスをより厳密に限定できる条件のコレクション、ユーザー データが関連付けられている必要があるオプションのキー名、ユーザー データの派生型を照合するかどうか、および指定したアクティビティ タイプから派生したアクティビティによって送出されたユーザー データを照合するかどうかを指定します。

Noteメモ :

1 つの UserTrackingLocation が、ワークフロー インスタンスの実行パス内の複数の実際の場所を参照する場合があります。

TrackingProfile 内の UserTrackPoint の照合パラメータを定義するには、UserTrackingLocationSystem.Workflow.Runtime.Tracking.UserTrackPoint.MatchingLocations または System.Workflow.Runtime.Tracking.UserTrackPoint.ExcludedLocations プロパティに追加します。

条件

ランタイム追跡インフラストラクチャによって UserTrackingLocation を照合するには、次の 3 つの一般的条件がこの順序で満たされる必要があります。

  • ユーザー イベントを送出したアクティビティは、ActivityTypeActivityTypeNameConditions、および MatchDerivedActivityTypes プロパティによって指定されたアクティビティ セットと一致する必要があります。

  • ユーザー データに関連付けられているキーが存在する場合、そのキーは KeyName プロパティと一致する必要があります。

  • ユーザー イベントによって送出されるユーザー データの種類は、ArgumentTypeArgumentTypeName、および MatchDerivedArgumentTypes プロパティによって指定されたユーザー データ型のセットと一致する必要があります。

これら 3 つの条件がすべて満たされる場合に限り、ランタイム追跡インフラストラクチャは UserTrackingLocation が一致すると見なします。

UserTrackingLocation を構成するには、ArgumentTypeName プロパティまたは ArgumentType プロパティを設定して、照合するユーザー データの型を指定する必要があります。照合対象のユーザー データの送出元となるアクティビティ タイプを指定するために、ActivityTypeName プロパティまたは ActivityType プロパティも設定する必要があります。ユーザー データの送出元のアクティビティをより厳密に限定するには、ActivityTrackingCondition オブジェクトを Conditions に追加します。MatchDerivedArgumentTypes プロパティを設定すれば、ArgumentTypeName または ArgumentType プロパティで指定されたユーザー データ型から派生したユーザー データが照合対象であることを指定できます。また、MatchDerivedActivityTypes プロパティを設定すれば、ActivityTypeName または ActivityType プロパティで指定されたアクティビティ タイプから派生したアクティビティによって送出されたユーザー データが照合対象であることを指定できます。

KeyName を設定すれば、この UserTrackingLocation に関して、指定したキー名に関連付けられたユーザー データだけが照合対象であることを指定できます。KeyName プロパティが null 参照 (Visual Basic では Nothing) である場合、ランタイム追跡インフラストラクチャは、ユーザー データに関連付けられたキーを照合しません。

追跡プロファイル オブジェクト モデルの使用

前述のように、Windows Workflow Foundation API を使用すると、追跡サービスで使用する TrackingProfile オブジェクトを作成できます。追跡プロファイル オブジェクト モデルは、前のセクションで説明したクラス セットを使用して、TrackingProfile オブジェクトを作成します。TrackingProfile オブジェクトは、ワークフロー、アクティビティ、およびユーザー追跡ポイントに関連する追跡ポイントを格納します。また、各追跡ポイントには、照合位置のセットがあります。照合位置は、追跡されるイベントとアクティビティを記述します。照合位置のほかに、除外する位置を定義することもできます。

追跡プロファイルで使用されるアクティビティ プロパティは、アクティビティ オブジェクト モデル内の名前に対応している必要があります。

Caution note注意 :

追跡サービスは、追跡プロファイルでの追跡のために設定されるパブリック プロパティにアクセスします。これにより、ワークフローで予期しない結果が発生することがあります。

たとえば、アクセスするたびにインクリメントされるパブリックなインクリメンタル カウンタ プロパティを持つワークフローを作成したとします。カウンタ プロパティを追跡する追跡プロファイルを作成する場合、追跡サービスがカウンタ プロパティにアクセスするため、カウンタはインクリメントされます。このシナリオでは、プロパティはワークフローのビジネス ロジック外の追跡サービスによって予期しない方法でインクリメントされます。

CodeActivity アクティビティと、3 つのイベント InitializedExecuting、および Closed を追跡する追跡プロファイルを作成する方法を示すコード例を次に示します。このプロファイルには、1 つの照合位置を持つ、単一の ActivityTrackPoint があります。

static void CreateSimpleTrackingProfile()
{

    TrackingProfile myProfile = new TrackingProfile();
    ActivityTrackPoint myTrackPoint = new ActivityTrackPoint();
    ActivityTrackingLocation myLocation = new ActivityTrackingLocation(typeof(CodeActivity));
    myLocation.MatchDerivedTypes = false;
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Initialized);
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Executing);
    myLocation.ExecutionStatusEvents.Add(ActivityExecutionStatus.Closed);
    myTrackPoint.MatchingLocations.Add(myLocation);
    myProfile.ActivityTrackPoints.Add(myTrackPoint);
    myProfile.Version = new Version("1.0.0.0");
    TrackingProfileSerializer trackingProfileSerializer = new TrackingProfileSerializer();
    StringBuilder trackingProfileString = new StringBuilder();
    using (StringWriter writer = new StringWriter(trackingProfileString, CultureInfo.InvariantCulture))
    {
        trackingProfileSerializer.Serialize(writer, myProfile);
        Console.WriteLine(writer.ToString());
    }
}

TrackingProfile の XML の作成と使用

追跡プロファイルは、XML を使用して記述することもできます。XML で記述する場合は、XML を TrackingProfile に逆シリアル化する必要があります。前のセクションで作成した TrackingProfile に相当する XML 表現を次に示します。

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<TrackingProfile xmlns="https://schemas.microsoft.com/winfx/2006/workflow/trackin
gprofile" version="1.0.0.0">
    <TrackPoints>
        <ActivityTrackPoint>
            <MatchingLocations>
                <ActivityTrackingLocation>
                    <Activity>
                        <Type>System.Workflow.Activities.CodeActivity, System.Wo
rkflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad36
4e35</Type>
                        <MatchDerivedTypes>false</MatchDerivedTypes>
                    </Activity>
                    <ExecutionStatusEvents>
                        <ExecutionStatus>Initialized</ExecutionStatus>
                        <ExecutionStatus>Executing</ExecutionStatus>
                        <ExecutionStatus>Closed</ExecutionStatus>
                    </ExecutionStatusEvents>
                </ActivityTrackingLocation>
            </MatchingLocations>
        </ActivityTrackPoint>
    </TrackPoints>
</TrackingProfile>

TrackingProfile の XML 表現は、追跡プロファイル オブジェクト モデル、および Windows Workflow Foundation に含まれる TrackingProfileSerializer クラスを使用して構築することもできます。

TrackingProfile オブジェクトを XML データにシリアル化する方法を次の例に示します。

TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder(),CultureInfo.InvariantCulture);
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();

関連項目

参照

TrackingProfile

概念

カスタム追跡サービスの作成

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.