Teilen über


Power Automate-Flows umgehen

Power Automate-Flows können auf Dataverse-Ereignisse reagieren, indem sie die Trigger Wenn eine Zeile hinzugefügt, geändert oder gelöscht wird oder Bei einer ausgeführten Aktion verwenden. Wenn diese Ereignisse eintreten, erstellt Dataverse Systemaufträge, um diese Flows auszuführen.

Wenn ein Programm oder Plug-In Massenvorgänge ausführt, kann eine große Anzahl von Systemjobs erstellt werden. Eine große Anzahl von Systemaufträgen kann Leistungsprobleme für Dataverse verursachen. Sie können die Erstellung dieser Systemaufträge in Ihrem Programm oder Plug-In umgehen, indem Sie den optionalen Parameter SuppressCallbackRegistrationExpanderJob verwenden.

Die CallbackRegistration-Tabelle verwaltet Flow-Trigger, und es gibt einen internen Vorgang namens expander, der die Systemaufträge erstellt.

Hinweis

Wenn diese Option verwendet wird, erhalten die Flow-Besitzer keine Benachrichtigung, dass ihre Flow-Logik umgangen wurde.

Wann sollen Power Automate-Flows umgangen werden?

Wichtig

Verwenden Sie den optionalen Parameter SuppressCallbackRegistrationExpanderJob nicht, es sei denn, Sie wissen, dass die auftretenden Leistungsprobleme auf eine große Anzahl spezifischer Systemaufträge zurückzuführen sind, die erstellt werden.

Mitarbeitende fügen Flows aus geschäftlichen Gründen hinzu und diese sollten nicht ohne sorgfältige Überlegung umgangen werden. Denken Sie unbedingt an diese Minderungsstrategien.

Kann Ihnen SuppressCallbackRegistrationExpanderJob helfen?

Verwenden Sie diese Option nur dann, wenn Leistungsprobleme nach Massenvorgängen auftreten und Sie eine große Anzahl von CallbackRegistration Expander Operation-Systemaufträgen haben, bei denen StatusCode auf 0 : Warten auf Ressourcen festgelegt ist.

Sie können die folgenden Abfragen verwenden, um Informationen über den Status dieser Aufträge zu erhalten.

Wenn die Gesamtanzahl größer als 50.000 ist, geben diese Abfragen den folgenden Fehler zurück.

Name: AggregateQueryRecordLimitExceeded
Code: 0x8004E023
Nummer: -2147164125
Meldung: The maximum record limit is exceeded. Reduce the number of records.

Hinweis

Wenn die Abfragen keinen Fehler zurückgeben, ist die Anzahl der Aufträge in der Warteschlange wahrscheinlich nicht das Problem. Normalerweise übersteigt die Anzahl der Aufträge in der Warteschlange 50.000 Datensätze, bevor Leistungsprobleme auftreten.

Die folgenden Beispiele geben die Anzahl der CallbackRegistration Expander Operation-Systemaufträge nach Zustandscode aus. Der operationtype-Wert für diese Art von Systemaufträgen ist 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}");
    }
}

Ausgabe:

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

Wie sollen Power Automate-Flows umgangen werden?

Wie Sie Flows umgehen, hängt davon ab, ob Sie das SDK für .NET oder die Web-API verwenden.

Hinweis

Für Datenvorgänge, die innerhalb von Plug-Ins initiiert werden, müssen Sie das SDK für .NET verwenden.

Die folgenden Beispiele erstellen einen Kontodatensatz, der Power Automate nicht auslöst.

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

Risikominderungsstrategien

Flow-Besitzer erwarten, dass ihre Logik ausgeführt wird. Wenn Sie diese Option verwenden, werden Flow-Besitzer nicht darüber benachrichtigt, dass ihre Logik umgangen wurde. Es ist wichtig, Flow-Besitzern mitzuteilen, dass die Logik nicht angewendet wurde, damit sie wissen, wann und warum ihre Logik nicht angewendet wurde. Sie können dann entscheiden, ob oder wie sie ihre Logik anwenden.

Benutzer können untergeordnete Flows erstellen, die Logik enthalten, die von mehreren Auslösern aufgerufen wird, auch manuell. Wenn die Logik in einem untergeordneten Flow enthalten ist, kann sie später auf andere Weise ausgelöst werden. Weitere Informationen: Untergeordnete Flows erstellen

Identifizieren Sie Flows, die umgangen werden

Möglicherweise können Sie nicht genau feststellen, welche Flows umgangen werden. Sie können die Tabelle CallbackRegistration abfragen, um abzuschätzen, wie groß die Auswirkungen sein werden und an wen Sie sich wenden müssen, wenn der Flow nicht ausgeführt wird. Die folgende Tabelle beschreibt einige CallbackRegistration-Tabellenspalten, die nützlich sind;

Spalte Beschreibung
name Wenn dieser Wert ein GUID-Wert ist, sollte er mit dem flowid-Wert übereinstimmen, und Sie sollten in der Lage sein, die Flow-Definition in einer URL mit diesem Wert anzuzeigen, indem Sie ihn zu dieser URL hinzufügen: https://make.powerautomate.com/environments/<environmentid>/flows/<flowid>/details .
message Wenn der Flow den Trigger Wenn eine Zeile hinzugefügt, geändert oder gelöscht wird verwendet, kann er alle Kombinationen von Create-, Update- und Delete Operationen mit diesen Optionen abonnieren:
- 1: Hinzugefügt
- 2: Gelöscht
- 3: Geändert
- 4: Hinzugefügt oder geändert
- 5: Hinzugefügt oder gelöscht
- 6: Geändert oder gelöscht
- 7: Hinzugefügt oder geändert oder gelöscht
sdkmessage Wenn der Flow den Trigger Bei einer ausgeführten Aktion verwendet, enthält diese Spalte den Namen der Nachricht.
scope Flows gelten nur für den vom Benutzer angegebenen Bereich, wie mit diesen Optionen definiert:
- 1: Benutzer
- 2: BusinessUnit
- 3: ParentChildBusinessUnit
- 4: Organisation
ownerid Der Besitzer der Rückrufregistrierung und des Flows.
softdeletestatus Ob der Flow gelöscht wird. 0 wird nicht gelöscht. 1 wird gelöscht.

Die folgenden Beispielabfragen geben diese Werte zurück:

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,

Häufig gestellte Fragen zur Umgehung von Power Automate-Flows (FAQ)

Im Folgenden finden Sie häufig gestellte Fragen zur Verwendung des optionalen Parameters SuppressCallbackRegistrationExpanderJob zum Umgehen von Power Automate-Flows.

Benötigen Benutzer eine spezielle Berechtigung?

Nein. Im Gegensatz zu den Optionen zum Umgehen der benutzerdefinierten Dataverse Logik sind keine besonderen Berechtigungen erforderlich.

Wenn meine Client-Anwendung diesen optionalen Parameter verwendet, werden alle Vorgänge, die von Plug-Ins ausgeführt werden, die für den Vorgang registriert sind, auch angewendet?

Nein. Der Parameter wird nicht an Vorgänge weitergegeben, die von Plug-Ins ausgeführt werden, die für die Ereignisse registriert sind, die aufgrund von Anforderungen von Ihrer Clientanwendung auftreten. Wenn Sie Flows für von Plug-Ins ausgeführte Vorgänge umgehen möchten, müssen Sie den optionalen Parameter SuppressCallbackRegistrationExpanderJob in Ihrem Plug-In-Code verwenden.

Siehe auch

Benutzerdefinierte Dataverse-Logik umgehen
Optionale Parameter verwenden

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).