Я работаю над использованием Windows Workflow 4/4.5 для выполнения некоторых бизнес-задач. Эти задачи занимают достаточно много времени. Я хотел бы иметь возможность показать пользователю возможность выполнения рабочего процесса.Результат выполнения рабочего процесса Windows
Моя мысль заключалась в том, чтобы сделать что-то похожее на вывод сборки TFS. Он использует отступы, чтобы показывать выполнение подзадач, регистрируемый вывод и т. Д.
Из моего исследования я думаю, что должен использовать пользовательский профиль отслеживания. Я написал один и поручил ему обрабатывать два типа запросов: ActivityStateQuery и WorkflowInstanceQuery. Первый дает мне информацию о том, когда начинается и заканчивается действие, а также другие государства. Последнее дает мне указание на состояние рабочего процесса.
Это дает мне тип информации, которую я хотел бы иметь.
Я хочу поместить эти данные в XML-документ, а затем использовать XSL для преобразования его в HTML. Проблема, с которой я сталкиваюсь, заключается в том, что у меня нет иерархических данных с ActivityStateRecord. У меня есть активность, но я не знаю ее родителя при выполнении метода Track. Без этого контекста я не уверен, как добавить состояние активности в XML-документ.
Идентификатор активности, назначенный при вызове метода Track, использует символ '.' шаблон. Я думал, что могу использовать это, чтобы выяснить иерархию, т. Е. 1.5.8 - это действие с родителем с идентификатором 1.5, а его родительский идентификатор - 1. Это, по-видимому, относится только к текущей выполняемой деятельности, потому что когда я размещаю действия внутри другие действия, такие как последовательность, идентификаторы не изменяются за пределами одного «.». Когда я делаю это я получаю следующую структуру 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>
Есть ли способ, чтобы получить этот тип информации или есть лучше способ сделать этот тип отслеживания/регистрации?