Cree flujos de trabajo en tiempo real

Al igual que los flujos de trabajo asíncronos, los flujos de trabajo en tiempo real se pueden utilizar para modelar y automatizar los procesos empresariales del mundo real. Opcionalmente, pueden requerir la entrada del usuario, pueden iniciarse automáticamente en función de las condiciones de evento especificadas o pueden ser iniciados manualmente por un usuario. Los flujos de trabajo en tiempo real son para que los usuarios empresariales, por ejemplo, los analistas empresariales, implementen una funcionalidad similar a los complementos sincrónicos sin necesidad de tener experiencia en programación de .NET Framework. Puede crear flujos de trabajo asincrónicos o en tiempo real en la aplicación web Dynamics 365 Customer Engagement (on-premises) o en código.

Algunos puntos clave sobre un flujo de trabajo en tiempo real incluyen los siguientes elementos:

  • Se define mediante un registro de entidad Workflow, de manera similar a un flujo de trabajo asincrónico.

  • Se ejecuta en una fase de la canalización de ejecución de eventos, de forma similar a los complementos sincrónicos. El flujo de trabajo en tiempo real puede ejecutarse antes (antes de la operación), después (después de la operación) o durante la operación principal. Un flujo de trabajo en tiempo real que se ejecuta durante la operación principal es la implementación de una acción personalizada. Los flujos de trabajo en tiempo real se pueden clasificar dentro de una etapa, al igual que se puede hacer con los complementos. Más información: Canalización de ejecución de eventos

  • Ya sea que esté configurado para ejecutarse bajo demanda o en respuesta a un evento, un flujo de trabajo en tiempo real se ejecuta inmediatamente en lugar de ponerse en cola para ejecutarse en un momento posterior.

  • Puede ejecutarse en el contexto de seguridad del usuario que ha iniciado sesión o del propietario del flujo de trabajo. Sin embargo, los flujos de trabajo configurados para ejecutarse a petición siempre se ejecutan en el contexto de seguridad del usuario que ha iniciado sesión.

  • No puede contener actividades de retraso o de espera.

  • Solo registra errores y solo cuando el registro está habilitado.

  • Se ejecuta en la transacción actual. Todas las actividades del flujo de trabajo y los flujos de trabajo secundarios, excepto los flujos de trabajo asincrónicos, forman parte de una sola transacción. Los flujos de trabajo secundario asincrónicos se ponen en cola y se ejecutan en una transacción independiente.

  • Se puede convertir en un flujo de trabajo asíncrono y volver a tiempo real.

Privilegios de seguridad necesarios

Se requiere un privilegio de seguridad denominado Activar procesos en tiempo real (prvActivateSynchronousWorkflow) para activar flujos de trabajo en tiempo real para que se puedan ejecutar. El privilegio Ejecutar un trabajo de flujo (prvWorkflowExecution) es necesario para iniciar el flujo de trabajo. Dado que un flujo de trabajo en tiempo real afecta al funcionamiento central del sistema, se recomienda que solo se conceda el privilegio de activación a un pequeño grupo de usuarios experimentados.

Creación de un flujo de trabajo en tiempo real en el código

 

Aunque Dynamics 365 for Customer Engagement admite flujos de trabajo en tiempo real, deben crearse de forma interactiva en la aplicación web. Los flujos de trabajo basados en XAML, que se describen en esta sección, solo son compatibles con un servidor local o IFD.

Puede crear un flujo de trabajo en tiempo real en el código creando un registro de entidad Workflow. Revise los metadatos de atributo de la Workflow entidad mediante la herramienta Explorador de metadatos. Para ver los metadatos de las entidades de su organización, instale la solución Explorador de metadatos que se describe en Exploración de los metadatos de su organización. También puede examinar la documentación de referencia para las entidades en la Referencia de entidad.

En el ejemplo siguiente se compara el código que crea un flujo de trabajo asincrónico con el código que crea un flujo de trabajo en tiempo real.



// Create an asynchronous workflow.
// The workflow should execute after a new opportunity is created.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (async)",
    Type = new OptionSetValue((int)WorkflowType.Definition),
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Background),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    TriggerOnCreate = true,
    AsyncAutoDelete = true,
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English                        
};
_workflowId = _serviceProxy.Create(workflow);



// Create a real-time workflow. 
// The workflow should execute after a new opportunity is created
// and run in the context of the logged on user.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (real-time)",
    Type = new OptionSetValue((int)WorkflowType.Definition),       
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Realtime),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    RunAs = new OptionSetValue((int)workflow_runas.CallingUser),
    SyncWorkflowLogOnFailure = true,
    TriggerOnCreate = true,
    CreateStage = new OptionSetValue((int)workflow_stage.Postoperation),
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English
};
_workflowId = _serviceProxy.Create(workflow);

El flujo de trabajo en tiempo real tiene algunas propiedades adicionales establecidas que el flujo de trabajo asincrónico no tiene:

Atributo de flujo de trabajo Descripción
Category Establécelo en WorkflowCategory.Workflow.
RunAs Especifica que se ejecute el flujo de trabajo en el contexto de seguridad del propietario del flujo de trabajo (workflow_runas.Owner) o del usuario que ha iniciado sesión (workflow_runas.CallingUser).
SyncWorkflowLogOnError Si es true, los errores se registran en registros ProcessSession. A diferencia de los flujos de trabajo asincrónicos, la ejecución del flujo de trabajo en tiempo real no se registra en los System Job registros.
CreateStage, DeleteStage o UpdateStage Identifica la fase de la canalización de ejecución de eventos en la que se va a ejecutar el flujo de trabajo: antes de la operación principal (workflow_stage.Preoperation) o después de (workflow_stage.Postoperation). Esta fase debe coincidir con el evento desencadenador para la operación prevista. Por ejemplo, si TriggerOnUpdate es true, también debe establecer UpdateStage.

Los flujos de trabajo en tiempo real no se puede ejecutar en recuperaciones. Aparte de las consultas, el resto de los mensajes de servicios web admitidos se asignan a uno de estos tres eventos compatibles. Por ejemplo, una operación de asignación o establecimiento de estado es, en última instancia, lo mismo que una actualización.
Mode Este es el modo de ejecución. Establézcalo en WorkflowMode.Realtime.
Rank Puede ordenar la ejecución de complementos y flujos de trabajo en tiempo real dentro de una etapa estableciendo un rango. Todos los complementos o flujos de trabajo en tiempo real con un rango de 1 se ejecutan antes que los que tienen un rango de 2, y así sucesivamente.
Xaml Establézcalo en el código XAML que define el flujo de trabajo en tiempo real.

Puede ver el código de ejemplo completo para crear un flujo de trabajo en tiempo real en el tema Ejemplo: Crear un flujo de trabajo en tiempo real en código.

Convierta un flujo de trabajo asíncrono en tiempo real y viceversa

Puede convertir un flujo de trabajo de asincrónico a en tiempo real y viceversa usando UpdateRequest sin necesidad de reescribir el flujo de trabajo, siempre y cuando el flujo de trabajo asincrónico no contenga ninguna actividad de espera o retraso. También puede realizar la conversión de forma interactiva mediante la aplicación web. El flujo de trabajo debe estar en estado de borrador (no activado) antes de realizar la conversión.

Convierta un flujo de trabajo asíncrono en tiempo real

  1. Cree un UpdateRequest para el flujo de trabajo.

  2. Establezca la propiedad Mode del flujo de trabajo en WorkflowMode.Realtime.

  3. Establezca las propiedades CreateStage, UpdateStage o DeleteStage del flujo de trabajo según sea necesario. Por ejemplo, si el flujo de trabajo tiene TriggerOnDelete establecido, también establezca la propiedad DeleteStage.

  4. Llame al método Execute pasando la solicitud de actualización como parámetro.

Convertir un flujo de trabajo en tiempo real en asincrónico

  1. Cree un UpdateRequest para el flujo de trabajo.

  2. Establezca la propiedad Mode del flujo de trabajo en WorkflowMode.Background.

  3. Llame al método Execute pasando la solicitud de actualización como parámetro.

Control de errores y reversión

Cualquier actividad de flujo de trabajo que se ejecute durante la transacción de la base de datos y que devuelva una excepción a la plataforma cancela la operación principal. El resultado es una reversión de la operación principal si esta ya se ha producido. Además, cualquier complemento registrado antes o después del evento o flujos de trabajo en tiempo real que aún no se hayan ejecutado. Los flujos de trabajo asincrónicos desencadenados por el mismo evento no se ejecutarán.

Si incluye una actividad de detención de flujo de trabajo (clase TerminateWorkflow) con la opción cancelada en el flujo de trabajo, puede agregar un mensaje de estado personalizado (Reason propiedad) a esa actividad que contenga una sola línea de texto para que se muestre al usuario en el cuadro de diálogo Error de proceso empresarial .

Cuando SyncWorkflowLogOnError se establece en true, los errores en tiempo real del flujo de trabajo se registran en los registros de entidad ProcessSession.

Empaquetar un flujo de trabajo en tiempo real para la distribución

Para distribuir el flujo de trabajo de modo que se pueda importar a una organización de Dynamics 365 Customer Engagement (on-premises), agregue el flujo de trabajo a una solución de Dynamics 365 Customer Engagement (on-premises). Esto se hace fácilmente utilizando la aplicación web navegando a CONFIGURACIÓN > PERSONALIZACIONES > Soluciones. También puede escribir código para crear la solución. Para obtener más información acerca de las soluciones, consulte Empaquetar y distribuir extensiones.

Consulte también

Escribir flujos de trabajo para automatizar los procesos empresariales
Crea tus propias acciones
Canalización de ejecución de eventos
Escribir Plug-Ins para ampliar los procesos de negocio