2013-06-14 3 views
0

Я работаю над использованием 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> 

Есть ли способ, чтобы получить этот тип информации или есть лучше способ сделать этот тип отслеживания/регистрации?

ответ

1

После некоторого поворота и переосмысления я смог достичь желаемого результата.

По сути, я продолжал использовать запись, которую я использовал во время состояний для ActivityStateQuery.

Что я добавил, это дополнительный запрос к профилю отслеживания. Я добавил ActivityScheduledQuery. ActivityScheduledRecord предоставляет активность, планирующую активность и дочернюю активность. Это позволяет мне создать дочерний лог-узел под родительским узлом. Идентификатор объекта ActivityInfo для дочернего узла соответствует идентификатору, когда состояние «Выполнение» выполняется для активности, и затем я могу связать сообщения журнала и сообщения состояния во время ActivityStateQuery.

Это профиль отслеживания для моего отслеживания объекта участника:

TrackingProfile = new TrackingProfile 
     { 
      Queries = 
      { 
       new ActivityStateQuery 
       { 
        ActivityName = "*", 
        States = { "*" } 
       }, 
       new WorkflowInstanceQuery 
       { 
        States = { WorkflowInstanceStates.Started, WorkflowInstanceStates.Completed } 
       }, 
       new ActivityScheduledQuery 
       { 
        ActivityName = "*", 
        ChildActivityName = "*" 
       } 
      } 
     } 
Смежные вопросы