Share via


Usar parámetros opcionales

Dataverse proporciona un conjunto de parámetros opcionales o valores de encabezado de solicitud que un desarrollador de una aplicación cliente puede usar para modificar el comportamiento de solicitudes individuales. Este artículo describe los valores de los parámetros y los encabezados de solicitud que puede usar para obtener los comportamientos que necesita.

Nota

Este artículo presenta estos parámetros pero no los explica en profundidad. Siga los enlaces para obtener más información y comprender completamente los escenarios para usar estos parámetros.

Modo de uso

La forma en que use estos parámetros opcionales los flujos depende de si usa el Dataverse SDK para .NET o la API web.

Por lo general, agregará el parámetro a OrganizationRequest.Parameters Collection de la clase de solicitud nombrada.

Nota

No puede especificar estos parámetros utilizando los 7 métodos abreviados expuestos con IOrganizationService. Debe usar la clase de solicitud con nombre con el método IOrganizationService.Execute.

Una excepción es cuando se establece partitionid, esto se establece como un atributo de la instancia de la entidad. Más información: Realizar una operación de datos con la partición especificada

Más información:

Asociar un componente de solución con una solución

Cuando realiza operaciones de datos en un componente de la solución, puede asociarlo con una solución especificando el nombre exclusivo de la solución con el parámetro SolutionUniqueName.

Puede utilizar este parámetro con estos mensajes:

  • AddPrivilegesRole
  • Create (POST)
  • Delete (DELETE)
  • MakeAvailableToOrganizationTemplate
  • Update (PATCH)

Los siguientes ejemplos crean un componente de solución de recursos web y lo agregan a la solución con el nombre único de ExampleSolution.

static void CreateWebResourceInSolution(IOrganizationService service)
{
    Entity webResource = new("webresource");

    webResource["displayname"] = "Simple HTML web resource";
    webResource["content"] = "PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxib2R5PgogICAgPGgxPkhlbGxvIFdvcmxkPC9oMT4KICA8L2JvZHk+CjwvaHRtbD4=";
    webResource["webresourcetype"] = new OptionSetValue(1);
    webResource["name"] = "sample_SimpleHTMLWebResource.htm";
    webResource["description"] = "An example HTML web resource";

    CreateRequest request = new();
    request.Target = webResource;
    request["SolutionUniqueName"] = "ExampleSolution";

    service.Execute(request);
}

Más información:

Más información:

Suprimir detección de duplicados

Si quiere que Dataverse emita un error cuando un registro nuevo que cree o un registro que actualiza coincida con las reglas de detección de duplicados de otro registro, debe crear o actualizar la fila usando el parámetro SuppressDuplicateDetection con un valor de false.

Los siguientes ejemplos devuelven un error cuando se cumple lo siguiente:

  • Detección de duplicados está habilitado para el entorno cuando se crea o actualiza una fila.
  • La tabla account tiene detección de duplicados habilitado
  • Se publica una regla detección de duplicados que verifica si el valor name de la cuenta coincide exactamente con una fila existente
  • Hay una cuenta existente con el nombre Sample Account.
static void DemonstrateSuppressDuplicateDetection(IOrganizationService service)
{
    Entity account = new("account");
    account["name"] = "Sample Account";

    CreateRequest request = new()
    {
        Target = account
    };
    request.Parameters.Add("SuppressDuplicateDetection", false);

    try
    {
        service.Execute(request);
    }
    catch (FaultException<OrganizationServiceFault> ex)
    {
        throw ex.Detail.ErrorCode switch
        {
            -2147220685 => new InvalidOperationException(ex.Detail.Message),
            _ => ex,
        };
    }
}

Más información:

Agregar una variable compartida al contexto de ejecución del complemento

Use el parámetro tag para incluir un valor de variable compartida que sea accesible dentro de un complemento. Esta información adicional permite que un complemento aplique la lógica que depende de la aplicación cliente.

Nota

Este parámetro está destinado a que las aplicaciones cliente puedan establecer cualquier valor que deseen. Ninguna característica de Microsoft debería requerir que establezca un valor específico en el código de su aplicación cliente para habilitar diferentes comportamientos.

Para acceder al valor en un complemento, utilice la colección IExecutionContext.SharedVariables

if (context.SharedVariables.ContainsKey("tag")){
    string tagValue = context.SharedVariables["tag"];
}

Los siguientes ejemplos pasan este valor: A string value al crear un registro de cuenta.

static void DemonstrateTag(IOrganizationService service)
{
    Entity account = new("account");
    account["name"] = "Sample Account";

    CreateRequest request = new()
    {
        Target = account
    };
    request.Parameters.Add("tag", "A string value");
    service.Execute(request);
}

Más información: Variables compartidas

Realizar una operación de datos con la partición especificada

Al usar tablas elásticas con una estrategia de partición, puede pasar un valor de cadena único con el parámetro partitionid para acceder a los datos de la tabla no relacional dentro de una partición de almacenamiento.

Los siguientes ejemplos utilizan el valor partitionid de deviceId al recuperar un registro contoso_sensordata.

private static Entity RetrieveRecord(
    IOrganizationService service,
    Guid contosoSensorDataId,
    string deviceId,
    string sessionToken)
{
    EntityReference entityReference = new("contoso_sensordata", contosoSensorDataId);

    RetrieveRequest request = new()
    {
        ColumnSet = new ColumnSet("contoso_value"),
        Target = entityReference,
        ["partitionId"] = deviceId, //To identify the record
        ["SessionToken"] = sessionToken //Pass the session token for strong consistency
    };
    var response = (RetrieveResponse)service.Execute(request);
    return response.Entity;

}

Como alternativa, puede utilizar el valor partitionid usando el estilo clave alternativa.

Omitir lógica sincrónica personalizada

Nota

Nuevas formas para omitir la lógica de negocios están en versión preliminar. Más información sobre nuevas capacidades para eludir la lógica de negocios personalizada (versión preliminar)

La lógica sincrónica debe aplicarse durante la transacción y puede afectar significativamente el rendimiento de las operaciones individuales. Al realizar operaciones masivas, el tiempo adicional para estas operaciones individuales puede aumentar el tiempo requerido. Utilizar el parámetro BypassCustomPluginExecution cuando desea mejorar el rendimiento al realizar operaciones de datos masivos.

Importante

El usuario que llama debe tener el privilegio prvBypassCustomPlugins.

Hay dos formas de usar este parámetro 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);
}

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.

Más información: Omitir lógica sincrónica

Omitir Power Automate Flujos

Cuando se producen operaciones de datos masivos que desencadenan flujos, Dataverse crea trabajos del sistema para ejecutar los flujos. Cuando la cantidad de trabajos del sistema es muy grande, puede causar problemas de rendimiento para el sistema. Si esto ocurre, puede optar por omitir la activación de los flujos utilizando el parámetro opcional SuppressCallbackRegistrationExpanderJob.

La tabla CallbackRegistration administra los activadores de flujo y hay una operación interna llamada expansor que llama a los desencadenadores registrados del flujo.

Nota

Cuando se usa esta opción, los propietarios del flujo no recibirán una notificación de que se omitió su lógica de flujo.

static void DemonstrateSuppressCallbackRegistrationExpanderJob(IOrganizationService service)
{
    Entity account = new("account");
    account["name"] = "Sample Account";

    CreateRequest request = new()
    {
        Target = account
    };
    request.Parameters.Add("SuppressCallbackRegistrationExpanderJob", true);
    service.Execute(request);
}

Más información: Omitir flujos de Power Automate

Consulte también

Use estos mensajes con el SDK para .NET
API web: Componer solicitudes HTTP y administrar errores : Otros encabezados
Omitir lógica de negocios personalizada

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