Compartir vía


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

¿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

  1. En el menú Ver, seleccione Mostrar por entidad.

  2. Seleccione la entidad y mensaje

  3. Seleccione el paso.

    En el panel de detalles, la pestaña Propiedades muestra el StepId. Copie el valor de allí.

    Use la herramienta de registro de complementos para encontrar el valor StepId

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).