Verwenden von FetchXML zum Erstellen einerAbfrage

Hinweis

Unsicher bei Entität vs. Tabelle? Siehe Developers: Understand terminology in Microsoft Dataverse.

FetchXML ist eine proprietäre XML-basierte Abfragesprache von Microsoft Dataverse, die zum Abfragen von Daten entweder über die Web-API oder den Organisationsdienst verwendet wird. Sie basiert auf einem Schema, das die Funktionalität der Sprache beschreibt. Die FetchXML-Sprache unterstützt ähnliche Funktionalitäten 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 der 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.

Beispiel-FetchXML-Abfragezeichenfolgen

Im folgenden Beispiel ruft die Anweisung FetchXML alle Konten ab:

  
<fetch mapping='logical'>   
   <entity name='account'>  
      <attribute name='accountid'/>   
      <attribute name='name'/>   
   </entity>  
</fetch>  
  

Im folgenden Beispiel ruft die Anweisung FetchXML alle Konten ab, bei denen der Nachname des besitzenden Benutzers nicht gleich 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 verwendent die FetchXML-Anweisung Zählung, um die maximalen Anzahl der Datensätze festzulegen, die von der Abfrage zurückgegeben werden. 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 hat ein Limit von maximal 10 zugelassenen Verknüpfungstabellen.

Der in-Operator einer FetchXML-Abfrage ist auf 2000 Werte begrenzt.

Ausführen der FetchXML-Abfrage

Sie können eine FetchXML-Abfrage ausführen, indem Sie entweder die Web API oder den Organization Service verwenden.

Verwenden von Web-API

Sie können eine URL codierte FetchXml-Zeichenfolge zum entsprechenden entityset mithilfe des Abfragezeichenfolgenparameters fetchXml ausführen. Weitere Informationen: Benutzerdefiniertes FetchXML verwenden.

Verwenden des Organisationsservice

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 Sie eine FetchXML-Abfrage mit dem Dienst „Organisationen“ ausführen:

  
// 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"]);
}  

Hinweis

Sie können eine FetchXML-Abfrage in einen Abfrageausdruck mit der FetchXmlToQueryExpressionRequest-Nachricht konvertieren.

FetchXML-Abfrageergebnisse

Wenn Sie einer FetchXML-Abfrage ausführen, indem Sie die OrganizationServiceProxy.RetrieveMultiple(QueryBase) Methode, ist der Rückgabewert eine EntityCollection, die die Ergebnisse der Abfrage enthält. Sie können dann durch die Tabellensammlung iterieren. Der vorherige Beispiel verwendet die foreach-Schleife, um die Ergebnissammlung der FetchXML-Abfrage zu durchlaufen.