Omitir lógica de Dataverse personalizada
Hay ocasiones en las que desea poder realizar operaciones de datos sin tener que aplicar una lógica de negocios personalizada en Dataverse. Estos escenarios generalmente involucran operaciones de datos masivos donde se crean, actualizan o eliminan grandes cantidades de registros.
Sin una forma de indicar Dataverse que no invoque la lógica empresarial, debe localizar y deshabilitar los complementos y flujos de trabajo personalizados individuales que contienen la lógica empresarial. Deshabilitar complementos y flujos de trabajo significa que la lógica estará deshabilitada para todos los usuarios mientras esos complementos y flujos de trabajo están deshabilitados. También significa que debe tener cuidado de deshabilitar solo los complementos y flujos de trabajo correctos y recordar volver a habilitarlos cuando haya terminado.
En lugar de este proceso manual, como desarrollador de una aplicación cliente o complemento, puede pasar parámetros opcionales especiales con sus solicitudes para controlar dos tipos de lógica empresarial personalizada como descrito en la siguiente tabla:
Tipo de lógica | Cuándo omitir |
---|---|
Lógica sincrónica | Permitir que la operación de datos masivos se complete lo más rápido posible. Omita la lógica sincrónica cuando sepa que los datos que está cambiando cumplen los requisitos de la organización o tenga un plan para lograr esta lógica por otros medios. Omita toda la lógica sincrónica personalizada para que cada operación pueda completarse más rápido, acortando el tiempo total de la operación masiva. |
Lógica asíncrona | Cuando una gran cantidad de trabajos del sistema creados para procesar la lógica asincrónica provocan un retraso en Dataverse que puede afectar al rendimiento. Puede mitigar este problema de rendimiento si no activa la lógica asincrónica mientras realiza operaciones masivas. |
Nota
Power Automate Los flujos representan otro tipo de lógica asincrónica que se puede gestionar por separado. Consulte Omitir flujos de Power Automate
Parámetros opcionales
Utilice estos parámetros opcionales para controlar la lógica empresarial ejecutada en Dataverse:
Parámetro opcional | Description |
---|---|
BypassBusinessLogicExecution |
Pasa los valores CustomSync , CustomAsync , o CustomSync,CustomAsync a este parámetro opcional para omitir la lógica síncrona, la lógica asíncrona o ambas. |
BypassBusinessLogicExecutionStepIds |
Pase una lista separada por comas de registros de pasos del complemento para omitir solo los pasos del complemento especificados. |
BypassCustomPluginExecution |
Omita solo la lógica sincrónica. Este parámetro opcional se admite pero no se recomienda. Utilice BypassBusinessLogicExecution con el valor de CustomSync para obtener el mismo resultado. |
BypassBusinessLogicExecution
El parámetro opcional BypassBusinessLogicExecution
funciona de manera similar al parámetro opcional BypassCustomPluginExecution
, excepto que puede elegir si desea omitir la lógica sincrónica, la lógica asincrónica o ambas.
Este parámetro opcional tiene como objetivo la lógica de negocios personalizada que se ha aplicado para su organización. Cuando envía solicitudes que omiten la lógica de negocios personalizada, todos los complementos personalizados y los flujos de trabajo se deshabilitan excepto:
- Complementos que forman parte del núcleo del sistema de Microsoft Dataverse o parte de una solución en la que Microsoft es el editor.
- Flujos de trabajo incluidos en una solución en la que Microsoft es el editor.
Los complementos del sistema definen los comportamientos básicos para entidades específicas. Sin estos complementos, encontraría inconsistencias en los datos que pueden no ser fáciles de solucionar.
Soluciones enviadas por Microsoft que utilizan Dataverse como Microsoft Dynamics 365 Customer Service o Dynamics 365 Sales también incluyen una lógica de negocios crítica que no se puede omitir con esta opción.
Importante
Es posible que haya comprado e instalado soluciones de otros proveedores de software independientes (ISV) que incluyen su propia lógica empresarial. Se omitirá la lógica aplicada por estas soluciones. Debe consultar con estos ISV antes de usar esta opción para comprender el impacto que puede tener si usa esta opción con los datos que usan sus soluciones.
La siguiente tabla describe cuándo utilizar los valores de los parámetros con BypassBusinessLogicExecution
.
Parámetro | Descripción |
---|---|
CustomSync |
Omita solo la lógica personalizada síncrona. El tiempo de cálculo necesario para la lógica síncrona se suma al tiempo total necesario para realizar cada operación de datos. Utilice esta opción para reducir la cantidad de tiempo necesaria para completar operaciones de forma masiva. |
CustomAsync |
Omita solo la lógica personalizada asincrónica, excluyendo flujos de Power Automate. Dataverse aplica lógica asincrónica después de que se completa una operación. Cuando una gran cantidad de operaciones activan la lógica asincrónica, Dataverse requiere más recursos para procesar la lógica personalizada y este consumo de recursos puede afectar al rendimiento. Utilice esta opción para evitar problemas generales de rendimiento que pueden ocurrir cuando una gran cantidad de operaciones activan la lógica asincrónica. |
CustomSync,CustomAsync |
Omita la lógica personalizada asincrónica y sincrónica, excluyendo flujos de Power Automate. |
Requisitos para utilizar el parámetro opcional BypassBusinessLogicExecution
- Debe enviar las solicitudes utilizando el parámetro opcional
BypassBusinessLogicExecution
. - El usuario que envía las solicitudes debe tener el privilegio
prvBypassCustomBusinessLogic
. De forma predeterminada, solo los usuarios con el rol de seguridad Administrador del sistema tienen este privilegio. Aprenda cómo agregar el privilegioprvBypassCustomBusinessLogic
de otro rol
¿Cómo uso el parámetro opcional BypassBusinessLogicExecution
?
Puede utilizar esta opción con la API web o SDK para .NET.
El siguiente ejemplo establece el parámetro opcional BypassBusinessLogicExecution
para lógica personalizada síncrona y asíncrona al crear un nuevo registro de cuenta utilizando el SDK para .NET clase CreateRequest.
static void DemonstrateBypassBusinessLogicExecution(IOrganizationService service)
{
Entity account = new("account");
account["name"] = "Sample Account";
CreateRequest request = new()
{
Target = account
};
request.Parameters.Add("BypassBusinessLogicExecution", "CustomSync,CustomAsync");
service.Execute(request);
}
BypassBusinessLogicExecutionStepIds
Utilice el parámetro opcional BypassBusinessLogicExecutionStepIds
para omitir los pasos del complemento registrados especificados en lugar de toda la lógica personalizada sincrónica y asincrónica. Pase los valores GUID de los registros de pasos del complemento registrados con este parámetro. Si el ID del paso pasado no se ejecuta en la solicitud dada, se ignora.
¿Cómo uso la opción BypassBusinessLogicExecutionStepIds?
Puede utilizar esta opción con la API web o SDK para .NET.
El siguiente ejemplo establece el parámetro opcional BypassBusinessLogicExecutionStepIds
al crear un nuevo registro de cuenta usando la clase CreateRequest.
static void DemonstrateBypassBusinessLogicExecutionStepIds(IOrganizationService service)
{
Entity account = new("account");
account["name"] = "Sample Account";
CreateRequest request = new()
{
Target = account
};
request.Parameters.Add("BypassBusinessLogicExecutionStepIds", "45e0c603-0d0b-466e-a286-d7fc1cda8361,d5370603-e4b9-4b92-b765-5966492a4fd7");
service.Execute(request);
}
Identifique los pasos que desea omitir
Hay un par de formas de localizar los valores GUID del registro del paso del complemento.
Uso de la herramienta de registro de complementos
En el menú Ver, seleccione Mostrar por entidad.
Seleccione la entidad y mensaje
Seleccione el paso.
En el panel de detalles, la pestaña Propiedades muestra el StepId. Copie el valor de allí.
Obtenga más información sobre la herramienta de registro de complementos
Consulta su entorno con la API web
Utilice una consulta como la siguiente para recuperar los registros de pasos del complemento establecidos para una tabla y un mensaje determinados. El siguiente ejemplo especifica la tabla account
, utilizando el nombre lógico de la tabla. Create
es el nombre del mensaje. Reemplace estos valores con la tabla y el mensaje que necesita.
Solicitar
GET [Organization URI]/api/data/v9.2/sdkmessagefilters?$select=sdkmessagefilterid
&$filter=primaryobjecttypecode eq 'account'
and sdkmessageid/name eq 'Create'
&$expand=sdkmessagefilterid_sdkmessageprocessingstep($select=name;
$filter=statecode eq 0
and customizationlevel eq 1
and iscustomizable/Value eq true)
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Response
En la respuesta, busque los valores sdkmessageprocessingstepid
. Utilice el valor name
para identificar el complemento que desea omitir.
En este caso sólo hay uno: 4ab978b0-1d77-ec11-8d21-000d3a554d57
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sdkmessagefilters(sdkmessagefilterid,sdkmessagefilterid_sdkmessageprocessingstep(name))",
"value": [
{
"@odata.etag": "W/\"31434372\"",
"sdkmessagefilterid": "c2c5bb1b-ea3e-db11-86a7-000a3a5473e8",
"sdkmessagefilterid_sdkmessageprocessingstep": [
{
"@odata.etag": "W/\"115803276\"",
"name": "BasicPlugin.FollowupPlugin: Create of account",
"_sdkmessagefilterid_value": "c2c5bb1b-ea3e-db11-86a7-000a3a5473e8",
"sdkmessageprocessingstepid": "4ab978b0-1d77-ec11-8d21-000d3a554d57"
}
],
"sdkmessagefilterid_sdkmessageprocessingstep@odata.nextLink": "[Organization URI]/api/data/v9.2/sdkmessagefilters(c2c5bb1b-ea3e-db11-86a7-000a3a5473e8)/sdkmessagefilterid_sdkmessageprocessingstep?$select=name&$filter=statecode%20eq%200%20and%20customizationlevel%20eq%201%20and%20iscustomizable/Value%20eq%20true"
}
]
}
Obtenga más información sobre cómo consultar datos mediante la API web
Consulta su entorno con FetchXml
Utilice una consulta como la siguiente para recuperar los registros de pasos del complemento establecidos para una tabla y un mensaje determinados. El siguiente ejemplo especifica 1
para representar la tabla account
, utilizando el código de tipo de objeto de tabla.
Nota
Para las tablas donde el código de tipo de objeto es superior a 10000
, el valor no será el mismo en todos los entornos porque a este valor se le asigna un valor incremental cuando se crea la tabla.
Si conoce el nombre lógico de la tabla, puede obtener el código del tipo de objeto mediante una solicitud de API web. Esta solicitud devuelve el valor 1
, el código de tipo de objeto para la tabla account
.
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')/ObjectTypeCode/$value
Create
es el nombre del mensaje. Reemplace estos valores con la tabla y el mensaje que necesita.
Utilice esta consulta FetchXml para devolver valores step.sdkmessageprocessingstepid
que puede usar con el parámetro opcional BypassBusinessLogicExecutionStepIds
.
<fetch>
<entity name='sdkmessagefilter'>
<filter>
<condition attribute='primaryobjecttypecode'
operator='eq'
value='1' />
</filter>
<link-entity name='sdkmessage'
from='sdkmessageid'
to='sdkmessageid'
link-type='inner'
alias='message'>
<filter>
<condition attribute='name'
operator='eq'
value='Create' />
</filter>
</link-entity>
<link-entity name='sdkmessageprocessingstep'
from='sdkmessagefilterid'
to='sdkmessagefilterid'
link-type='inner'
alias='step'>
<attribute name='name' />
<filter>
<condition attribute='statecode'
operator='eq'
value='0' />
<condition attribute='customizationlevel'
operator='eq'
value='1' />
<condition attribute='iscustomizable'
operator='eq'
value='1' />
</filter>
</link-entity>
</entity>
</fetch>
Obtenga más información sobre cómo recuperar datos usando FetchXml
Limitar al número de pasos
Para garantizar que el tamaño del parámetro no sea demasiado grande, el límite predeterminado en la cantidad de pasos que puede pasar es tres. El límite se controla utilizando los datos de la columna Tabla de organización OrgDbOrgSettings. Utilice la herramienta OrgDBOrgSettings para Microsoft Dynamics CRM o aplicación OrgDbOrgSettings para cambiar el valor BypassBusinessLogicExecutionStepIdsLimit
.
El tamaño máximo recomendado para este límite es de 10 pasos.
BypassCustomPluginExecution
Utilice el parámetro opcional BypassCustomPluginExecution
para omitir la lógica sincrónica personalizada.
Nota
Este fue el primer parámetro opcional que permitió limitar la lógica de negocio. Sigue siendo soportado, pero recomendamos usar BypassBusinessLogicExecution
con el valor CustomSync
para obtener el mismo resultado.
Utilice este parámetro opcional de la misma manera que utiliza BypassBusinessLogicExecution
, excepto que requiere un privilegio diferente: prvBypassCustomPlugins
¿Cómo uso la opción BypassCustomPluginExecution?
Puede utilizar esta opción con la API web o SDK para .NET.
Hay dos formas de usar este parámetro opcional con el SDK para .NET.
Establecer el valor como un parámetro opcional
El siguiente ejemplo establece el parámetro opcional BypassCustomPluginExecution
al crear un nuevo registro de cuenta usando la clase CreateRequest.
static void DemonstrateBypassCustomPluginExecution(IOrganizationService service)
{
Entity account = new("account");
account["name"] = "Sample Account";
CreateRequest request = new()
{
Target = account
};
request.Parameters.Add("BypassCustomPluginExecution", true);
service.Execute(request);
}
Puede utilizar este método para las operaciones de datos que inicie en sus complementos cuando el usuario que llama tiene el privilegio prvBypassCustomPlugins
.
Establezca la propiedad CrmServiceClient.BypassPluginExecution
El siguiente ejemplo establece la Propiedad CrmServiceClient.BypassPluginExecution al crear un nuevo registro de cuenta:
var service = new CrmServiceClient(connectionString);
service.BypassPluginExecution = true;
var account = new Entity("account");
account["name"] = "Sample Account";
service.Create(account);
Debido a que esta configuración se aplica al servicio, permanecerá establecida para todas las solicitudes enviadas mediante el servicio hasta que se establezca en false
.
Nota
Esta propiedad no está disponible en Dataverse.Client.ServiceClient, pero está disponible en los métodos Dataverse.Client.Extensions.CRUDExtentions.
Agregar los privilegios necesarios a otro rol
Los parámetros opcionales descritos en este artículo requieren privilegios que solo se agregan al sistema Administrador rol de seguridad. Estos privilegios no están disponibles en el diseñador rol de seguridad para agregarlo a otros roles de seguridad. Si necesita otorgar este privilegio a otro rol de seguridad, debe usar la API. Por ejemplo, es posible que desee otorgar este privilegio a un usuario con el personalizador del sistema rol de seguridad.
Para agregar el privilegio a otro rol de seguridad, necesita el ID del privilegio.
Name | ID | Parámetro(s) opcional(es) |
---|---|---|
prvBypassCustomBusinessLogic |
0ea552b0-a491-4470-9a1b-82068deccf66 |
BypassBusinessLogicExecution BypassBusinessLogicExecutionStepIds |
prvBypassCustomPlugins |
148a9eaf-d0c4-4196-9852-c3a38e35f6a1 |
BypassCustomPluginExecution |
Estos valores de Id. son los mismos para todos los entornos de Dataverse.
Asociar el privilegio prvBypassCustomBusinessLogic
a un rol de seguridad usando AddPrivilegesRoleRequest.
static void AddprvBypassCustomPluginsToRole(IOrganizationService service, Guid roleId)
{
var request = new AddPrivilegesRoleRequest
{
RoleId = roleId,
Privileges = new[]{
new RolePrivilege{
PrivilegeId = new Guid("0ea552b0-a491-4470-9a1b-82068deccf66"),
Depth = PrivilegeDepth.Global
}
}
};
service.Execute(request);
}
Preguntas frecuentes para omitir la lógica de negocios (P+F)
A continuación se presentan preguntas frecuentes sobre el uso de los parámetros opcionales para omitir la lógica de negocios sincrónica.
¿Estos parámetros opcionales omiten complementos para operaciones de datos mediante complementos de Microsoft?
No. Si un complemento o un flujo de trabajo en una solución de Microsoft realiza operaciones en otros registros, la lógica de esas operaciones no se omite. Solo se omitirán los complementos o los flujos de trabajo que se aplican a la operación específica.
¿Puedo usar estos parámetros opcionales para operaciones de datos que realizo dentro de un complemento?
Sí, pero solo cuando el complemento se ejecuta en el contexto de un usuario que tiene el privilegio necesario. Para el complementos, configure el parámetro opcional en la clase derivada de la Clase OrganizationRequest. No puede utilizar las clases CrmServiceClient o ServiceClient en un complemento.
Consulte también
Omitir flujos de Power Automate
Usar parámetros opcionales
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).