Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Você pode estender a funcionalidade do Dynamics 365 Customer Engagement (local) criando mensagens personalizadas conhecidas como ações. Essas ações terão classes de solicitação/resposta associadas e uma ação de API da Web será gerada. As ações geralmente são usadas para adicionar novas funcionalidades específicas de domínio ao serviço Web da organização ou para combinar várias solicitações de mensagem do serviço Web da organização em uma única solicitação. Por exemplo, num centro de atendimento telefónico de suporte, poderá querer combinar as mensagens Criar, Atribuir e Definir Estado numa única nova mensagem Escalar.
A lógica de negócios de uma ação é implementada usando um fluxo de trabalho. Quando você cria uma ação, o fluxo de trabalho em tempo real associado é automaticamente registrado para ser executado no estágio 30 (operação principal) do pipeline de execução. Para obter mais informações sobre fluxos de trabalho em tempo real, consulte Tipos de fluxo de trabalho.
Embora as ações sejam suportadas no Dynamics 365 for Customer Engagement, a criação de uma ação em código (usando XAML) só é suportada por implantações locais e IFD. Os clientes on-line devem criar ações interativamente no aplicativo Web.
Sobre as definições de ação
Uma ação é definida usando um Workflow registro de entidade, semelhante a um fluxo de trabalho em tempo real. Alguns pontos-chave do que é uma ação e como ela funciona estão na lista a seguir:
Pode ser associado a uma única entidade ou ser global (não associado a nenhuma entidade em particular).
É executado na fase de operação principal 30 do pipeline de execução de eventos.
Suporta a invocação de plug-ins registados nas fases de pré e pós-operação do pipeline de execução de eventos.
Pode ter plug-ins registados nas fases de pré-operação ou pós-operação somente quando o estado da ação está Ativado.
Está disponível através da API Web ou pelos endpoints
organization.svceorganization.svc/web.Pode ser executado usando um recurso da Web JavaScript. Para obter mais informações: Executar uma ação usando um recurso da Web JavaScript
Sempre é executado sob o contexto de segurança do usuário chamador.
O registo não pode ser eliminado enquanto houver passos de plug-in registadas na ação.
Opcionalmente, por meio de uma definição de configuração, pode participar da transação atual do banco de dados.
Não suporta um escopo em que a execução é restrita a um usuário, unidade de negócios ou organização. As ações são sempre executadas no âmbito da organização.
Suporta argumentos de entrada e saída.
Suporta auditoria de alterações de dados.
Não é suportado com clientes offline.
Pode ser invocado por uma chamada de método de serviço Web.
Pode ser invocado diretamente de um fluxo de trabalho.
Permissões necessárias
Um privilégio de segurança chamado Ativar processos em tempo real (prvActivateSynchronousWorkflow) é necessário para ativar o fluxo de trabalho em tempo real de uma ação para que ela possa ser executada. Isso se soma a quaisquer privilégios necessários para criar um fluxo de trabalho.
Criar uma ação usando código
Normalmente, uma ação seria implementada por um personalizador usando o designer de fluxo de trabalho interativo do aplicativo Web. No entanto, os desenvolvedores podem implementar ações usando chamadas SDK e implantar em um servidor local ou IFD, se desejado.
Os atributos de entidade de fluxo de trabalho usados para uma ação são descritos na tabela a seguir. O código de exemplo para um fluxo de trabalho em tempo real pode ser encontrado no tópico Criar um fluxo de trabalho em tempo real no código.
| Atributo de fluxo de trabalho | Descrição |
|---|---|
Category |
Definido como WorkflowCategory.CustomOperation. |
SyncWorkflowLogOnError |
Quando true, os erros são registados nos registos de ProcessSession. Ao contrário dos fluxos de trabalho assíncronos, a execução do fluxo de trabalho em tempo real não é registrada nos System Job registros. |
Mode |
Não utilizado. |
IsTransacted |
Defina como true se a ação deve participar da transação do banco de dados; caso contrário, false. A predefinição é true. |
UniqueName |
Um nome exclusivo para a ação. O nome é composto por um prefixo de editor + "_" + o nome exclusivo. |
Xaml |
Configure o código XAML que define o processo em tempo real da sua ação. Não é possível fazer referência a outro fluxo de trabalho em tempo real existente. |
Adicionar argumentos de entrada e saída
As ações dão suporte a argumentos de entrada e saída que podem ser adicionados ao fluxo de trabalho usando um tipo DynamicActivityProperty . Quando você adiciona esses argumentos ao fluxo de trabalho de uma ação, eles se tornam propriedades nas classes de solicitação de mensagem e resposta associadas a essa ação. Por exemplo, o exemplo a seguir mostra código C# e XAML para dois argumentos de entrada e um de saída.
DynamicActivityProperty inputProperty1 = new DynamicActivityProperty { Name = "Subject", Type = typeof(InArgument<string>) };
DynamicActivityProperty inputProperty2 = new DynamicActivityProperty { Name = "EntityCollection", Type = typeof(InArgument<EntityCollection>) };
DynamicActivityProperty outputProperty1 = new DynamicActivityProperty { Name = "Output", Type = typeof(OutArgument<string>) };
inputProperty1.Attributes.Add(new ArgumentRequiredAttribute(true));
inputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The subject"));
inputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));
inputProperty2.Attributes.Add(new ArgumentRequiredAttribute(false));
inputProperty2.Attributes.Add(new ArgumentDescriptionAttribute("The entity collection"));
inputProperty2.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Input));
outputProperty1.Attributes.Add(new ArgumentRequiredAttribute(false));
outputProperty1.Attributes.Add(new ArgumentDescriptionAttribute("The output"));
outputProperty1.Attributes.Add(new ArgumentDirectionAttribute(Microsoft.Xrm.Sdk.Workflow.ArgumentDirection.Output));
<x:Property Name="Subject"
Type="InArgument(x:String)">
<x:Property.Attributes>
<mxsw:ArgumentRequiredAttribute Value="True" />
<mxsw:ArgumentTargetAttribute Value="False" />
<mxsw:ArgumentDescriptionAttribute Value="The subject " />
<mxsw:ArgumentDirectionAttribute Value="Input" />
<mxsw:ArgumentEntityAttribute Value="" />
</x:Property.Attributes>
</x:Property>
<x:Property Name="EntityCollection"
Type="InArgument(mxs:EntityCollection)">
<x:Property.Attributes>
<mxsw:ArgumentRequiredAttribute Value="False" />
<mxsw:ArgumentTargetAttribute Value="False" />
<mxsw:ArgumentDescriptionAttribute Value="The entity collection" />
<mxsw:ArgumentDirectionAttribute Value="Input" />
<mxsw:ArgumentEntityAttribute Value="" />
</x:Property.Attributes>
</x:Property>
<x:Property Name="Output"
Type="OutArgument(x:String)">
<x:Property.Attributes>
<mxsw:ArgumentRequiredAttribute Value="False" />
<mxsw:ArgumentTargetAttribute Value="False" />
<mxsw:ArgumentDescriptionAttribute Value="The output" />
<mxsw:ArgumentDirectionAttribute Value="Output" />
<mxsw:ArgumentEntityAttribute Value="" />
</x:Property.Attributes>
</x:Property>
Os nomes usados para as propriedades devem ser consistentes com nomes de argumento, uma vez que a geração de código definirá esses nomes como propriedades de solicitação ou resposta.
Os tipos de argumento suportados para os argumentos de entrada e saída são mostrados na tabela a seguir.
| Tipo .NET | Tipo de Argumento |
|---|---|
| System.Int32 | Número inteiro |
| System.String | Cordão |
| EntityReference | EntityReference |
| Entity | Entidade |
| EntityCollection | EntityCollection |
| System.DateTime | Data e Hora |
| System.Double | Flutuar |
| System.Decimal | Decimal |
| Money | Dinheiro |
| System.Boolean | booleano |
| OptionSetValue | Picklist |
Os atributos de argumento suportados estão listados na tabela a seguir.
| Atributo de argumento | Descrição |
|---|---|
| ArgumentRequiredAttribute | Indica se o argumento é necessário. |
| ArgumentDirectionAttribute | Indica se a direção do argumento é uma entrada ou saída. |
| ArgumentDescriptionAttribute | Especifica uma descrição para o argumento. |
| ArgumentEntityAttribute | Utilizado se quiser passar numa entidade. |
| ArgumentTargetAttribute | Este atributo é gerado ou adicionado automaticamente. Ele aponta para a entidade primária para a qual o fluxo de trabalho é executado. Este atributo é opcional para ações globais. |
Empacotar uma ação para distribuição
Para distribuir sua ação para que ela possa ser importada para uma organização do Dynamics 365 Customer Engagement (local), adicione sua ação a uma solução do Customer Engagement. Isso é feito facilmente usando o aplicativo Web, navegando até Configurações>Personalizações>Soluções. Você também pode escrever código para criar a solução. Para obter mais informações sobre soluções, consulte Empacotar e distribuir extensões.
Gerar tipos de associação antecipada para uma ação
Usando a ferramenta CrmSvcUtil, você pode gerar classes de solicitação e resposta para sua ação incluir no código do aplicativo. No entanto, antes de gerar essas classes, certifique-se de ativar a ação.
Para baixar o CrmSvcUtil.exe, consulte Ferramentas de desenvolvimento do Dataverse.
O exemplo a seguir mostra o formato para executar a ferramenta a partir da linha de comando para uma instalação local do Customer Engagement. Você fornece os valores de parâmetro para sua instalação.
CrmSvcUtil.exe /url:https://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions
O exemplo a seguir mostra o formato para executar a ferramenta a partir da linha de comando com o Dynamics 365 for Customer Engagement. Você fornece os valores de parâmetro apropriados para sua conta e servidor.
CrmSvcUtil.exe /url:https://<organizationUrlName>.api.crm.dynamics.com/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions
Observe o uso do parâmetro /generateActions. Para obter mais informações: Crie classes de entidade vinculadas antecipadamente com a ferramenta de geração de código (CrmSvcUtil.exe).
Pode usar tipos de associação antecipada ou tardia com as classes de pedido e resposta geradas para a sua ação.
Executar uma ação usando a API Web
Uma nova ação é criada na API Web quando ela é criada. Se a ação for criada no contexto de uma entidade, ela será vinculada a essa entidade. Caso contrário, trata-se de uma ação desvinculada. Mais informações: Utilizar ações da API Web.
Executar uma ação usando um recurso da Web JavaScript
Uma ação pode ser executada usando a API da Web como qualquer ação do sistema. Para obter mais informações: Xrm.WebApi.online.execute
Executar uma ação usando o serviço da organização
Para executar uma ação usando o serviço Web da organização usando código gerenciado, siga estas etapas.
Inclua o ficheiro de tipos de associação antecipada que gerou usando a ferramenta CrmSvcUtil no projeto da sua aplicação.
No código do aplicativo, instancie a solicitação da ação e preencha todas as propriedades necessárias.
Invoque Execute, passando sua solicitação como um argumento.
Antes de executar o código do aplicativo, verifique se a ação está ativada. Caso contrário, você receberá um erro em tempo de execução.
Executar uma ação usando um processo
Você pode executar uma ação a partir de fluxos de trabalho, caixas de diálogo ou outras ações do processo. As ações personalizadas ativadas estão disponíveis para os processos selecionando o item Executar ação na lista suspensa Adicionar etapa do formulário de processo do aplicativo Web. Depois que a etapa for adicionada ao seu processo, você poderá selecionar sua nova ação personalizada (ou qualquer ação) na lista Ação fornecida na etapa. Selecione Definir propriedades na etapa para especificar quaisquer parâmetros de entrada que sua ação personalizada exija.
Observação
Se uma ação personalizada tiver tipos de parâmetros sem suporte, por exemplo, Lista de opções, Entidade ou Coleção de entidades, a ação personalizada não estará listada na lista Ação .
A capacidade de executar uma ação a partir de um processo foi introduzida com o Dynamics CRM Online 2015 Atualização 1.
As verificações existentes da plataforma Depth asseguram que não ocorra um ciclo infinito. Para obter mais informações sobre limites de profundidade, consulte MaxDepth.
Cuidado com ações de execução prolongada
Se um dos passos do fluxo de trabalho em tempo real da ação for uma atividade de fluxo de trabalho personalizada, essa atividade de fluxo de trabalho personalizada será executada dentro do ambiente de tempo de execução isolado do sandbox e estará sujeita ao limite de dois minutos, semelhante à forma como os plug-ins em sandbox são geridos. No entanto, não há restrições quanto ao tempo total que a ação em si pode levar. Além disso, se uma ação participar numa transação com reversão ativada, os tempos limite do SQL Server serão aplicados.
Sugestão
Uma recomendação de práticas recomendadas é que as operações de longa execução devem ser executadas fora do Dynamics 365 Customer Engagement (local) usando processos assíncronos ou em segundo plano do .NET.
Ver também
Crie fluxos de trabalho em tempo real
Usar caixas de diálogo para processos guiados
Pipeline de execução de eventos
Escreva fluxos de trabalho para automatizar processos de negócios
Personalize o seu sistema