Compartir a través de


Saltar los flujos de Power Automate

Los flujos de Power Automate pueden responder a eventos de Dataverse mediante los desencadenadores Cuando se agrega, modifica o elimina una fila o Cuando se realiza una acción. Cuando ocurren estos eventos, Dataverse crea trabajos del sistema para ejecutar estos flujos.

Cuando un programa o complemento realiza operaciones masivas, el programa o el complemento pueden crear un gran número de trabajos del sistema. Un gran número de trabajos del sistema puede causar problemas de rendimiento para Dataverse. Puede optar por omitir la creación de estos trabajos del sistema en su programa o complemento utilizando el parámetro opcional SuppressCallbackRegistrationExpanderJob.

La tabla CallbackRegistration administra los desencadenadores de flujo. Una operación interna denominada expander crea los trabajos del sistema.

Nota

Cuando usas esta opción, los propietarios del flujo de trabajo no reciben una notificación de que su lógica de flujo se omitió.

Cuándo evitar flujos de Power Automate

Importante

No use el SuppressCallbackRegistrationExpanderJob parámetro opcional a menos que sepa que los problemas de rendimiento que experimenta se deben a un gran número de trabajos específicos del sistema que suprime el parámetro.

Las personas agregan flujos por motivos empresariales. No omita los flujos sin considerarlo detenidamente. Asegúrese de considerar estas estrategias de mitigación.

¿SuppressCallbackRegistrationExpanderJob le ayudará?

Use esta opción solo si ve problemas de rendimiento después de las operaciones masivas y tiene un gran número de trabajos del sistema de operación callbackRegistration Expander con un statusCode establecido 0 en : Waiting for Resources.

Use las siguientes consultas para obtener información sobre el estado de estos trabajos.

Si el recuento total es superior a 50 000, estas consultas devuelven el siguiente error.

Nombre: AggregateQueryRecordLimitExceeded
Código: 0x8004E023
Número: -2147164125
Mensaje: The maximum record limit is exceeded. Reduce the number of records.

Nota

Si las consultas no devuelven un error, es poco probable que el número de trabajos en cola sea el problema. Normalmente, los problemas de rendimiento se producen antes de que el número de trabajos en cola supere los 50 000.

En los ejemplos siguientes se muestra el número de trabajos del sistema de CallbackRegistration Expander Operation por el código de estado. El valor de operationtype para esta clase de trabajo del sistema es 79.

static void RetrieveCallbackRegistrationExpanderStatus(IOrganizationService service)
{
    string fetchXml = @"<fetch aggregate='true'>
        <entity name='asyncoperation'>
        <attribute name='statuscode' alias='statuscode' groupby='true' />
        <attribute name='statuscode' alias='count' aggregate='count' />
        <filter>
            <condition attribute='operationtype' operator='eq' value='79' />
        </filter>
        </entity>
    </fetch>";

    FetchExpression fetchExpression = new(fetchXml);

    EntityCollection response = service.RetrieveMultiple(fetchExpression);

    foreach (Entity result in response.Entities)
    {
        string statusCode = result.FormattedValues["statuscode"];
        int count = (int)((AliasedValue)result["count"]).Value;
        Console.WriteLine($"{statusCode}: {count}");
    }
}

Salida:

Canceled: 4101
Failed: 13
Waiting for Resources: 50,000

Cómo eludir flujos de Power Automate

La forma en que omite los flujos depende de si usa el SDK para .NET o la API web.

Nota

Para las operaciones de datos iniciadas en complementos, debe utilizar el SDK de .NET.

En los ejemplos siguientes se crea un registro de cuenta que no desencadena Power Automate.

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);
}

Estrategias de mitigación

Los propietarios de flujos esperan que se ejecute su lógica. No se les notifica que su lógica se omite al usar esta opción. Es importante comunicar a los propietarios de flujos que no se aplicó la lógica para que sepan cuándo y por qué no se aplicó su lógica. Luego pueden determinar si aplicar o cómo aplicar su lógica.

Las personas pueden crear flujos secundarios que contengan lógica invocada por varios desencadenadores, incluso manualmente. Si la lógica está contenida dentro de un flujo secundario, es posible que se desencadene por otros medios más adelante. Para obtener más información, consulte Creación de flujos secundarios.

Identificación de los flujos que omite la actualización

Es posible que no pueda identificar exactamente qué flujos omite la actualización. Puede consultar la tabla CallbackRegistration para evaluar el impacto existente y con quién ponerse en contacto respecto a sus flujos que no están ejecutándose. En la tabla siguiente se describen algunas CallbackRegistration columnas de tabla que son útiles.

Columna Descripción
name Si este valor es un valor GUID, coincide con el flowid valor . Puede ver la definición de flujo en una dirección URL con este valor agregándolo a esta dirección URL: https://make.powerautomate.com/environments/<environmentid>/flows/<flowid>/details.
message Cuando el flujo usa el desencadenador Cuando se agrega, modifica o elimina una fila, puede suscribirse a todas las combinaciones de operaciones Create, Update y Delete utilizando estas opciones:
- 1: Agregado
- 2: Eliminado
- 3: Modificado
- 4: Agregado o Modificado
- 5: Agregado o Eliminado
- 6: Modificado o Eliminado
- 7: Agregado o Modificado o Eliminado
sdkmessage Cuando el flujo utiliza el desencadenante Cuando se realiza una acción, esta columna contiene el nombre del mensaje.
scope Los flujos solo se aplican al ámbito especificado por el usuario según se define mediante estas opciones:
- 1: Usuario
- 2: BusinessUnit
- 3: Unidad de Negocio Padre-Hijo
- 4: Organización
ownerid El propietario del registro de devolución de llamada y el flujo.
softdeletestatus Si el flujo es eliminado. 0 no se elimina. 1 se ha eliminado.

Las siguientes consultas de ejemplo devuelven estos valores:

static void RetrieveCallbackOperations(IOrganizationService service)
{

    QueryExpression callbackRegistrationQuery = new("callbackregistration")
    {
        ColumnSet = new ColumnSet("name", "entityname", "message", "sdkmessagename", "scope", "ownerid"),
        Criteria = new FilterExpression(LogicalOperator.And)
        {
            Conditions = {
                { new ConditionExpression("softdeletestatus",ConditionOperator.Equal,0) },
                // Add more conditions here to filter the results
            }
        }
    };

    EntityCollection callbackRegistrations = service.RetrieveMultiple(callbackRegistrationQuery);

    foreach (Entity callbackRegistration in callbackRegistrations.Entities)
    {
        string ownerid = callbackRegistration.FormattedValues["ownerid"];
        string scope = callbackRegistration.FormattedValues["scope"];
        string name = callbackRegistration.GetAttributeValue<string>("name");
        string message = callbackRegistration.FormattedValues["message"];
        string entityname = callbackRegistration.GetAttributeValue<string>("entityname");
        string sdkmessage = callbackRegistration.GetAttributeValue<string>("sdkmessagename");

        Console.WriteLine($"{ownerid},{scope},{name},{message},{entityname},{sdkmessage},");
    }
}

Salida

FirstName LastName,Organization,de7153ba-9221-4079-82cc-c884bbd05dc0,Modified,account,,
FirstName LastName,Organization,Callback Registration Id: b44090aa-adde-4866-ac2e-d68fbcbe7d5a,Added,account,,
FirstName LastName,Organization,Callback Registration Id: dabfa1a1-b794-44d0-ad34-cd49ea650606,Added,none,sample_BusinessEvent,

Preguntas Frecuentes sobre cómo evitar flujos de Power Automate (Preguntas Frecuentes)

Las siguientes preguntas y respuestas se abordan mediante el parámetro opcional SuppressCallbackRegistrationExpanderJob para omitir los flujos de Power Automate.

¿Los usuarios necesitan un privilegio especial?

No. A diferencia de las opciones para omitir la lógica Dataverse personalizada, no se requiere ningún privilegio especial.

Si mi aplicación cliente usa este parámetro opcional, ¿los complementos registrados en la operación también lo aplican?

No. El parámetro no se transfiere a ninguna operación realizada por los complementos registrados para los eventos que ocurren debido a las solicitudes de su aplicación cliente. Si desea omitir flujos para operaciones realizadas por complementos, debe usar el parámetro opcional SuppressCallbackRegistrationExpanderJob en su código de complemento.

Consulte también

Omitir la lógica de Dataverse personalizada
Usar parámetros opcionales