我正在使用 Windows Workflow 4/4.5 来完成一些不同的业务任务。这些任务需要相当长的时间才能完成。我希望能够向用户展示工作流程进度的视图。
我的想法是制作类似于 TFS 构建输出的东西。它使用缩进来显示执行的子任务、记录的输出等。
根据我的研究,我认为我应该使用自定义跟踪配置文件。我编写了一个并指示它处理两种类型的查询,ActivityStateQuery 和 WorkflowInstanceQuery。前者为我提供了有关活动何时开始和完成以及其他状态的信息。后者给了我工作流状态的指示。
这让我得到了我想要的信息类型。
我想将这些数据放入 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>
有没有办法获得这种类型的信息,或者有没有更好的方法来进行这种类型的跟踪/记录?