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