ユーザー追跡ポイントを使用した追跡のサンプル
このサンプルでは、Windows Workflow Foundation で提供されている SQL 追跡サービスを使用して、ワークフローの実行を追跡する方法を示します。
ワークフロー ランタイムが、ワークフローの実行中に特定のイベントを発生させます。追跡サービスがこれらのイベントをキャッチし、イベントに関する情報を SQL Server データベースに格納して照会できるようにします。
ワークフロー ランタイムは、次の種類のイベントを発生させます。
**ワークフロー インスタンス レベルのイベント。**このイベントは、ワークフロー インスタンスが特定の状態になったときに発生します。たとえば、ワークフロー インスタンスが初期化されたり実行されたりすると、イベントが発生します。
**アクティビティ レベルのイベント。**ワークフローは複数のアクティビティで構成され、各アクティビティにはライフサイクルがあります。アクティビティは、ライフサイクルの間、複数の状態を通過します。アクティビティが特定の状態に到達すると例外が発生します。
**ユーザー追跡イベント。**ワークフロー作成者は、カスタムの追跡イベントを作成し、ワークフローのコード側に追加できます。
ワークフロー データ コンテキストのデータは出力され、イベントと共に追跡サービスに渡されます。
ワークフローを追跡している場合、すべての状態およびアクティビティのすべてのイベントを追跡する必要はありません。追跡プロファイルを作成して、対象にするイベントおよびデータを指定できます。
カスタム追跡ポイントの作成
追跡イベントによって追跡されないワークフローの特定の実行ポイントで、データの一部を追跡することもできます。これを行う場合は、カスタム追跡ポイントを使用します。カスタム追跡ポイントは、データ コンテキスト クラスで提供される TrackData メソッドを使用して作成します。TrackData メソッドはオブジェクトの引数を取ります。これは、追跡するあらゆる種類のデータを出力できることを意味します。サンプル ワークフローのカスタム追跡ポイントは、コード アクティビティのコード ハンドラに作成されます。
カスタムの追跡プロファイルの作成
サンプルでは、カスタム追跡プロファイルを作成してユーザー追跡ポイントを追跡する方法を示します。このプロファイルは、指定されたイベントを追跡するために SQL 追跡データベースに挿入されます。追跡プロファイルは、追跡プロファイル オブジェクト モデルを使用して作成します。
追跡プロファイル オブジェクト モデルはクラスのセットを提供します。それらのクラスは、インスタンス追跡ポイント、アクティビティ追跡ポイント、およびユーザー追跡ポイントを作成するのに役立ちます。各追跡ポイントには、照合位置のセットが含まれます。一致する場所は、追跡されるイベント (インスタンス追跡ポイントまたはアクティビティ追跡ポイントに応じて異なる) と追跡されるアクティビティ (インスタンス追跡ポイントの場合はワークフロー) を表します。
追跡ポイントには、抽出されるデータも指定できます。この例では、抽出データは指定されていません。
追跡プロファイルを作成してユーザー追跡ポイントを追跡するには、次のコードを使用します。
TrackingProfile profile = new TrackingProfile();
ActivityTrackPoint trackPoint = new ActivityTrackPoint();
ActivityTrackingLocation location = new ActivityTrackingLocation(typeof(Activity));
location.MatchDerivedTypes = true;
foreach (ActivityExecutionStatus s in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
location.ExecutionStatusEvents.Add(s);
}
trackPoint.MatchingLocations.Add(location);
profile.ActivityTrackPoints.Add(trackPoint);
profile.Version = new Version("3.0.0.0");
// Adding a user track point to the tracking profile.
UserTrackPoint utp = new UserTrackPoint();
// Adding a user location to the track point.
UserTrackingLocation ul = new UserTrackingLocation(typeof(string), typeof(CodeActivity));
ul.MatchDerivedActivityTypes = true;
utp.MatchingLocations.Add(ul);
profile.UserTrackPoints.Add(utp);
// Serialize the profile.
TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder());
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();
InsertTrackingProfile(trackingprofile);
上記のコード例では、追跡プロファイルを XML 形式にシリアル化し、追跡データベースに格納する方法を最後の 4 行で指定しています。追跡プロファイルをシリアル化すると、次のようになります。
<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?>
<TrackingProfile xmlns=\"https://schemas.microsoft.com/winfx/2006/workflow/trackingprofile\" version=\"3.0.0.0\">
<TrackPoints> <ActivityTrackPoint>
<MatchingLocations>
<ActivityTrackingLocation>
<Activity>
<Type>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>
<MatchDerivedTypes>true</MatchDerivedTypes>
</Activity>
<ExecutionStatusEvents>
<ExecutionStatus>Initialized</ExecutionStatus>
<ExecutionStatus>Executing</ExecutionStatus>
<ExecutionStatus>Canceling</ExecutionStatus>
<ExecutionStatus>Closed</ExecutionStatus>
<ExecutionStatus>Compensating</ExecutionStatus>
<ExecutionStatus>Faulting</ExecutionStatus>
</ExecutionStatusEvents>
</ActivityTrackingLocation>
</MatchingLocations>
</ActivityTrackPoint>
<UserTrackPoint>
<MatchingLocations>
<UserTrackingLocation>
<Activity>
<Type>System.Workflow.Activities.CodeActivity, System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>
<MatchDerivedTypes>true</MatchDerivedTypes>
</Activity>
<Argument>
<Type>System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>
<MatchDerivedTypes>false</MatchDerivedTypes>
</Argument>
</UserTrackingLocation>
</MatchingLocations>
</UserTrackPoint>
</TrackPoints>
</TrackingProfile>
追跡プロファイルは、追跡プロファイル オブジェクト スキーマを使用して作成します。
SQL 追跡データベースへの追跡プロファイルの挿入
追跡プロファイルを追跡プロファイル データベースに挿入するには、UpdateTrackingProfile ストアド プロシージャを使用します。このストアド プロシージャは、特定のワークフロー型のプロファイルを格納します。ランタイムが追跡サービスにそのタイプのプロファイルを要求すると、追跡サービスは既定のプロファイルの代わりにこのカスタム プロファイルを返します。
追跡サービスのワークフロー ホストへの登録
追跡サービスをワークフロー ランタイムに登録するには、次のコードを使用します。
WorkflowRuntime workflowRuntime = new WorkflowRuntime();
workflowRuntime.AddService(new SqlTrackingService(connectionstring));
workflowRuntime.StartRuntime();
2 行目で、SQL 追跡サービスをワークフロー ランタイムに登録しています。接続文字列は、追跡データベースの接続文字列です。
追跡データベースの作成
Windows Workflow Foundation によってインストールされた SQL サービスは、Microsoft SQL Server を使用して情報を保存します。これらの作業には、Microsoft SQL Server 2005 Express、SQL Server 2000 以降のバージョン、または SQL Server 2000 Desktop Engine (MSDE) を使用できます。
Windows Workflow Foundation のセットアップでは、これらのサービスに必要なデータベースはインストールされませんが、これらのサービスで使用するデータベースを作成および構成するための SQL スクリプトはインストールされます。
SQL 追跡データベースを作成するには
Microsoft SQL Server 2005 Express、SQL Server 2000 以降、または SQL Server 2000 Desktop Engine (MSDE) を使用して、SQL クエリ ステートメント
CREATE DATABASE Tracking
で新規データベース Tracking を作成します。メモ ワークフロー アプリケーションで SqlTrackingService と SqlWorkflowPersistenceService の両方を使用する場合は、永続性と追跡に対して単一のデータベースを使用することをお勧めします。
SQL Query Analyzer 作業領域で、使用可能なデータベースのリストから手順 1. で作成したデータベースを選択します。
[ファイル] メニューの [開く] をクリックして、SQL スクリプト %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<言語>\Tracking_Schema.sql を開きます。
[実行] をクリックするか F5 キーを押してクエリを実行し、SQL 追跡サービス テーブルを作成します。
[ファイル] メニューの [開く] をクリックして、SQL スクリプト %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<言語>\Tracking_Logic.sql を開きます。
[実行] をクリックするか F5 キーを押してクエリを実行し、SQL 追跡サービス ストアド プロシージャを作成します。
サンプルをビルドするには
[サンプルのダウンロード] をクリックしてサンプルをダウンロードします。
これにより、サンプル プロジェクトがローカルのハード ディスクに抽出されます。
[スタート] ボタンをクリックし、[すべてのプログラム] をポイントします。次に、[Microsoft Windows SDK] をポイントし、[CMD シェル] をクリックします。
サンプルのソース ディレクトリに移動します。
コマンド プロンプトで、「MSBUILD <ソリューション ファイル名>」と入力します。
サンプルを実行するには
- [SDK コマンド プロンプト] ウィンドウで、UserTrackPoints\bin\debug フォルダ (このサンプルの VB のバージョンでは、UserTrackPoints\bin フォルダ) にある .exe ファイルを実行します (このサンプルでは、メイン フォルダの下にあります)。
関連項目
参照
SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord
その他の技術情報
追跡サンプル
簡単な追跡のサンプル
SQLTrackingService サンプルを使用するクエリ
EventArgs 追跡サンプル
ConsoleTrackingService のサンプル
SQLTrackingService サンプルを使用するクエリ
RuleActionTrackingEvent サンプル
ファイル追跡サービスとクエリのサンプル
追跡プロファイル オブジェクト モデル サンプルの使用
SQL データ保守のサンプル
Windows Workflow Tracking Services
Copyright © 2007 by Microsoft Corporation.All rights reserved.