Partager via


Contourner les flux Power Automate

Les flux Power Automate peuvent répondre aux événements Dataverse en utilisant les déclencheurs Quand une ligne est ajoutée, modifiée ou supprimée ou Quand une action est effectuée. Lorsque ces événements se produisent, Dataverse crée des tâches système pour exécuter ces flux.

Lorsqu’un programme ou un plug-in effectue des opérations en bloc, un grand nombre de tâches système peuvent être créées. Un grand nombre de tâches système peut entraîner des problèmes de performances pour Dataverse . Vous pouvez choisir de contourner la création de ces tâches système dans votre programme ou plug-in en utilisant le paramètre facultatif SuppressCallbackRegistrationExpanderJob.

La table CallbackRegistration gère les déclencheurs de flux, et une opération interne appelée expander crée les tâches système.

Notes

Lorsque cette option est utilisée, les propriétaires de flux ne reçoivent pas de notification indiquant que leur logique de flux a été contournée.

Quand contourner les flux Power Automate

Important

N’utilisez pas le paramètre facultatif SuppressCallbackRegistrationExpanderJob sauf si vous savez que les problèmes de performances que vous rencontrez sont dus à un grand nombre de tâches système spécifiques qui sont créées.

Les utilisateurs ajoutent des flux pour des raisons commerciales et ils ne doivent pas être contournés sans mûre réflexion. Assurez-vous de prendre en compte ces Stratégies d’atténuation.

Est-ce que SuppressCallbackRegistrationExpanderJob vous sera utile ?

Utilisez uniquement cette option si vous rencontrez des problèmes de performance après des opérations en bloc et si vous avez un grand nombre de tâches système CallbackRegistration Expander Operation avec un StatusCode défini sur 0 : Attendre les ressources.

Vous pouvez utiliser les requêtes suivantes pour obtenir des informations sur l’état de ces tâches.

Si le nombre total est supérieur à 50 000, ces requêtes renvoient l’erreur suivante.

Nom: AggregateQueryRecordLimitExceeded
Code : 0x8004E023
Nombre : -2147164125
Message : The maximum record limit is exceeded. Reduce the number of records.

Notes

Si les requêtes ne renvoient pas d’erreur, le nombre de tâches en file d’attente n’est probablement pas le problème. Généralement, le nombre de tâches en file d’attente dépasse 50 000 enregistrements avant que des problèmes de performances ne se produisent.

Les exemples suivants génèrent le nombre de tâches système opération de développement CallbackRegistration selon le code d’état. La valeur operationtype pour ce type de tâche système est 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}");
    }
}

Sortie :

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

Comment contourner les flux Power Automate

La manière dont vous contournez les flux varie selon que vous utilisez le kit de développement logiciel (SDK) pour .NET ou l’API web.

Notes

Pour les opérations de données initiées dans les plug-ins, vous devez utiliser le SDK pour .NET.

Les exemples suivants créent un enregistrement de compte qui ne se déclenche pas 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);
}

Stratégies d’atténuation

Les propriétaires de flux s’attendent à ce que leur logique soit exécutée. Les propriétaires de flux ne sont pas informés que leur logique a été contournée lorsque vous utilisez cette option. Il est important de communiquer aux propriétaires de flux que la logique n’a pas été appliquée afin qu’ils sachent quand et pourquoi leur logique n’a pas été appliquée. Ils peuvent alors déterminer si ou comment appliquer leur logique.

Les utilisateurs peuvent créer des flux enfants contenant une logique invoquée par plusieurs déclencheurs, même manuellement. Si la logique est contenue dans un flux enfant, elle peut être déclenchée ultérieurement par d’autres moyens. Pour plus d’informations : Créer des flux enfants

Identifier les flux qui seront contournés

Vous ne pourrez peut-être pas identifier exactement quels flux seront contournés. Vous pouvez interroger la table CallbackRegistration pour évaluer l’impact et qui contacter concernant leurs flux qui ne s’exécutent pas. La table suivante décrit certaines colonnes de la table CallbackRegistration qui sont utiles ;

Colonne Description
name Si cette valeur est une valeur GUID, elle doit correspondre à la valeur flowid et vous devez être en mesure de voir la définition du flux dans une URL avec cette valeur en l’ajoutant à cette URL : https://make.powerautomate.com/environments/<environmentid>/flows/<flowid>/details.
message Lorsque le flux utilise le déclencheur Quand une ligne est ajoutée, modifiée ou supprimée, il peut s’abonner à toutes les combinaisons d’opérations Create, Update et Delete avec ces options :
- 1 : Ajouté
-2 : Supprimé
-3 : Modifié
-4 : Ajouté ou modifié
-5 : Ajouté ou supprimé
- 6 : Modifié ou supprimé
-7 : Ajouté, modifié ou supprimé
sdkmessage Lorsque le flux utilise le déclencheur Lorsqu’une action est exécutée, cette colonne contient le nom du message.
scope Les flux s’appliquent uniquement à la portée spécifiée par l’utilisateur, telle que définie à l’aide de ces options :
- 1 : Utilisateur
-2 : BusinessUnit
-3 : ParentChildBusinessUnit
- 4 : Organisation
ownerid Le propriétaire de l’inscription du rappel et le flux.
softdeletestatus Si le flux est supprimé. 0 n’est pas supprimé. 1 est supprimé.

Les exemples de requêtes suivants renvoient ces valeurs :

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

Sortie

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,

Forum aux questions sur le contournement des flux Power Automate (FAQ)

Vous trouverez ci-dessous une foire aux questions sur l’utilisation du paramètre facultatif SuppressCallbackRegistrationExpanderJob pour contourner les flux Power Automate.

Les utilisateurs ont-ils besoin d’un privilège spécifique ?

Non Contrairement aux options pour contourner la logique Dataverse personnalisée, aucun privilège spécial n’est requis.

Si mon application cliente utilise ce paramètre facultatif, les opérations effectuées par les plug-ins enregistrés pour l’opération l’appliqueront-elles également ?

Non Le paramètre n’est transmis à aucune opération effectuée par les plug-ins qui sont enregistrés pour les événements qui se produisent en raison des demandes de votre application cliente. Si vous souhaitez contourner les flux pour les opérations effectuées par les plug-ins, vous devez utiliser le paramètre facultatif SuppressCallbackRegistrationExpanderJob dans le code de votre plug-in.

Voir aussi

Contourner la logique Dataverse personnalisée
Utiliser des paramètres facultatifs

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).