Freigeben über


Umgehen von Power Automate Flüssen

Power Automate Flows können auf Dataverse-Ereignisse mithilfe der Trigger Wenn eine Zeile hinzugefügt, geändert oder gelöscht wird oder Wenn eine Aktion ausgeführt wird reagieren. Wenn diese Ereignisse eintreten, erstellt Dataverse Systemaufträge, um diese Flows auszuführen.

Wenn ein Programm oder Plug-In Massenvorgänge ausführt, kann das Programm oder Plug-In eine große Anzahl von Systemaufträgen erstellen. 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. Ein interner Vorgang namens Expander erstellt die Systemaufträge.

Anmerkung

Wenn Sie diese Option verwenden, erhalten Flow-Besitzer keine Benachrichtigung, dass ihre Flow-Logik umgangen wurde.

Wann sollten Power Automate Vorgänge umgangen werden?

Wichtig

Verwenden Sie den SuppressCallbackRegistrationExpanderJob optionalen Parameter nicht, es sei denn, Sie wissen, dass die leistungsspezifischen Probleme aufgrund einer großen Anzahl von systemspezifischen Aufträgen vorliegen, die der Parameter unterdrückt.

Personen fügen Flows aus geschäftlichen Gründen hinzu. Umgehen Sie Workflows nicht ohne sorgfältige Überlegung. Denken Sie unbedingt an diese Minderungsstrategien.

Kann Ihnen SuppressCallbackRegistrationExpanderJob helfen?

Verwenden Sie diese Option nur, wenn nach Massenvorgängen Leistungsprobleme auftreten und eine große Anzahl von CallbackRegistration Expander Operation Systemjobs mit einem StatusCode auf 0 : Warten auf Ressourcen vorhanden ist.

Verwenden Sie die folgenden Abfragen, um Informationen zum Status dieser Aufträge abzurufen.

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

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

Anmerkung

Wenn die Abfragen keinen Fehler zurückgeben, ist die Anzahl der in die Warteschlange eingereihten Aufträge wahrscheinlich nicht das Problem. In der Regel treten Leistungsprobleme auf, bevor die Anzahl der in die Warteschlange gestellten Aufträge 50.000 überschreitet.

Die folgenden Beispiele zeigen die Anzahl der CallbackRegistration Expander Operation Systemaufträge nach dem Statuscode. 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

So umgehen Sie Power Automate Flows

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

Anmerkung

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

In den folgenden Beispielen wird ein Kontodatensatz erstellt, 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. Sie werden nicht benachrichtigt, dass ihre Logik umgangen wurde, wenn Sie diese Option verwenden. 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.

Sie 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 finden Sie unter Create Child Flows.

Identifizieren von Flüssen, die von der Aktualisierung umgangen werden

Möglicherweise können Sie nicht genau ermitteln, welche Abläufe das Update umgeht. Sie können die CallbackRegistration-Tabelle abfragen, um zu beurteilen, wie groß die Auswirkungen sind und wen man wegen der nicht ausgeführten Abläufe kontaktieren soll. In der folgenden Tabelle werden einige CallbackRegistration Tabellenspalten beschrieben, die nützlich sind.

Spalte Beschreibung
name Wenn dieser Wert ein GUID-Wert ist, entspricht er dem flowid Wert. Sie können die Flussdefinition in einer URL mit diesem Wert anzeigen, indem Sie sie 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-Vorgängen mithilfe dieser 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 Flüsse gelten nur für den vom Benutzer angegebenen Bereich, der mithilfe der folgenden Optionen definiert ist:
- 1: Benutzer
- 2: BusinessUnit
- 3: Eltern-Kind-Geschäftseinheit
- 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 Flüssen (FAQ)

Die folgenden Fragen und Antworten befassen sich mit der Verwendung des SuppressCallbackRegistrationExpanderJob optionalen Parameters, um Power Automate Abläufe zu überspringen.

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 Clientanwendung diesen optionalen Parameter verwendet, wenden die für die Operation registrierten Plug-Ins ihn dann ebenfalls an?

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