Crear flujos de trabajo en tiempo real

De manera similar a los flujos de trabajo asincrónicos, los flujos de trabajo en tiempo real se pueden usar para modelar y automatizar los procesos de negocio del mundo real. Pueden requerir opcionalmente la entrada del usuario, se pueden iniciar automáticamente en función de condiciones de eventos especificadas, o bien las puede iniciar manualmente un usuario. Los flujos de trabajo en tiempo real permiten a los usuarios profesionales, por ejemplo los analistas de negocio, implementar una funcionalidad similar a los complementos sincrónicos sin necesidad de tener experiencia en programación con .NET Framework. Puede crear flujos de trabajo asincrónicos o en tiempo real en la aplicación Web de Dynamics 365 Customer Engagement (on-premises) o en el código.

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

  • Definido mediante el uso de un registro de entidad Workflow, similar a un flujo de trabajo asincrónico.

  • Se ejecuta en una fase de la canalización de ejecución de eventos, similar a los complementos sincrónicos. El flujo de trabajo en tiempo real puede ejecutarse antes (operación previa), después (operación posterior) 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 fase de la misma forma que los complementos. Más información: Canalización de ejecución de evento

  • Tanto si está configurado para ejecutarse a petición o en respuesta a un evento, un flujo de trabajo en tiempo real se ejecuta inmediatamente, no se pone en la cola para ejecutarse en otro momento.

  • Se puede ejecutar en el contexto de seguridad del usuario que inició la 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 inició la sesión.

  • No puede contener actividades de retraso o de espera.

  • Solo registra errores, y únicamente si está habilitado el registro.

  • Se ejecuta en la transacción actual. Todas las actividades del flujo de trabajo y de 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 flujo de trabajo asincrónico y de nuevo en flujo de trabajo en tiempo real.

Privilegios de seguridad requeridos

Se requiere un privilegio de seguridad denominado Activar procesos en tiempo real (prvActivateSynchronousWorkflow) para activar flujos de trabajo en tiempo real de forma que se puedan ejecutar. Se requiere el privilegio Ejecutar tarea de flujo de trabajo (prvWorkflowExecution) para iniciar el flujo de trabajo. Dado que un flujo de trabajo en tiempo real afecta a la operación del sistema principal, se recomienda conceder el privilegio de activación únicamente a un pequeño grupo usuarios con experiencia.

Crear un flujo de trabajo en tiempo real en el código

 

Aunque las aplicaciones Dynamics 365 for Customer Engagement admiten flujos de trabajo en tiempo real, estos se deben crear interactivamente en la aplicación web. Los flujos de trabajo basados en XAML, descritos en esta sección, solo se admiten en un servidor de IFD o local.

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 entidad Workflow 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.

El siguiente ejemplo compara el código que crea un flujo de trabajo asincrónico con el 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 establecidas adicionales que no tiene el flujo de trabajo asincrónico:

Atributo de flujo de trabajo Descripción
Category Establecido en WorkflowCategory.Workflow.
RunAs Especifica si se debe ejecutar el flujo de trabajo en el contexto de seguridad de su propietario (workflow_runas.Owner), o del usuario que inició la 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 de los flujos de trabajo en tiempo real no se registra en registros System Job.
CreateStage, DeleteStage, o UpdateStage Identifica la fase de la canalización de ejecuciones de eventos donde se debe ejecutar el flujo de trabajo: antes de la operación principal (workflow_stage.Preoperation), o después (workflow_stage.Postoperation). Esta fase debe coincidir con el evento desencadenador para la operación prevista. Por ejemplo, si TriggerOnUpdate es true, debe establecer también UpdateStage.

Los flujos de trabajo en tiempo real no se puede ejecutar en recuperaciones. Aparte de las recuperaciones, el resto de los mensajes de servicios web compatibles se asignan a uno de estos tres eventos admitidos. Por ejemplo, una operación de asignación o de establecer estado es en definitiva igual a una actualización.
Mode Este es el modo de ejecución. Establézcalo en WorkflowMode.Realtime.
Rank Puede solicitar la ejecución de complementos y flujos de trabajo en tiempo real dentro de una fase si configura una calificación. Todos los complementos o flujos de trabajo en tiempo real con una calificación de 1 se ejecutan antes que los que tienen una calificación de 2, y así sucesivamente.
Xaml Se establece 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.

Convertir un flujo de trabajo asincrónico en flujo de trabajo en tiempo real y viceversa.

Puede convertir flujos de trabajo asincrónicos en flujos de trabajo en tiempo real y viceversa mediante UpdateRequest sin necesidad de reescribir el flujo de trabajo, siempre que el flujo de trabajo asincrónico no contenga ninguna actividad de espera o de retraso. También puede realizar la conversión interactivamente utilizando la aplicación web. El flujo de trabajo debe estar en un estado de borrador (sin activar) para poder realizar la conversión.

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

  1. Cree un objeto 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 establecido TriggerOnDelete, establezca también 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 flujo de trabajo asíncrono

  1. Cree un objeto 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

Las actividades de flujo de trabajo que se ejecuten durante la transacción de la base de datos y que devuelvan una excepción a la plataforma cancelan la operación principal. El resultado es una reversión de la operación principal si esta ya se ha producido. Además, los complementos registrados anteriores o posteriores al evento o los flujos de trabajo en tiempo real todavía no se han 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 personalizado de estado (propiedad Reason ) a la actividad con una sola línea de texto que se muestre al usuario en el cuadro de diálogo Error de proceso empresarial.

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

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

Para distribuir el flujo de trabajo para poderlo importar en 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 realiza fácilmente usando la aplicación web y desplazándose a CONFIGURACIÓN > PERSONALIZACIONES > Soluciones. También puede escribir código para crear la solución. Para obtener más información sobre cómo usar soluciones, consulte Empaquetar y distribuir las extensiones.

Vea también

Escribir flujos de trabajo para automatizar los procesos de negocio
Crear acciones propias
Canalización de ejecución del evento
Escribir complementos para ampliar los procesos de negocio