Verwenden Sie FetchXML zum Erstellen einer Abfrage
FetchXML ist eine proprietäre, XML-basierte Abfragesprache, Microsoft Dataverse die zum Abfragen von Daten entweder über die Web-API oder das SDK für .NET verwendet wird. Sie basiert auf einem Schema, das die Funktionalität der Sprache beschreibt. Die FetchXML Sprache unterstützt ähnliche Abfragefunktionen wie Abfrageausdrücke. Darüber hinaus wird sie als serialisierte Form der Abfrage verwendet, um eine Abfrage als benutzereigene gespeicherte Ansicht in der UserQuery-Tabelle und als organisationseigene gespeicherte Ansicht in der SavedQuery-Tabelle zu speichern.
Erstellen Sie die FetchXML Abfragezeichenfolge
Um eine FetchXML Abfrage auszuführen, müssen Sie zuerst die XML-Abfragezeichenfolge erstellen. Nach dem Erstellen der Abfragezeichenfolge verwenden Sie die IOrganizationService.RetrieveMultiple Methode, um die Abfragezeichenfolge auszuführen. Die Rechte des angemleldeten Benutzers haben Auswirkungen auf den zurückgegebenen Satz von Datensätzen. Nur Datensätze, für die der angemeldete Benutzer über Leseberechtigung verfügt, werden zurückgegeben.
Die FetchXML Abfragezeichenfolge muss der Schemadefinition für die FetchXML Sprache entsprechen. Weitere Informationen finden Sie unter FetchXML-Schema.
Sie können auch eine Abfrage speichern, indem Sie einen SavedQuery
-Datensatz erstellen. Legen Sie visible
auf dem Knoten link-entity
auf false
fest, um die verknüpfte Tabelle in der Benutzeroberfläche Erweiterte Suche auszublenden. Sie wird weiterhin an der Ausführung der Abfrage teilnhmn und die entsprechenden Ergebnisse zurückgeben.
Warnung
Rufen Sie nicht alle Spalten in einer Abfrage ab, da dies die Leistung beeinträchtigt. Das trifft insbesondere zu, wenn die Abfrage als Parameter in einer Updateanforderung verwendet wird. Wenn bei einer Aktualisierung alle Spalten einbezogen werden, legt dies alle Feldwerte fest, auch wenn sie unverändert sind, und löst oft kaskadierte Aktualisierungen in untergeordneten Datensätzen aus.
Beispiele für FetchXML Abfragezeichenfolgen
Im folgenden Beispiel ruft die FetchXML -Anweisung alle Konten ab:
<fetch mapping='logical'>
<entity name='account'>
<attribute name='accountid'/>
<attribute name='name'/>
</entity>
</fetch>
Im folgenden Beispiel ruft die FetchXML -Anweisung alle Konten ab, bei denen Nachname von Zuständiger Benutzer ungleich Cannon ist:
<fetch mapping='logical'>
<entity name='account'>
<attribute name='accountid'/>
<attribute name='name'/>
<link-entity name='systemuser' to='owninguser'>
<filter type='and'>
<condition attribute='lastname' operator='ne' value='Cannon' />
</filter>
</link-entity>
</entity>
</fetch>
Im folgenden Beispiel verwendet die FetchXML -Anweisung count, um die maximale Anzahl der von der Abfrage zurückgegebenen Datensätze festzulegen. In diesem Fall werden die ersten 3 Konten von der Abfrage zurückgegeben.
<fetch mapping='logical' count='3'>
<entity name='account'>
<attribute name='name' alias='name'/>
</entity>
</fetch>
Dieses Beispiel zeigt eine innere Verbindung zwischen EntityMap und AttributeMap, wo die EntityMapID übereinstimmt.
<fetch version='1.0' mapping='logical' distinct='false'>
<entity name='entitymap'>
<attribute name='sourceentityname'/>
<attribute name='targetentityname'/>
<link-entity name='attributemap' alias='attributemap' to='entitymapid' from='entitymapid' link-type='inner'>
<attribute name='sourceattributename'/>
<attribute name='targetattributename'/>
</link-entity>
</entity>
</fetch>
Wichtig
Eine FetchXML Abfrage ist auf maximal 15 zulässige Linktabellen beschränkt.
Führen Sie die FetchXML Abfrage aus.
Sie können eine FetchXML Abfrage entweder mithilfe der Web-API oder des SDK für .NET ausführen.
Verwenden von Web-API
Sie können eine URL codierte FetchXml-Zeichenfolge zum entsprechenden entityset mithilfe des Abfragezeichenfolgenparameters fetchXml
ausführen. Weitere Informationen: FetchXml mit Web-API verwenden.
Verwenden des SDK für .NET
Verwenden Sie die IOrganizationService.RetrieveMultiple Methode, um einen FetchExpression zu übergeben, bei der die Query-Eigenschaft die FetchXml-Abfrage enthält.
Der folgende Code zeigt, wie eine FetchXML Abfrage mithilfe des Organizations-Dienstes ausgeführt wird:
// Retrieve all accounts owned by the user with read access rights to the accounts and
// where the last name of the user is not Cannon.
string fetch2 = @"
<fetch mapping='logical'>
<entity name='account'>
<attribute name='accountid'/>
<attribute name='name'/>
<link-entity name='systemuser' to='owninguser'>
<filter type='and'>
<condition attribute='lastname' operator='ne' value='Cannon' />
</filter>
</link-entity>
</entity>
</fetch> ";
EntityCollection result = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch2));
foreach (var c in result.Entities)
{
System.Console.WriteLine(c.Attributes["name"]);
}
Wichtig
Wenn Sie mit Code wie dem obigen Beispiel arbeiten, stellen Sie immer sicher, dass es sich bei Ihrer Zeichenfolge um eine gültige codierte XML-Zeichenfolge handelt. Dies gilt insbesondere für die Möglichkeit, Sonderzeichen in Bedingungswerten wie z. B. „&<> einzubinden, die als &<&;gt; kodiert werden.
Mit der FetchXML Meldung können Sie eine FetchXmlToQueryExpressionRequest Abfrage in einen Abfrageausdruck umwandeln.
FetchXML Abfrageergebnisse
Wenn Sie eine FetchXML Abfrage mithilfe von OrganizationServiceProxy ausführen.RetrieveMultiple(QueryBase) Methode, ist der Rückgabewert eine EntityCollection, die die Ergebnisse der Abfrage enthält. Sie können dann durch die Tabellensammlung iterieren. Im vorherigen Beispiel wird die foreach
Schleife verwendet, um die Ergebnissammlung der FetchXML Abfrage zu durchlaufen.
Verwenden Sie Platzhalterzeichen in Bedingungen mit Zeichenfolgenwerte
Sie können Platzhalterzeichen verwenden, wenn Sie Abfragen mit Bedingungen auf Zeichenfolgenwerten erstellen. Weitere Informationen: Verwenden Sie Platzhalterzeichen in Bedingungen für Zeichenfolgenwerte
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).