Compartir vía


Nuevas capacidades para eludir la lógica de negocios personalizada (versión preliminar)

[Este artículo es documentación preliminar y está sujeto a modificaciones].

Las vistas previas de características no se han diseñado para un uso de producción y pueden tener una funcionalidad restringida. Estas características están disponibles antes del lanzamiento oficial para que los clientes puedan tener un acceso anticipado y proporcionar comentarios.

Hay dos nuevas formas para que los desarrolladores de clientes eviten la lógica de negocios personalizada. Pruebe estos nuevos parámetros opcionales y háganos saber su opinión. Para problemas con estas funciones de vista previa, como errores recibidos, utilice la Ayuda + experiencia de soporte e incluya la siguiente información: Tipo de problema: Dataverse API web y SDK.

Cuando omitir la lógica de negocios personalizada

Hay ocasiones en las que desea poder realizar operaciones de datos sin tener que aplicar una lógica de negocios personalizada. 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 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.

Nota

El parámetro opcional existente BypassCustomPluginExecutionl es limitado porque sólo puede omitir lógica de negocios sincrónica. Estas nuevas opciones proporcionan más flexibilidad. El parámetro opcional BypassCustomPluginExecution seguirá siendo compatible. Cuando estas nuevas capacidades estén disponibles de forma generalizada, serán nuestro método recomendado.

Los flujos de Power Automate no se omiten utilizando estos parámetros opcionales. Aprenda a omitir flujos Power Automate

Nuevos parámetros opcionales

Los dos nuevos parámetros opcionales que puede utilizar para omitir la lógica empresarial personalizada se presentan en la siguiente tabla.

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.

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 síncrona, la lógica asíncrona 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 Description
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 el 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 síncrona y asíncrona. 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 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. No intente editar este valor usted mismo. 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.

Agregar el privilegio prvBypassCustomBusinessLogic a otro rol

Los parámetros opcionales descritos en este artículo requieren roles de seguridad que solo se agregan al sistema Administrador rol de seguridad. Este privilegio no está disponible 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. El identificador del privilegio prvBypassCustomBusinessLogic es 0ea552b0-a491-4470-9a1b-82068deccf66. Este valor de ID es el mismo para todos los entornos 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 personalizada (P+F)

A continuación se presentan preguntas frecuentes sobre el uso de los parámetros opcionales descritos en este artículo para omitir la lógica de negocios personalizada.

¿Estos parámetros opcionales funcionan para operaciones de datos mediante flujos de trabajo y 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.

Consulte también

API web: Componer solicitudes HTTP y administrar errores
Usar parámetros opcionales
Omitir lógica sincrónica
Omitir flujos de Power Automate

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