Compartir a través de


Registros de seguimiento

Este tema es aplicable a Windows Workflow Foundation 4.

El tiempo de ejecución del flujo de trabajo sirve para emitir los registros de seguimiento con el fin de seguir la ejecución de una instancia de flujo de trabajo.

Registros de seguimiento

En la siguiente tabla se detallan los registros de seguimiento que emite el tiempo de ejecución del flujo de trabajo.

Registro de seguimiento Descripción

Registros de ciclo de vida del flujo de trabajo

Emitidos durante varias fases del ciclo de vida de la instancia de flujo de trabajo. Por ejemplo, se emite un registro cuando el flujo de trabajo se inicia o se completa.

Registros de ciclo de vida de la actividad

Describe la ejecución de la actividad. Estos registros indican el estado de una actividad de flujo de trabajo como cuándo se programa una actividad, cuándo se completa o cuándo se produce un error.

Registro de reanudación de marcadores

Se emite siempre que se reanude un marcador en una instancia de flujo de trabajo.

Registros de seguimiento personalizados

Un autor del flujo de trabajo puede crear registros de seguimiento personalizados y emitirlos en una actividad personalizada.

Todos los registros relacionados con el seguimiento que se emitan a partir del tiempo de ejecución de WF derivan de la clase base TrackingRecord, que contiene el conjunto común de los datos. Los registros de seguimiento muestran el ciclo de vida de un flujo de trabajo simple. Cada registro de seguimiento contiene los detalles sobre el evento de seguimiento asociado, como las propiedades InstanceId, RecordNumber, además de la información adicional específica del tipo de registro de seguimiento.

El tiempo de ejecución del flujo de trabajo emite los siguientes tipos de objetos TrackingRecord:

  • WorkflowInstanceRecord: la clase TrackingRecord describe el ciclo de vida de la instancia de flujo de trabajo. Por ejemplo, se emite un registro cuando el flujo de trabajo se inicia o se completa, y contiene el estado de la instancia de flujo de trabajo. Los detalles de este registro se pueden encontrar en la clase WorkflowInstanceRecord.

  • WorkflowInstanceAbortedRecord: se emite la clase TrackingRecord cuando una instancia de flujo de trabajo se anula. El registro contiene el motivo de la anulación de la instancia de flujo de trabajo. Los detalles de este registro se pueden encontrar en WorkflowInstanceAbortedRecord.

  • WorkflowInstanceUnhandledExceptionRecord: se emite la clase TrackingRecord si se produce una excepción en la instancia de flujo de trabajo y no hay ninguna actividad que la administre. El registro contiene los detalles de la excepción. Los detalles de este registro se pueden encontrar en WorkflowInstanceUnhandledExceptionRecord.

  • WorkflowInstanceSuspendedRecord: se emite la clase TrackingRecord siempre que se suspenda una instancia de flujo de trabajo. El registro contiene el motivo de la suspensión de la instancia de flujo de trabajo. Los detalles de este registro se pueden encontrar en WorkflowInstanceSuspendedRecord.

  • WorkflowInstanceTerminatedRecord: se emite la clase TrackingRecord siempre que finaliza una instancia de flujo de trabajo. El registro contiene el motivo de la finalización de la instancia de flujo de trabajo. Los detalles de este registro se pueden encontrar en WorkflowInstanceTerminatedRecord.

  • ActivityStateRecord: se emite la clase TrackingRecord cuando se ejecuta una actividad dentro de un flujo de trabajo. Estos registros indican el estado de la actividad dentro de la instancia de flujo de trabajo. Los detalles de este registro se pueden encontrar en ActivityStateRecord.

  • ActivityScheduledRecord: se emite la clase TrackingRecord cuando una actividad programa una actividad secundaria. Este registro contiene los detalles para el actividad primaria (la actividad que se programa) y la actividad secundaria programada. Los detalles de este registro se pueden encontrar en ActivityScheduledRecord.

  • FaultPropagationRecord: se emite la clase TrackingRecord para cada controlador que examine el registro hasta que se administre. Se utiliza para denotar la ruta de acceso que usó un error en la instancia de flujo de trabajo. Los detalles de este registro se pueden encontrar en FaultPropagationRecord.

  • CancelRequestedRecord: se emite la clase TrackingRecord siempre que una actividad intenta cancelar una actividad secundaria. Este registro contiene los detalles para la actividad primaria (la actividad que se programa) y la actividad secundaria que se vaya a cancelar. Los detalles de este registro se pueden encontrar en CancelRequestedRecord.

  • BookmarkResumptionRecord: TrackingRecord realiza el seguimiento de cualquier marcador que se haya reanudado correctamente. Los detalles de este registro se pueden encontrar en BookmarkResumptionRecord.

  • CustomTrackingRecord: un autor de flujo de trabajo crea y emite la clase TrackingRecord en una actividad de flujo de trabajo personalizada. Los registros de seguimiento personalizados se pueden rellenar con datos que se van a emitir junto con los registros. Los detalles de este registro se pueden encontrar en CustomTrackingRecord.

Por ejemplo, podría haber una actividad Sequence simple que contenga una operación WriteLine con registros de seguimiento emitidos en el siguiente orden.

  1. WorkflowInstanceRecord indica que está comenzando el flujo de trabajo.

  2. ActivityScheduledRecord indica que se ha programado una actividad. En este caso se trata de una actividad Sequence.

  3. ActivityScheduledRecord representa la actividad WriteLine.

  4. Hay dos registros ActivityStateRecord que representan las dos actividades que se están completando.

  5. WorkflowInstanceRecord indica que el flujo de trabajo se está completando.

Emitir registros de seguimiento personalizados

Tal y como se muestra en el ejemplo siguiente, se pueden emitir registros de seguimiento personalizados de una actividad de código.

protected override void Execute(CodeActivityContext context)
{
…
            CustomTrackingRecord customRecord = new CustomTrackingRecord("CustomEmailSentEvent");
            customRecord.Data.Add("SendTime", sendTime);
            context.Track(customRecord);
}

La clase CustomTrackingRecord se emite en una actividad de código al invocar el método Track en la clase ActvityContext.