Compartir por


Crea as túas propias accións

Podes ampliar a funcionalidade de Dynamics 365 Customer Engagement (on-premises) creando mensaxes personalizadas coñecidas como accións. Estas accións terán clases de solicitude / resposta asociadas e xerarase unha acción API web. As accións utilízanse normalmente para engadir novas funcionalidades específicas do dominio ao servizo web da organización ou para combinar varias solicitudes de mensaxes de servizos web da organización nunha única solicitude. Por exemplo, nun centro de chamadas de soporte, pode querer combinar as mensaxes Crear, Asignar e Setstate nunha única nova mensaxe de escalada.

A lóxica de negocio dunha acción implementase mediante un fluxo de traballo. Cando creas unha acción, o fluxo de traballo en tempo real asociado rexístrase automaticamente para executalo na fase 30 (operación principal) da pipeline de execución. Para obter máis información sobre os fluxos de traballo en tempo real, consulte Tipos de fluxos de traballo.

Aínda que as accións están soportadas en Dynamics 365 for Customer Engagement, a creación dunha acción no código (usando XAML) só está soportada por implementacións locais e IFD. Os clientes en liña deben crear accións de forma interactiva na aplicación web.

 

Acerca das definicións de acción

Unha acción defínese usando un Workflow rexistro de entidade, similar a un fluxo de traballo en tempo real. Algúns puntos clave do que é unha acción e como funciona están na seguinte lista:

  • Pode estar asociado a unha única entidade ou ser global (non asociado a ningunha entidade en particular).

  • Está executado na fase 30 da operación central da pipeline de execución de eventos.

  • Soporta a invocación de complementos rexistrados nas fases previas e post-operacións da pipeline de execución de eventos.

  • Só pode ter complementos rexistrados nas fases previas ou post-operación cando o estado da acción está activado.

  • Está dispoñible a través da API web ou organization.svc e organization.svc/web puntos de final.

  • Pódese executar usando un recurso web JavaScript. Máis información: Executar unha acción usando un recurso web JavaScript

  • Funciona sempre baixo o contexto de seguridade do usuario chamado.

  • Non se pode eliminar o rexistro mentres hai pasos de engadidos rexistrados na acción.

  • Pode participar opcionalmente, a través dunha configuración de configuración, na transacción actual da base de datos.

  • Non admite un ámbito no que a execución está restrinxida a un usuario, unidade de negocio ou organización. As accións sempre se executan no ámbito da organización.

  • Soporta argumentos de entrada e saída.

  • Soporte para a auditoría de cambios de datos.

  • Non está soportado con clientes sen conexión.

  • Pódese invocar mediante unha chamada de método de servizo web.

  • Pódese invocar directamente desde un fluxo de traballo.

Permisos requiridos

Requírese un privilexio de seguridade chamado Activar procesosprvActivateSynchronousWorkflow en tempo real para activar o fluxo de traballo en tempo real dunha acción para que poida ser executada. Isto é ademais de todos os privilexios necesarios para crear un fluxo de traballo.

Crear unha acción usando código

Normalmente, unha acción sería implementada por un personalizador usando o deseñador interactivo de fluxos de traballo da aplicación web. Non obstante, os desenvolvedores poden implementar accións usando chamadas SDK e implementalas nun servidor local ou IFD se o desexan.

Os atributos da entidade de fluxo de traballo que se usan para unha acción descríbense na seguinte táboa. O código de exemplo para un fluxo de traballo en tempo real pódese atopar no tema Crear un fluxo de traballo en tempo real en código.

Atributo do fluxo de traballo Descripción
Category Establecer a WorkflowCategory.CustomOperation.
SyncWorkflowLogOnError Cando truese rexistran erros nos ProcessSession rexistros. A diferenza dos fluxos de traballo asíncronos, a execución do fluxo de traballo en tempo real non se rexistra nos System Job rexistros.
Mode Non utilizado.
IsTransacted Estableza se true a acción debe participar na transacción da base de datos; en caso contrario, false. O valor predefinido é true.
UniqueName Un nome único para a acción. O nome está composto por un prefixo editorial + "_" + o nome único.
Xaml Configure o código XAML que define o fluxo de traballo en tempo real da súa acción. Non hai forma de referirse a outro fluxo de traballo en tempo real existente.

Engadir argumentos de entrada e saída

As accións soportan argumentos de entrada e saída que se poden engadir ao fluxo de traballo usando un tipo DynamicActivityProperty . Cando engade estes argumentos ao fluxo de traballo dunha acción, convértense en propiedades nas clases de solicitude de mensaxe e resposta asociadas a esa acción. Por exemplo, o seguinte exemplo mostra o código C# e XAML para dous argumentos de entrada e un 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 propiedades deben ser consistentes cos nomes dos argumentos, xa que a xeración de código definirá estes nomes como propiedades de solicitude ou resposta.

Os tipos de argumentos soportados para os argumentos de entrada e saída móstranse na seguinte táboa.

Tipo .NET Tipo de argumento
System.Int32 Número enteiro
System.String Cadea
EntityReference Referencia de entidade
Entity Entidad
EntityCollection Colección de entidades
System.DateTime DataHora
Sistema. Dobre Flotar
System.Decimal Decimal
Money Diñeiro
Sistema.Booleano Booleanounit synonyms for matching user input
OptionSetValue Lista de selección

Os atributos de argumentos soportados están listados na seguinte táboa.

Atributo argumento Descripción
ArgumentRequiredAttribute Indica se o argumento é necesario.
ArgumentDirectionAttribute Indica se a dirección do argumento é unha entrada ou saída.
ArgumentDescriptionAttribute Especifica unha descrición para o argumento.
ArgumentEntityAttribute Utilízase se queres pasar a unha entidade.
ArgumentTargetAttribute Este atributo é xerado ou engadido automaticamente. Apunta á entidade principal para a que se executa o fluxo de traballo. Este atributo é opcional para accións globais.

Empaquetar unha acción para a distribución

Para distribuír a túa acción de xeito que poida ser importada nunha organización de Dynamics 365 Customer Engagement (on-premises), engade a túa acción a unha solución de Customer Engagement. Isto faise facilmente usando a aplicación web navegando a Configuración>Personalizacións Solucións>. Tamén podes escribir código para crear a solución. Para obter máis información sobre as solucións, consulte Empaquetar e distribuír extensións.

Xerar tipos de limitación anticipada para unha acción

Usando a ferramenta CrmSvcUtil, pode xerar clases de solicitudes e respostas para que a súa acción inclúa no código da aplicación. Non obstante, antes de xerar estas clases, asegúrese de activar a acción.

Para descargar o CrmSvcUtil.exe, consulte Ferramentas de desenvolvemento de Dataverse.

O seguinte exemplo mostra o formato para executar a ferramenta desde a liña de comandos para unha instalación local de Customer Engagement. Proporciona os valores dos parámetros para a instalación.

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 seguinte exemplo mostra o formato para executar a ferramenta desde a liña de comandos con Dynamics 365 for Customer Engagement. Proporciona os valores de parámetros axeitados para a túa 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  

Observa o uso do /generateActions parámetro. Máis información: Crear clases de entidades vinculadas precoz coa ferramenta de xeración de código (CrmSvcUtil.exe).

Podes usar tipos de vinculación anticipada ou tardía coas clases de solicitude e resposta xeradas para a túa acción.

Executar unha acción usando a API Web

Créase unha nova acción na API web cando se crea. Se a acción se crea no contexto dunha entidade, está ligada a esa entidade. En caso contrario, é unha acción sen limitacións. Máis información: Usar accións API web.

Executar unha acción usando un recurso web JavaScript

Unha acción pode ser executada usando a API web como calquera acción do sistema. Máis información: Xrm.WebApi.online.execute

Executar unha acción usando o servizo de organización

Para executar unha acción usando o servizo web da organización usando código xestionado, siga estes pasos.

  1. Inclúa o ficheiro de tipos de vinculación inicial que xerou usando a ferramenta CrmSvcUtil no proxecto do seu programa.

  2. No código da aplicación, instanza da solicitude da acción e enche todas as propiedades requiridas.

  3. Invoca Executea túa solicitude como argumento.

    Antes de executar o código da aplicación, asegúrese de que a acción está activada. En caso contrario, recibirás un erro de tempo de execución.

Executar unha acción usando un proceso

Pode executar unha acción a partir de fluxos de traballo, diálogos ou outras accións do proceso. As accións personalizadas activadas están dispoñibles para os procesos seleccionando o elemento Executar acción no despregable Engadir paso do formulario de proceso da aplicación web. Despois de engadir o paso ao proceso, pode seleccionar a súa nova acción personalizada (ou calquera acción) na lista de accións proporcionada no paso. Seleccione Establecer propiedades no paso para especificar os parámetros de entrada que requira a acción personalizada.

Nota

Se unha acción personalizada ten tipos de parámetros non soportados, por exemplo Lista de selección, Entidade ou Colección de entidades, a acción personalizada non aparece na lista de accións .

A posibilidade de executar unha acción a partir dun proceso introduciuse con Dynamics CRM Online 2015 Update 1.

As comprobacións da plataforma existentes Depth aseguran que non se produce un bucle infinito. Para máis información sobre os límites de profundidade, véxase.MaxDepth

Coidado coas accións de longa duración

Se un dos pasos do fluxo de traballo en tempo real da acción é unha actividade de fluxo de traballo personalizada, esa actividade de fluxo de traballo personalizada executarase dentro do ambiente illado de tempo de execución de sandbox e estará suxeita ao límite de tempo límite de dous minutos, de xeito similar a como se xestionan os complementos en caixa de area. Non obstante, non hai restricións sobre a cantidade de tempo total que pode levar a acción en si. Ademais, se unha acción participa nunha transacción, onde o rollback está activado, aplicaranse tempos límites de SQL Server.

Suxestión

Unha recomendación de boas prácticas é que as operacións de longa duración deben executarse fóra de Dynamics 365 Customer Engagement (on-premises) usando procesos asíncronos ou en fondo .NET.

Consulte tamén

Crear fluxos de traballo en tempo real
Usar diálogos para procesos guiados
Pipeline de execución de eventos
Escribir fluxos de traballo para automatizar os procesos de negocio
Personaliza o teu sistema