Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um Bedingungen für die zurückzugebenden Datenzeilen festzulegen, verwenden Sie das Filterelement innerhalb einer Entität, Linkentität oder eines anderen filter Elements.
Um die Bedingungen festzulegen, fügen Sie dem Filter mindestens ein Bedingungselement hinzu. Das enthaltende filtertype Attribut bestimmt, ob alle (and) oder irgendeine (or) der Bedingungen erfüllt sein müssen. Der Standardwert lautet and. Durch das Verschachteln von Filterelementen können Sie komplexe Filterkriterien erstellen, die Kriterien kombinieren, die mit and oder or ausgewertet werden.
Jedes condition hat ein operator Attribut, um einen Zeilen- und Spaltenwert auszuwerten. Es gibt viele Bedingungsoperatorwerte , aus denen Sie auswählen können.
Die folgende Abfrage gibt beispielsweise Kontodatensätze zurück, wobei address1_city "Redmond" entspricht. Es verwendet <filter type='and'> mit dem eq-Operator.
<fetch>
<entity name='account'>
<attribute name='name' />
<filter type='and'>
<condition attribute='address1_city'
operator='eq'
value='Redmond' />
</filter>
</entity>
</fetch>
Diese Abfrage gibt Kontodatensätze zurück, wobei address1_city 'Redmond', 'Seattle' oder 'Bellevue' gleich ist. Es verwendet <filter type='or'> mit drei Bedingungselementen, die jeweils den eq-Operator verwenden.
<fetch>
<entity name='account'>
<attribute name='name' />
<attribute name='address1_city' />
<filter type='or'>
<condition attribute='address1_city'
operator='eq'
value='Redmond' />
<condition attribute='address1_city'
operator='eq'
value='Seattle' />
<condition attribute='address1_city'
operator='eq'
value='Bellevue' />
</filter>
</entity>
</fetch>
Die vorherige Abfrage kann auch mithilfe des in-Operators unter Verwendung eines einzelnen condition-Elements dargestellt werden. Diese Bedingung enthält mehrere Wertelemente , um die zu vergleichenden address1_cityWerte anzugeben.
<fetch>
<entity name='account'>
<attribute name='name' />
<attribute name='address1_city' />
<filter type='and'>
<condition attribute='address1_city'
operator='in'>
<value>Redmond</value>
<value>Seattle</value>
<value>Bellevue</value>
</condition>
</filter>
</entity>
</fetch>
Operatorparameter
Operatoren können keine Parameter, einen einzelnen Parameter oder mehrere Parameter erfordern. Der Operator bestimmt, wie Sie den auszuwertenden Wert festlegen.
Keine Parameter
Einige Operatoren erfordern keine Parameter. Sie können z. B. den eq-userid-Operator verwenden, um einen eindeutigen Bezeichner auszuwerten, um festzustellen, ob er mit der ID des aufrufenden Benutzers übereinstimmt.
<condition attribute='ownerid'
operator='eq-userid' />
Einzelner Parameter
Wenn ein Operator einen einzelnen Parameter erfordert, verwenden Sie das value Attribut, um den auszuwertenden Wert festzulegen.
Sie können z. B. den Eq-Operator verwenden, um den statecode Auswahlspaltenwert eines Datensatzes auszuwerten, indem Sie das value Attribut festlegen.
<condition attribute='statecode'
operator='eq'
value='0' />
Mehrere Parameter
Wenn ein Operator mehrere Parameter erfordert, verwenden Sie das Wertelement , um die zu bewertenden Werte anzugeben. Sie können z. B. den Zwischenoperator verwenden, um eine Zahl auszuwerten, um festzustellen, ob es sich zwischen einer Gruppe von Werten befindet.
<condition attribute="numberofemployees"
operator="between">
<value>6</value>
<value>20</value>
</condition>
Filter in der Link-Entität
Wenn Sie einen Filter innerhalb einer Link-Entität anwenden, wird der Filter mit der Verknüpfung angewendet, es sei denn, Sie konfigurieren den Filter so, dass er nach der Verknüpfung auftritt.
Wenn der Wert des Attributs "link-entitylink-type " lautet outer, möchten Sie möglicherweise, dass der Filter nach der Verknüpfung angewendet wird, indem Sie den Wert des Bedingungsattributsentityname festlegen. Wenn Sie eine Linkentitätalias verwenden, verwenden Sie den alias Wert, um das entityname Attribut festzulegen. Legen Sie andernfalls den entityname Attributwert auf den Wert des Attributs "link-entityname " fest.
Die folgende Abfrage gibt beispielsweise Kontakte ohne übergeordnetes Konto oder ein übergeordnetes Konto ohne Fax zurück.
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter>
<condition entityname='a'
attribute='fax'
operator='null' />
</filter>
<link-entity name='account'
from='accountid'
to='parentcustomerid'
link-type='outer'
alias='a' />
</entity>
</fetch>
Filtern nach Spaltenwerten in derselben Zeile
Mithilfe des valueof Attributs können Sie Filter erstellen, die Spalten für Werte in derselben Zeile vergleichen. Wenn Sie beispielsweise nach Kontaktdatensätzen suchen möchten, bei denen der firstname Spaltenwert mit dem lastname Spaltenwert übereinstimmt, können Sie diese Abfrage verwenden:
<fetch>
<entity name='contact' >
<attribute name='firstname' />
<filter>
<condition attribute='firstname'
operator='eq'
valueof='lastname' />
</filter>
</entity>
</fetch>
Tabellenübergreifende Spaltenvergleiche
Mit FetchXML können Sie Feldwerte nur in verknüpften Tabellen vergleichen. Im folgenden Beispiel werden Zeilen zurückgegeben, in denen die Kontaktspalte fullname der Kontospalte name entspricht.
<fetch>
<entity name='contact'>
<attribute name='contactid' />
<attribute name='fullname' />
<filter type='and'>
<condition attribute='fullname'
operator='eq'
valueof='acct.name' />
</filter>
<link-entity name='account'
from='accountid'
to='parentcustomerid'
link-type='outer'
alias='acct'>
<attribute name='name' />
</link-entity>
</entity>
</fetch>
Das Linkentitätselement muss ein alias Attribut verwenden, und der Wert des valueof Parameters muss auf diesen Alias und den Spaltennamen in der verknüpften Tabelle verweisen.
Einschränkungen bei Spaltenvergleichsfiltern
Es gibt Einschränkungen für diese Arten von Filtern:
Bedingung kann nur diese Operatoren verwenden:
Bediener Description eq Die Werte werden für Gleichheit verglichen. ne Die beiden Werte sind nicht gleich. gt Der Wert ist größer als der Vergleichswert. ge Der Wert ist größer oder gleich dem Vergleichswert. lt Der Wert ist kleiner als der Vergleichswert. le Der Wert ist kleiner oder gleich dem Vergleichswert. Es können jeweils nur zwei Spalten verglichen werden.
Erweiterte Bedingungsvorgänge werden nicht unterstützt. Beispiel:
valueof='amount'+ 100Die Spalten müssen den gleichen Typ haben. Beispiel: Sie können einen Zeichenfolgenwert nicht mit einem Zahlenwert vergleichen.
Filtern nach Werten in verwandten Datensätzen
Wenn Sie nach Werten in verknüpften Datensätzen filtern möchten, ohne diese Werte zurückzugeben, verwenden Sie ein Linkentitätselement innerhalb des Filterelements mit einem der folgenden link-type Attribute:
| Name | Description |
|---|---|
any |
Verwenden Sie dies innerhalb eines Filterelements. Beschränkt die Ergebnisse auf übergeordnete Zeilen mit allen übereinstimmenden Zeilen in der verknüpften Entität. |
not any |
Verwenden Sie dies innerhalb eines Filterelements. Beschränkt die Ergebnisse auf übergeordnete Zeilen ohne übereinstimmende Zeilen in der verknüpften Entität. |
all |
Verwenden Sie dies innerhalb eines Filterelements. Beschränkt die Ergebnisse auf übergeordnete Zeilen, bei denen Zeilen mit übereinstimmenden from Spaltenwert in der Verknüpfungsentität vorhanden sind, aber keine dieser übereinstimmenden Zeilen die zusätzlichen Filter erfüllen, die für diese Verknüpfungsentität definiert sind. Sie müssen die zusätzlichen Filter umkehren , um nach übergeordneten Zeilen zu suchen, bei denen jede übereinstimmende Verknüpfungsentitätszeile einige zusätzliche Kriterien erfüllt. |
not all |
Verwenden Sie dies innerhalb eines Filterelements. Beschränkt die Ergebnisse auf übergeordnete Zeilen mit allen übereinstimmenden Zeilen in der verknüpften Entität. Dieser Linktyp entspricht any trotz des Namens. |
Wenn Sie diese Verknüpfungstypen innerhalb eines Filterelements verwenden, sind diese Filter untergeordnete Bedingungen, die dem vom type Attribut des übergeordneten Elements filterdefinierten Verhalten folgen.
Filter mit diesen Typen geben die übergeordnete Zeile höchstens einmal zurück, auch wenn mehrere übereinstimmende Zeilen in der Verknüpfungsentität vorhanden sind. Sie erlauben nicht, Spaltenwerte aus den Zeilen der Verknüpfungsentität zurückzugeben.
Beispiele für Filter nach Werten in verwandten Datensätzen
Die folgenden Beispiele veranschaulichen das Filtern nach Werten verwandter Datensätze. Zu diesen Beispielen gehören die entsprechenden SQL-Anweisungen, um das Verhalten zu erläutern.
Oder Filtern mit link-typeany
Diese Abfrage verwendet einen filter vom Typ or mit einer untergeordneten link-entity vom Typ any, um Datensätze in Kontakt zurückgeben, die:
- entweder von der PrimaryContactId-Suchspalte von mindestens einem Konto-Datensatz referenziert werden, bei dem die Namensspalte gleich „Contoso“ ist,
- oder bei denen die Contact.StateCode-Auswahllistenspalte auf 1 gesetzt ist: Inaktiv:
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='or'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='any'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
<condition attribute='statecode'
operator='eq'
value='1' />
</filter>
</entity>
</fetch>
link-type
not any
Diese Abfrage verwendet den not any Verknüpfungstyp, um Datensätze aus der Kontakttabelle zurückzugeben, auf die nicht von der PrimaryContactId-Nachschlagespalte eines Kontodatensatzes verwiesen wird, deren Name-Spalte "Contoso" entspricht. Auf den Kontaktdatensatz wird möglicherweise weiterhin von Kontodatensätzen mit anderen"Name"-Spaltenwerten verwiesen.
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='not any'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
link-type
not all
Hinweis
Die Bedeutung der Verknüpfungstypen all und not all ist das Gegenteil von dem, was die Namen implizieren könnten, und sie werden in der Regel mit invertierten Filtern verwendet.
- Eine Verknüpfungsentität des Typs
not allentsprichtanyund gibt übergeordnete Datensätze zurück, die Verknüpfungsentitätseinträge aufweisen, die den Filtern entsprechen. - Eine Verknüpfungsentität vom Typ
allgibt übergeordnete Datensätze zurück, wenn einige Verknüpfungsentitätseinträge mit einem übereinstimmendenfromSpaltenwert vorhanden sind, aber keine dieser Verknüpfungsentitätszeilen die zusätzlichen Filter erfüllen, die innerhalb des Linkentitätselements definiert sind.
Diese Abfrage verwendet eine link-entity des Typs not all, um Datensätze aus der Tabelle Kontakt zurückzugeben, die durch die PrimaryContactId-Suchspalte mindestens eines Konto-Datensatzes referenziert werden, bei dem die Namensspalte gleich „Contoso“ ist:
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='not all'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
link-type
all
Diese Abfrage verwendet eine link-entity des Typs all, um Datensätze aus der Tabelle Kontakt zurückzugeben, die durch die PrimaryContactId-Suchspalte einige Konto-Datensätze referenziert werden, aber keine dieser Konto-Datensätze, bei denen die Namensspalte gleich „Contoso“ ist:
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='all'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
Bedingungsgrenzen
Sie können nicht mehr als 500 Gesamtbedingungs - und Verknüpfungsentitätselemente in eine FetchXml-Abfrage einschließen. Andernfalls wird dieser Fehler angezeigt:
Name:
TooManyConditionsInQuery
Code:0x8004430C
Zahl:-2147204340
Meldung:Number of conditions in query exceeded maximum limit.
Sie müssen die Anzahl der Bedingungen verringern, um die Abfrage auszuführen. Möglicherweise können Sie die Anzahl der Bedingungen reduzieren, indem Sie den In-Operator verwenden, der mit Zahlen, eindeutigen Bezeichnern und Zeichenfolgen bis zu 850 Zeichen verwendet werden kann.
Nächste Schritte
Erfahren Sie, wie Sie Die Ergebnisse auf der Seite anzeigen.