Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede ampliar la funcionalidad de Dynamics 365 Customer Engagement (on-premises) mediante la creación de mensajes personalizados conocidos como acciones. Estas acciones tendrán clases de solicitud/respuesta asociadas y se generará una acción de API web. Normalmente, las acciones se usan para agregar una nueva funcionalidad específica del dominio al servicio web de la organización o para combinar varias solicitudes de mensajes de servicio web de la organización en una sola solicitud. Por ejemplo, en un centro de atención telefónica de soporte técnico, es posible que desee combinar los mensajes Crear, Asignar y Setstate en un único mensaje nuevo Escalar.
La lógica de negocio de una acción se implementa mediante un flujo de trabajo. Al crear una acción, el flujo de trabajo en tiempo real asociado se registra automáticamente para ejecutarse en la etapa 30 (operación principal) de la canalización de ejecución. Para obtener más información sobre los flujos de trabajo en tiempo real, consulte Tipos de flujo de trabajo.
Aunque las acciones se admiten en Dynamics 365 for Customer Engagement, la creación de una acción en código (mediante XAML) solo es compatible con las implementaciones locales e IFD. Los clientes en línea deben crear acciones de forma interactiva en la aplicación web.
Acerca de las definiciones de acción
Una acción se define mediante un Workflow
registro de entidad, similar a un flujo de trabajo en tiempo real. Algunos puntos clave de qué es una acción y cómo funciona se encuentran en la siguiente lista:
Puede estar asociado a una sola entidad o ser global (no asociado a ninguna entidad en particular).
Se ejecuta en la fase 30 de la operación principal de la canalización de ejecuciones de eventos.
Admite la invocación de plugins registrados en las etapas preoperativas y postoperativas de la canalización de ejecución de eventos.
Puede tener complementos registrados en las fases de operación previa y posterior solo cuando el estado de la acción es Activado.
Está disponible a través de la API web o de los endpoints
organization.svc
yorganization.svc/web
.Se puede ejecutar mediante un recurso web de JavaScript. Más información: Ejecutar una acción mediante un recurso web de JavaScript
Siempre se ejecuta en el contexto de seguridad del usuario que llama.
El registro no se puede eliminar mientras hay pasos de complementos registrados en la acción.
Opcionalmente, mediante una configuración, puede participar en la transacción actual de la base de datos.
No admite un ámbito en el que la ejecución esté restringida a un usuario, una unidad de negocio o una organización. Las acciones siempre se ejecutan en el ámbito de la organización.
Admite argumentos de entrada y salida.
Admite la auditoría de cambios de datos.
No es compatible con clientes sin conexión.
Se puede invocar mediante una llamada al método de servicio web.
Se puede invocar directamente desde un flujo de trabajo.
Permisos necesarios
Se requiere un privilegio de seguridad denominado Activar procesos en tiempo real (prvActivateSynchronousWorkflow
) para activar el flujo de trabajo en tiempo real de una acción para que se pueda ejecutar. Esto se suma a los privilegios necesarios para crear un flujo de trabajo.
Creación de una acción mediante código
Normalmente, un personalizador implementaría una acción mediante el diseñador de flujo de trabajo interactivo de la aplicación web. Sin embargo, los desarrolladores pueden implementar acciones mediante llamadas al SDK e implementarlas en un servidor local o IFD si lo desean.
En la tabla siguiente se describen los atributos de entidad de flujo de trabajo que se utilizan para una acción. El código de ejemplo para un flujo de trabajo en tiempo real se puede encontrar en el tema Crear un flujo de trabajo en tiempo real en el código.
Atributo de flujo de trabajo | Descripción |
---|---|
Category |
Establécelo en WorkflowCategory.CustomOperation . |
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. |
Mode |
No utilizado. |
IsTransacted |
Establézcalo en true si la acción debe participar en la transacción de la base de datos; de lo contrario, false . El valor predeterminado es true . |
UniqueName |
Un nombre único para la acción. El nombre se compone de un prefijo de editor + "_" + el nombre único. |
Xaml |
Establezca el código XAML que define el flujo de trabajo en tiempo real de la acción. No hay forma de hacer referencia a otro flujo de trabajo en tiempo real existente. |
Adición de argumentos de entrada y salida
Las acciones admiten argumentos de entrada y salida que se pueden agregar al flujo de trabajo mediante un tipo DynamicActivityProperty . Al agregar estos argumentos al flujo de trabajo de una acción, se convierten en propiedades de las clases de solicitud y respuesta de mensaje asociadas a esa acción. Por ejemplo, en el ejemplo siguiente se muestra código C# y XAML para dos argumentos de entrada y uno de salida.
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>
Los nombres utilizados para las propiedades deben ser coherentes con los nombres de los argumentos, ya que la generación de código definirá estos nombres como propiedades de solicitud o respuesta.
En la tabla siguiente se muestran los tipos de argumentos admitidos para los argumentos de entrada y salida.
Tipo .NET | Tipo de argumento |
---|---|
System.Int32 | Entero |
System.String | Cuerda |
EntityReference | EntityReference |
Entity | Entidad |
EntityCollection | EntityCollection |
System.DateTime | Fecha y hora |
System.Double | Flotar |
System.Decimal | Decimal |
Money | Dinero |
System.Boolean | Booleana |
OptionSetValue | Lista de selección |
Los atributos de argumento admitidos se enumeran en la tabla siguiente.
Atributo de argumento | Descripción |
---|---|
ArgumentRequiredAttribute | Indica si el argumento es obligatorio. |
ArgumentDirectionAttribute | Indica si la dirección del argumento es una entrada o una salida. |
ArgumentDescriptionAttribute | Especifica una descripción para el argumento. |
ArgumentEntityAttribute | Se utiliza si desea transmitir una entidad. |
ArgumentTargetAttribute | Este atributo se genera o agrega automáticamente. Apunta a la entidad principal para la que se ejecuta el flujo de trabajo. Este atributo es opcional para las acciones globales. |
Empaquetar una acción para su distribución
Para distribuir la acción de modo que se pueda importar a una organización de Dynamics 365 Customer Engagement (on-premises), agregue la acción a una solución de Customer Engagement. Esto se hace fácilmente mediante 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.
Generar tipos de enlace en tiempo de compilación para una acción
Con la herramienta CrmSvcUtil, puede generar clases de solicitud y respuesta para que la acción se incluya en el código de la aplicación. Sin embargo, antes de generar estas clases, asegúrese de activar la acción.
Para descargar el CrmSvcUtil.exe, consulte las herramientas de desarrollo de Dataverse.
En el ejemplo siguiente se muestra el formato para ejecutar la herramienta desde la línea de comandos para una instalación local de Customer Engagement. Usted proporciona los valores de los parámetros para su 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
En el ejemplo siguiente se muestra el formato para ejecutar la herramienta desde la línea de comandos con Dynamics 365 for Customer Engagement. Usted proporciona los valores de parámetro apropiados para su cuenta y 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 el uso del parámetro /generateActions
. Más información: Crear clases de entidad con enlace en tiempo de compilación con la herramienta de generación de código (CrmSvcUtil.exe)
Puede usar tipos de enlace en tiempo de compilación y en tiempo de ejecución con las clases generadas de solicitud y respuesta para la acción.
Ejecución de una acción mediante la API web
Al crearse una nueva acción, esta se añade a la API web. Si la acción se crea en el contexto de una entidad, está enlazada a esa entidad. De lo contrario, se trata de una acción no consolidada. Más infomación: Usar acciones web API.
Ejecutar una acción mediante un recurso web de JavaScript
Una acción se puede ejecutar mediante la API web como cualquier acción del sistema. Más información: Xrm.WebApi.online.execute
Ejecutar una acción mediante el servicio de organización
Para ejecutar una acción mediante el servicio web de la organización mediante código administrado, siga estos pasos.
Incluya el archivo de tipos de enlace en tiempo de compilación que generó con la herramienta CrmSvcUtil en el proyecto de la aplicación.
En el código de aplicación, cree una instancia de la solicitud de la acción y complete las propiedades necesarias.
Invoque Execute, pasando su solicitud como argumento.
Antes de ejecutar el código de la aplicación, asegúrese de que la acción esté activada. De lo contrario, recibirá un error de ejecución.
Ejecutar una acción mediante un proceso
Puede ejecutar una acción desde flujos de trabajo, cuadros de diálogo u otras acciones de proceso. Las acciones personalizadas activadas están disponibles para los procesos seleccionando el elemento Realizar acción en el menú desplegable Agregar paso del formulario de proceso de la aplicación web. Una vez que el paso se agrega al proceso, puede seleccionar la nueva acción personalizada (o cualquier acción) de la lista de acciones proporcionada en el paso. Seleccione Establecer propiedades en el paso para especificar los parámetros de entrada que requiera la acción personalizada.
Nota:
Si una acción personalizada tiene tipos de parámetros no admitidos, por ejemplo, Lista de selección, Entidad o Colección de entidades, la acción personalizada no aparece en la lista de acciones .
La capacidad de ejecutar una acción a partir de un proceso se introdujo con Dynamics CRM Online 2015 Update 1.
Las plataforma de Depth existentes comprueba para asegurarse que no se produce un bucle infinito. Para obtener más información sobre los límites de profundidad, consulte MaxDepth.
Observar las acciones de ejecución prolongada
Si uno de los pasos del flujo de trabajo en tiempo real de la acción es una actividad de flujo de trabajo personalizada, esa actividad de flujo de trabajo personalizada se ejecuta dentro del entorno aislado de ejecución de sandbox y estará sujeta al límite de tiempo de espera de dos minutos, de forma similar a cómo se administran los complementos en aislamiento. Sin embargo, no hay restricciones en la cantidad de tiempo total que puede durar la acción en sí. Además, si la acción participa en una transacción en la que está habilitada la reversión, se aplicarán los tiempos de espera de SQL Server.
Sugerencia
Una recomendación de procedimiento recomendado es que las operaciones de ejecución prolongada se ejecuten fuera de Dynamics 365 Customer Engagement (on-premises) mediante procesos asincrónicos o en segundo plano de .NET.
Consulte también
Crear flujos de trabajo en tiempo real
Uso de cuadros de diálogo para procesos guiados
Canalización de ejecución de eventos
Escribir flujos de trabajo para automatizar los procesos empresariales
Personaliza tu sistema