Partilhar via


Criar fluxos de trabalho em tempo real

 

Publicado: novembro de 2016

Aplicável a: Dynamics CRM 2015

Assim como os fluxos de trabalho assíncronos, fluxos de trabalho em tempo real podem ser usados para modelar e automatizar processos empresariais reais. Opcionalmente, eles podem exigir a entrada do usuário, podem iniciar automaticamente com base nas condições específicas de eventos ou podem ser iniciados manualmente por um usuário. Fluxos de trabalho em tempo real são para usuários empresariais, por exemplo, analistas comerciais, para implementar funcionalidade semelhante em plug-ins síncronos sem requerer experiência em programação do .NET Framework. É possível criar fluxos de trabalho assíncronos ou em tempo real no aplicativo Web Microsoft Dynamics 365 ou no código.

Alguns pontos-chave sobre um fluxo de trabalho em tempo real incluem os seguintes itens:

  • Definidos usando um registro de entidade do Workflow, semelhante a fluxos de trabalho assíncronos.

  • São executados em um estágio do pipeline de execução do evento, semelhantemente a plug-ins síncronos. O fluxo de trabalho em tempo real pode ser executado antes (pré-operação), após (pós-operação) ou durante a operação principal. Um fluxo de trabalho em tempo real que é executado durante a operação principal é a implementação de uma ação personalizada. Fluxos de trabalho em tempo real podem ser classificados em um estágio, assim como acontece com plug-ins.Para obter mais informações:Estágios de canalização

  • Se configurado para execução sob demanda ou em resposta a um evento, um fluxo de trabalho em tempo real é executado imediatamente, e não enfileirado para ser executado mais tarde.

  • Pode ser executado no contexto de segurança do usuário conectado ou do proprietário do fluxo de trabalho. Entretanto, fluxos de trabalho definidos para executar sempre sob demanda são executados sob o contexto de segurança do usuário conectado.

  • Não podem conter atividades em atraso ou em espera.

  • Só registra erros e somente quando o registro está habilitado.

  • Executa na transação atual. Todas as atividades do fluxo de trabalho e todos os fluxos de trabalho secundários, exceto fluxos de trabalho assíncronos, fazem parte de uma única transação. Fluxos de trabalho secundários assíncronos são enfileirados e executados em uma transação separada.

  • Podem ser convertidos em fluxo de trabalho assíncrono e de volta para tempo real.

Neste tópico

Privilégios de segurança necessários

Criar um fluxo de trabalho em tempo real no código

Converter um fluxo de trabalho assíncrono em tempo real e vice-versa

Tratamento de erros e reversão

Empacotar um fluxo de trabalho em tempo real para distribuição

Privilégios de segurança necessários

Um privilégio de segurança chamado Ativar processos em tempo real (prvActivateSynchronousWorkflow) é necessário para ativar fluxos de trabalho em tempo real para que possam ser executados. O privilégio Executar tarefa do fluxo de trabalho (prvWorkflowExecution) é necessário para iniciar o fluxo de trabalho. Como um fluxo de trabalho em tempo real afeta a operação do sistema principal, é recomendável que somente um pequeno grupo de usuários experientes recebam o privilégio de ativação.

Para obter mais informações sobre esses privilégios, consulte guia Personalização.

Criar um fluxo de trabalho em tempo real no código

Quando o Microsoft Dynamics CRM Online oferecer suporte para fluxos de trabalho em tempo real, eles devem ser criados interativamente no aplicativo Web. Fluxos de trabalho baseados em XAML, abordados nesta seção, só têm suporte em um servidor no local ou IFD. Para obter mais informações sobre fluxos de trabalho do XAML, consulte Fluxos de trabalho do XAML personalizados.

Você pode criar um fluxo de trabalho em tempo real no código, criando um registro da entidade do Workflow. Examine os metadados de atributo da entidade do Workflow usando a ferramenta Navegador de metadados ou a planilha EntityMetadata.xlsx do pacote SDK.Para exibir os metadados de entidade da sua organização, instale a solução Navegador dos Metadados descrita em Procurar os metadados da sua organização. Também é possível exibir os metadados de uma organização não personalizada no arquivo do Excel chamado EntityMetadata.xlsx, incluído na pasta de nível superior do download do SDK. Baixe o pacote do SDK do Microsoft Dynamics CRM.

O exemplo a seguir compara o código que cria um fluxo de trabalho assíncrono para codificar e que cria um fluxo de trabalho em tempo 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);

O fluxo de trabalho em tempo real tem algumas propriedades adicionais definidas que o fluxo de trabalho assíncrono não tem:

Atributo de fluxo de trabalho

Descrição

Category

Definido para WorkflowCategory.Workflow.

RunAs

Especifica para executar o fluxo de trabalho no contexto de segurança do proprietário do fluxo de trabalho (workflow_runas.Owner) ou o usuário conectado (workflow_runas.CallingUser).

SyncWorkflowLogOnError

Quando true, os erros são registrados em log nos registros da ProcessSession. Diferentemente dos fluxos de trabalho assíncronos, a execução do fluxo de trabalho em tempo real não é registrado em log nos registros do System Job.

CreateStage, DeleteStage ou UpdateStage

Identifica o estágio no pipeline de execução do evento em que o fluxo de trabalho é executado: antes da operação principal (workflow_stage.Preoperation) ou após (workflow_stage.Postoperation). Você deve coincidir o estágio com o evento de gatilho para a operação desejada. Por exemplo, se TriggerOnUpdate for true, você também deve definir UpdateStage.

Fluxos de trabalho em tempo real não podem ser executados em recuperações. Diferentemente de recuperações, restante das mensagens de serviços Web suportadas são mapeados para um desses três eventos suportados. Por exemplo, a atribuição ou configuração de uma operação de estado é o mesmo que uma atualização.

Mode

Este é o modo de execução. Defina como WorkflowMode.Realtime.

Rank

É possível ordenar a execução de plug-ins e de fluxos de trabalho em tempo real em um estágio definindo uma classificação. Todos os plug-ins ou fluxos de trabalho em tempo real com uma classificação de 1 são executados antes daqueles com uma classificação de 2, e assim por diante.

Xaml

Defina o código XAML que define o fluxo de trabalho em tempo real.

Você pode ver o código de exemplo completo para criar um fluxo de trabalho em tempo real no tópico Exemplo: Criar um fluxo de trabalho em tempo real no código.

Converter um fluxo de trabalho assíncrono em tempo real e vice-versa

É possível converter fluxos de trabalho de assíncrono em tempo real e vice-versa usando o UpdateRequest sem a necessidade de regravar o fluxo de trabalho, desde que o fluxo de trabalho assíncrono não contenha atividades em espera ou em atraso. Você também pode fazer a conversão interativamente usando o aplicativo web. O fluxo de trabalho deve estar em um estado de rascunho (não ativado) para que a conversão seja executada.

Converter um fluxo de trabalho assíncrono em tempo real

  1. Criar um UpdateRequest para o fluxo de trabalho.

  2. Defina a propriedade Mode do fluxo de trabalho como WorkflowMode.Realtime.

  3. Defina o CreateStage, UpdateStage do fluxo de trabalho, ou DeleteStage, conforme apropriado. Por exemplo, se o fluxo de trabalho tiver o TriggerOnDelete definido, então também defina a propriedade DeleteStage.

  4. Ligue para o método Execute informando a solicitação de atualização como um parâmetro.

Converter um fluxo de trabalho em tempo real em assíncrono

  1. Criar um UpdateRequest para o fluxo de trabalho.

  2. Defina a propriedade Mode do fluxo de trabalho como WorkflowMode.Background.

  3. Ligue para o método Execute informando a solicitação de atualização como um parâmetro.

Tratamento de erros e reversão

Qualquer atividade de fluxo de trabalho que seja executada durante a transação do banco de dados e que transmita uma exceção de volta para a plataforma cancela a operação principal. Isso resulta em uma reversão da operação principal se isso já tiver ocorrido. Além disso, qualquer plug-in registrado de pré-evento ou de pós-evento ou fluxos de trabalho em tempo real que ainda não tenham sido executados. Qualquer fluxo de trabalho assíncrono que seja acionado pelo mesmo evento não será executado.

Se incluir uma atividade de interrupção de fluxo de trabalho (TerminateWorkflow class) com a opção cancelada no fluxo de trabalho, você poderá adicionar uma mensagem de status personalizada (propriedade Reason) na atividade que contém uma única linha de texto a ser exibida ao usuário na caixa de diálogo Erro do processo empresarial.

Quando o SyncWorkflowLogOnError é definido como true, os erros de fluxo de trabalho em tempo real são inseridos nos registros de entidade do ProcessSession.

Empacotar um fluxo de trabalho em tempo real para distribuição

Para distribuir o fluxo de trabalho para que possa ser importado para uma organização do Microsoft Dynamics 365, adicione o fluxo de trabalho a uma solução do Microsoft Dynamics 365. Isso é feito facilmente com o aplicativo Web, navegando para CONFIGURAÇÕES > PERSONALIZAÇÕES > Soluções. Também é possível escrever o código para criar a solução. Para obter mais informações sobre soluções, consulte Embalar e distribuir extensões usando soluções.

Confira Também

Gravar fluxos de trabalho para automatizar processos empresariais
Criar suas próprias ações
Pipeline de execução do evento
Crie plug-ins para ampliar os processos empresariais

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais