Windows Workflow 4/4.5 を使用してさまざまなビジネス タスクを実行する作業を行っています。これらのタスクは、完了するまでにかなりの時間がかかります。ワークフローの進行状況をユーザーに表示できるようにしたいと考えています。
私の考えは、TFS ビルド出力に似たものを作成することでした。インデントを使用して、実行中のサブタスク、ログ出力などを表示します。
私の調査によると、カスタム追跡プロファイルを使用する必要があると思います。これを作成し、ActivityStateQuery と WorkflowInstanceQuery の 2 種類のクエリを処理するように指示しました。前者は、アクティビティの開始時と完了時、およびその他の状態に関する情報を提供してくれます。後者は、ワークフローの状態を示します。
これにより、必要な種類の情報が得られます。
このデータを XML 文書に入れ、XSL を使用してそれを HTML に変換したいと考えています。私が抱えている問題は、ActivityStateRecord を持つ階層データがないことです。アクティビティがありますが、Track メソッドの実行時にその親がわかりません。そのコンテキストがなければ、アクティビティの状態を XML ドキュメントに追加する方法がわかりません。
Track メソッドが呼び出されたときに割り当てられるアクティビティ ID では、「.」が使用されます。パターン。これを使用して階層を把握できると思いました。つまり、1.5.8 は ID 1.5 の親を持つアクティビティであり、その親は ID 1 です。シーケンスなどの他のアクティビティでは、ID は単一の「.」を超えて変化していません。これを行うと、次の XML 構造が得られます。
<logs>
<log workflowInstanceId="bde36e74-0b39-4445-aac7-27f3e8cf5b1d">
<activity activityId="1" activityName="TestActivity1" activityTypeName="SumTotal.WorkflowInstaller.Tests.Resources.TestActivity1">
<status eventTime="2013-06-14T15:14:40.7847857Z" level="INFO">Executing: TestActivity1</status>
<activity activityId="1.1" activityName="Sequence" activityTypeName="System.Activities.Statements.Sequence">
<status eventTime="2013-06-14T15:14:53.3645053Z" level="INFO">Executing: Sequence</status>
<status eventTime="2013-06-14T15:15:23.5382311Z" level="INFO">Closed: Sequence</status>
</activity>
<activity activityId="1.11" activityName="Assign" activityTypeName="System.Activities.Statements.Assign">
<status eventTime="2013-06-14T15:14:54.9715972Z" level="INFO">Executing: Assign</status>
<status eventTime="2013-06-14T15:14:54.9715972Z" level="INFO">Closed: Assign</status>
</activity>
<activity activityId="1.7" activityName="Sequence" activityTypeName="System.Activities.Statements.Sequence">
<status eventTime="2013-06-14T15:14:58.2097824Z" level="INFO">Executing: Sequence</status>
<status eventTime="2013-06-14T15:15:14.410709Z" level="INFO">Closed: Sequence</status>
</activity>
<status eventTime="2013-06-14T11:15:14.409709-04:00" level="DEBUG">Log: Test1 value</status>
<activity activityId="1.2" activityName="Assign" activityTypeName="System.Activities.Statements.Assign">
<status eventTime="2013-06-14T15:15:18.7189555Z" level="INFO">Executing: Assign</status>
<status eventTime="2013-06-14T15:15:18.7189555Z" level="INFO">Closed: Assign</status>
</activity>
<status eventTime="2013-06-14T15:15:26.6104068Z" level="INFO">Closed: TestActivity1</status>
</activity>
</log>
</logs>
理想的には、次の XML を生成したいと思います。
<logs>
<log workflowInstanceId="bde36e74-0b39-4445-aac7-27f3e8cf5b1d">
<activity activityId="1" activityName="TestActivity1" activityTypeName="SumTotal.WorkflowInstaller.Tests.Resources.TestActivity1">
<status eventTime="2013-06-14T15:14:40.7847857Z" level="INFO">Executing: TestActivity1</status>
<activity activityId="1.1" activityName="Sequence" activityTypeName="System.Activities.Statements.Sequence">
<status eventTime="2013-06-14T15:14:53.3645053Z" level="INFO">Executing: Sequence</status>
<activity activityId="1.11" activityName="Assign" activityTypeName="System.Activities.Statements.Assign">
<status eventTime="2013-06-14T15:14:54.9715972Z" level="INFO">Executing: Assign</status>
<status eventTime="2013-06-14T15:14:54.9715972Z" level="INFO">Closed: Assign</status>
</activity>
<activity activityId="1.7" activityName="Sequence" activityTypeName="System.Activities.Statements.Sequence">
<status eventTime="2013-06-14T15:14:58.2097824Z" level="INFO">Executing: Sequence</status>
<status eventTime="2013-06-14T11:15:14.409709-04:00" level="DEBUG">Log: Test1 value</status>
<status eventTime="2013-06-14T15:15:14.410709Z" level="INFO">Closed: Sequence</status>
</activity>
<activity activityId="1.2" activityName="Assign" activityTypeName="System.Activities.Statements.Assign">
<status eventTime="2013-06-14T15:15:18.7189555Z" level="INFO">Executing: Assign</status>
<status eventTime="2013-06-14T15:15:18.7189555Z" level="INFO">Closed: Assign</status>
</activity>
<status eventTime="2013-06-14T15:15:23.5382311Z" level="INFO">Closed: Sequence</status>
</activity>
<status eventTime="2013-06-14T15:15:26.6104068Z" level="INFO">Closed: TestActivity1</status>
</activity>
</log>
</logs>
この種の情報を取得する方法はありますか、またはこの種の追跡/ログ記録を行うためのより良い方法はありますか?