Implementierung aller Arten von Abfragen bei der Ergebnisfilterung mit PreOperation RetrieveMultiple
Kategorie: Entwurf, Leistung, Sicherheit, Unterstützbarkeit
Wirkungspotential: Mittel
Symptome
RetrieveMultiple-Aufrufe aus verschiedenen Anwendungen zeigen unterschiedliche Ergebnisse an.
- Zum Beispiel: Dieselben Ansichten in Legacy-Anwendungen zeigen unterschiedliche Ergebnisse in neuen Anwendungen.
Anleitung
Hinweis
Die Retrieve
und RetrieveMultiple
Nachrichten sind in der Regel die am häufigsten verwendeten Nachrichten. Plug-Ins für diese Nachrichten können die Systemleistung erheblich beeinträchtigen. Generell sollten Sie die Verwendung von Plugins für diese Nachrichten vermeiden, wenn die Anforderungen auf andere Weise erreicht werden können. Mehr Informationen: Beschränken Sie die Registrierung von Plugins für Retrieve and RetrieveMultiple Nachrichten.
Plugins, die in der RetrieveMultiple
-Meldung registriert sind, sind typischerweise dazu gedacht, die Ergebnisse von Abfragen nach einer Entität zu filtern. Es gibt zwei Strategien, dies mit einem Plug-in zu tun, das entweder auf der Stufe PostOperation
oder PreOperation
registriert ist.
PostOperation-Filterung
Werten Sie in der Phase PostOperation
die in der Eigenschaft OutputParameters BusinessEntityCollection
Entities zurückgegebenen Datensätze aus und entfernen Sie Entitäten, die nicht zurückgegeben werden sollen.
Dieser Ansatz ändert möglicherweise die erwartete Anzahl der Datensätze, die auf jeder Seite der Ergebnisse zurückgegeben werden, und kann zu inkonsistenten Erfahrungen führen, wenn die Daten in einer Anwendung angezeigt werden.
PreOperation-Filterung
Werten Sie im Schritt PreOperation
die Eigenschaft InputParameters Query aus und passen Sie die Abfrage an, um zu filtern, was vor der Ausführung zurückgegeben wird.
Bei der Verwendung dieses Ansatzes müssen Sie vor allem für die verschiedenen möglichen Arten von Abfragen die entsprechende Filterung implementieren: FetchExpression und QueryExpression. Wenn Sie nur eine dieser Optionen implementieren, werden Ihre Änderungen nicht von verschiedenen Anwendungen übernommen, die die andere Art von Abfrage verwenden.
Obwohl die Nachrichten QueryExpressionToFetchXml
und FetchXmlToQueryExpression
die Möglichkeit bieten, einen Abfragetyp in einen anderen umzuwandeln, empfehlen wir Ihnen, diese Nachrichten in diesem Zusammenhang nicht zu verwenden, da sie die Performance beeinträchtigen, wenn Sie mehr Aufrufe in RetrieveMultiple
aufnehmen. Implementieren Sie vielmehr Ihre Filterung mit der entsprechenden Logik in beiden.
Es gibt eine dritte Art von Abfrage, die auch mit RetrieveMultiple
verwendet werden kann: QueryByAttribute. Dieser Typ der Abfrage sieht keine komplexe Filterung vor und es ist nicht möglich, komplexere Filterlogik in ein Plug-In einzubinden. Glücklicherweise wird dieser Typ der Abfrage nicht häufig verwendet. Abhängig von der Empfindlichkeit der von Ihnen hinzugefügten Filterung können Sie Anfragen dieses Typs ablehnen, indem Sie eine InvalidPluginExecutionException auslösen.
Beispiel
Siehe Muster: Ändern Sie die Abfrage in der Phase PreOperation für ein Beispiel für die von uns empfohlene Strategie.
Problematische Muster
Wenn jemand ein Plug-in schreibt wird, um die Datensätze zu ändern, die in einer bestimmten Anwendung zurückgegeben werden, die nur eine Art von Abfrage verwendet, entweder FetchExpression oder QueryExpression, sind die Ergebnisse in anderen Anwendungen möglicherweise nicht konsistent oder wenn die Anwendung die Art der verwendeten Abfrage ändert. Schreiben Sie Plug-Ins, die unabhängig von der Anwendung das gleiche Ergebnis liefern.
Weitere Informationen
Bei Verwendung der Web API werden GET-Requests auf eine Collection in QueryExpression konvertiert, es sei denn, die Abfrage verwendet FetchXml wie unter Abrufen und Ausführen vordefinierter Abfragen beschrieben. In diesem Fall verwenden die Abfragen FetchExpression.
Die einheitliche Oberfläche hat den Legacy-Webclient für modellgesteuerte Apps ersetzt. Die einheitliche Benutzeroberfläche verwendet die in den Eigenschaften SavedQuery.FetchXml oder UserQuery.FetchXml definierte FetchXml. Um die Leistung zu verbessern, konvertiert das einheitliche Benutzeroberfläche die FetchXml-Daten nicht in eine QueryExpression, bevor diese Abfragen wie der Legacy-Webclient ausgeführt werden. Daher werden Abfragen, die im Plug-In-Code für den älteren Web-Client, der QueryExpression verwendet hat, geändert wurden, nicht die gleichen Änderungen anwenden, da die Abfrage zur Unterstützung von Views mit FetchExpression übergeben wird, es sei denn, der Plug-In-Code wird geschrieben, um dieselbe Logik auf FetchExpression-Abfragen anzuwenden.
Siehe auch
Beispiel: Ändern Sie die Abfrage in der Vorbereitungsphase
Daten mithilfe des SDK für .NET abfragen
Daten mithilfe von FetchXml abfragen
Erstellen von Abfragen mit QueryExpression
Einschränkung der Registrierung von Plugins für Retrieve- und RetrieveMultiple-Nachrichten
Community für die einheitliche Benutzeroberfläche
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).
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für