Compartir vía


Omitir Power Automate Flujos

Los flujos de Power Automate pueden responder a eventos de Dataverse usando los desencadenantes 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, es posible que se cree una gran cantidad de trabajos del sistema. Una gran cantidad de trabajos del sistema pueden 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 activadores de flujo y hay una operación interna llamada expansor que crea los trabajos del sistema.

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.

Cuándo omitir flujos de Power Automate

Importante

No use el parámetro opcional SuppressCallbackRegistrationExpanderJob a menos que sepa que los problemas de rendimiento que está experimentando se deben a una gran cantidad de trabajos específicos del sistema que se crean.

Las personas agregan flujos por motivos de negocios y no deben evitarse sin una cuidadosa consideración. 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 que se produzcan operaciones masivas y tiene una gran cantidad de trabajos del sistema Operación del expansor CallbackRegistration con un StatusCode establecido en 0 : Esperando Recursos.

Puede utilizar 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 probable que el problema no sea el número de trabajos en cola. Por lo general, la cantidad de trabajos en cola supera los 50 000 registros antes de que ocurran problemas de rendimiento.

Los siguientes ejemplos muestran el número de trabajos del sistema Operación del expansor CallbackRegistration 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 omitir 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 dentro de los complementos, debe usar el SDK para .NET.

Los siguientes ejemplos crean 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. Los propietarios del flujo no reciben notificación de que se omitió su lógica cuando utiliza 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 múltiples disparadores, incluso manualmente. Si la lógica está contenida dentro de un flujo secundario, es posible que se desencadene por otros medios más adelante. Más información: Crear flujos secundarios

Identificar los flujos que se desviarán

Es posible que no pueda identificar exactamente qué flujos se omitirán. Puedes consultar la Tabla CallbackRegistration para evaluar cuánto impacto habrá y a quién contactar si sus flujos no se ejecutan. La siguiente tabla describe algunas columnas de la tabla CallbackRegistration que son útiles;

Columna Descripción
name Si este valor es un valor GUID, debe coincidir con el valor de flowid y debería poder ver la definición de flujo en una URL con este valor agregándolo a esta URL: https://make.powerautomate.com/environments/<environmentid>/flows/<flowid>/details.
message Cuando el flujo utiliza el activador Cuando se agrega, modifica o elimina una fila , puede suscribirse a todas las combinaciones de operaciones de Create, Updatey Delete con 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 alcance especificado por el usuario según lo definido mediante estas opciones:
- 1: Usuario
- 2: BusinessUnit
- 3: ParentChildBusinessUnit
- 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},");
    }
}

Output

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 más frecuentes sobre omitir flujos de Power Automate (P+F)

Las siguientes son preguntas frecuentes sobre el uso del parámetro opcional SuppressCallbackRegistrationExpanderJob para omitir 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, ¿también lo aplicarán las operaciones realizadas por los complementos registrados en la operación?

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

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