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.
Universal FetchXML (UFX) ist eine fortgeschrittene Abfragesprache, mit der Sie Daten mithilfe dynamischer FetchXML abfragen können. Es formt und bereitet die resultierenden Daten für den Verbrauch durch die Universal Resource Scheduling (URS)- Lösung vor. Mit dieser Abfragesprache können Sie benutzerdefinierte Abfragen erstellen, um die Filter der Zeitplanübersicht und des Zeitplan-Assistenten anzupassen und zu erweitern, um die individuellen Geschäftsanforderungen der Organisation zu erfüllen.
UFX besteht aus zwei Komponenten: UFC-Bag und UFC-Abfrage.
Einfache UFX-Tasche
Ein UFX-Beutel enthält statisch typisierte Daten. Im Arbeitsspeicher modelliert es ein Wörterbuch mit Schlüsseln und Werten. Du kannst es in JSON und XML serialisieren. Wenn die Daten getippt sind, kann eine UFX-Abfrage die Daten daraus abfragen, und die Client-UI kann sich darauf binden.
Aus praktischen und leistungstechnischen Gründen ist die In-Memory-Tasche auf dem SDK-Objekt der Dynamics 365 Apps Entity implementiert.
Probenbeutel mit zwei Werten.
In Erinnerung:
| Schlüssel | Wert | Typ |
|---|---|---|
| Name | John | Schnur |
| Alter | 36 | INT |
In JSON:
{
"name": "John",
"age": 36
}
In XML:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
Von UFX unterstützte Typen
Ein UFX-Beutel kann Werte vieler Typen enthalten. Sie werden in drei Typenklassen eingeteilt:
| Kategorie | Wert |
|---|---|
| Einfache Typen |
bool (Boolean), int (Int32), long (Int64), double (Double), decimal (Decimal), , datetime (DateTime), , guid (Guid)string (String)Dynamics 365-spezifische einfache Typen: money (Money), option (OptionSet), lookup (EntityReference) |
| Andere Taschen | bag (Entity) |
| Liste der Taschen | list (EntityCollection) |
Hier ist ein JSON-Beispielbeutel mit weiteren Typen:
{
"citizen": true, // implicit bool
"age": 36, // explicit int
"age@ufx-type": "int",
"name": { // nested bag
"first": "John",
"last": "Doe"
},
"children": [ // list of bags
{ "name": "Sam" },
{ "name": "Judy" }
]
}
Der gleiche Beutel in XML:
<bag>
<citizen ufx-type="bool">true</citizen>
<age ufx-type="int">36</age>
<name ufx-type="bag">
<first ufx-type="string">John</first>
<last ufx-type="string">Doe</last>
</name>
<children ufx-type="list">
<bag>
<name ufx-type="string">Sam</name>
</bag>
<bag>
<name ufx-type="string">Judy</name>
</bag>
</children>
</bag>
UFX-Abfragen
Schreiben Sie UFC-Abfragen als XML-basierte UFX-Bags. Eigenschaften im Beutel können UFX-Direktiven enthalten, um Daten dynamisch abzufragen. Eine UFX-Abfrage wird für In-Memory-Objekte und nicht für XML ausgeführt. Nur die Direktiven sind in XML geschrieben. Sie können die Ausgabe in JSON oder XML serialisieren.
Die folgende UFX-Abfrage definiert die accounts Eigenschaft im Bag mit der source UFX-Direktive. Infolgedessen führt Dynamics 365 das Inline-FetchXML aus und füllt die accounts Eigenschaft mit einer Liste von Behältern auf. Ein EntityCollection Punkt, an dem jeder Beutel einen einzelnen Kontodatensatz aus Dynamics 365 darstellt.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
</bag>
Eine UFX-Abfrage wird sequenziell verarbeitet und kann viele FetchXML-Abfragen enthalten.
Hier sehen Sie einen Ausschnitt aus dem Ergebnis der vorherigen UFX-Abfrage, die in XML serialisiert wurde. Einige Werte enthalten Metadaten, die sie weiter beschreiben.
<bag>
<accounts ufx-type="list">
<bag ufx-id="166e39dd-34a1-e611-8111-00155d652f01" ufx-logicalname="account">
<accountid ufx-type="guid">166e39dd-34a1-e611-8111-00155d652f01</accountid>
<accountnumber ufx-type="string">ABSS4G45</accountnumber>
<name ufx-type="string">Fourth Coffee (sample)</name>
<statecode ufx-type="option" ufx-formatvalue="Active">0</statecode>
<websiteurl ufx-type="string">https://www.fourthcoffee.com/</websiteurl>
<primarycontactid ufx-type="lookup" ufx-formatvalue="Yvonne McKay (sample)" ufx-logicalname="contact">7c6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
...
</bag>
<bag ufx-type="bag" ufx-id="186e39dd-34a1-e611-8111-00155d652f01" ufx-logicalname="account">
<accountid ufx-type="guid">186e39dd-34a1-e611-8111-00155d652f01</accountid>
<accountnumber ufx-type="string">ACTBBDC3</accountnumber>
<name ufx-type="string">Litware, Inc. (sample)</name>
<statecode ufx-type="option" ufx-formatvalue="Active">0</statecode>
<websiteurl ufx-type="string">https://www.litwareinc.com/</websiteurl>
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
...
</bag>
...
</accounts>
</bag>
Die select UFX-Direktive verwendet einen XPath-Ausdruck, der Werte aus dem aktuellen Bag auswählt.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
<first_account_name ufx:select="accounts/bag[1]/name" />
<!-- null values remove properties from the bag -->
<accounts ufx:select="$null" />
</bag>
Der resultierende Beutel in XML:
<bag>
<first_account_name ufx-type="string">Fourth Coffee (sample)</first_acount_name>
</bag>
Der leistungsstärkste Aspekt einer UFX-Abfrage ist sicherlich ihre Fähigkeit, FetchXML basierend auf Eingabedaten dynamisch zu generieren.
Im folgenden Beispiel suchen Sie nach Konten nach einem vom Benutzer angegebenen Wert, der als UFX-Beutel über die XPath-Variable $input verfügbar ist. Beachten Sie die UFX if- und value-Direktiven für das condition Element.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account">
<filter>
<condition attribute="name" operator="like" ufx:if="$input/NameFilter">
<ufx:value select="$input/NameFilter" attribute="value" />
</condition>
</filter>
</entity>
</fetch>
</accounts>
</bag>
Wenn die NameFilter Eigenschaft im Eingabebeutel enthält%city%, sieht die von Dynamics 365 ausgeführte FetchXML-Bedingung so aus.
<condition attribute="name" operator="like" value="%city%" />
Schlüssel, Werte und Metadaten
Ein UFX-Beutel enthält Schlüssel und Werte, wobei einige Werte mehr Metadaten haben, um sie zu beschreiben.
Ein Beispiel könnte ein Wert vom Typ .lookup (EntityReference) Bei der Abfrage von Dynamics 365 über FetchXML wird der logische Name der Entität und der formatierte Anzeigename des Datensatzes zurückgegeben. Der UFX-Beutel bewahrt diese zusätzlichen Informationen als Metadaten, die dem Primärwert zugeordnet sind.
Serialisiert in JSON sieht ein mit lookup Metadaten wie folgt aus:
{
"primarycontactid": "7e6e39dd-34a1-e611-8111-00155d652f01",
"primarycontactid@ufx-type": "lookup",
"primarycontactid@ufx-logicalname": "contact",
"primarycontactid@ufx-formatvalue": "Susanna Stubberod (sample)"
}
In XML:
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
XPath über Dynamics 365-Daten
Wenn Sie Daten in eine UFOX-Packung eingeben, kann eine UXX-Abfrage sie in einem strukturierten Format sehen und XPath verwenden, um die Daten zu durchlaufen und Werte auszuwählen.
Ein XPath-Ausdruck, der in einer UFX-Direktive angegeben wird, sieht die Daten im Beutel ähnlich wie die Struktur des Behälters in XML-serialisierter Form. Die Daten werden jedoch in .NET-Objekten im Arbeitsspeicher (in Instanzen von Entity und EntityCollection Typen) und nicht in XML-Dokumenten gespeichert.
UFX-Typen-Referenz
Alle UFX-Typen unterstützen die ufx-type und ufx-formatvalue Metadaten. Die folgende Tabelle beschreibt zusätzliche Metadaten für jeden Typ.
| UFX-Name | Code für den Attributtyp | .NET-Name | UFX-Metadaten |
|---|---|---|---|
| Boolesch | Boolescher Typ (Boolean) | Boolescher Typ (Boolean) | |
| INT | Ganze Zahl | Int32 | |
| lang | BigInt | Int64 | |
| doppelt | Doppelt | Doppelt | |
| Decimal | Dezimalzahl | Dezimalzahl | |
| Datum/Uhrzeit | Datum/Uhrzeit | Datum/Uhrzeit | |
| GUID | Eindeutiger Bezeichner | Leitfaden | |
| Schnur | Mitteilung | Schnur | |
| Geld | Geld | Geld | |
| Option | Auswahlliste | OptionSetValue | |
| nachschlagen | Suche | EntityReference | ufx-logicalname |
| Tasche | Nicht verfügbar | Entität | ufx-idufx-logicalname |
| Liste | Nicht verfügbar | EntityCollection | |
| Nicht verfügbar | Nicht verfügbar | AliasedValue | ufx-aliasentityufx-aliasattribute |
UFX-Abfrage-Direktiven
Verwenden Sie UFX-Direktiven auf Bag-Eigenschaften und auf XML-Elementen einer FetchXML-Abfrage.
Richtlinien für UFX-Beutel
| Merkmal | Wert | BESCHREIBUNG |
|---|---|---|
ufx:if |
XPath | Testet den XPath-Ausdruck und verarbeitet die Eigenschaft nur, wenn der Test true zurückgibt |
ufx:source |
fetch |
Führt das Inline-XML-Element <fetch> aus und weist der Eigenschaft das Ergebnis zu. |
ufx:select |
XPath | Führt den XPath-Ausdruck aus und weist das Ergebnis der Eigenschaft zu Bei der Abfrage nach einem bag oder listkönnen Sie ein optionales Kind bag in XML-Form angeben, um das Ergebnis des XPath-Ausdrucks zu transformieren. |
UFX FetchXML-Direktiven
| Element | Merkmal | Wert | BESCHREIBUNG |
|---|---|---|---|
| Alle Elemente | ufx:if |
XPath | Testet den XPath-Ausdruck und gibt das XML-Element nur aus, wenn der Test erfolgreich ist |
ufx:apply |
select |
XPath | Führt eine Schleife über das vom XPath-Ausdruck zurückgegebene Nodeset durch und gibt die untergeordneten XML-Elemente einmal für jeden Knoten aus |
ufx:value |
select |
XPath | Führt den XPath-Ausdruck aus und gibt das Ergebnis im aktuellen XML-Element aus |
ufx:value |
attribute |
Attributname | Weist das Ergebnis des XPath-Ausdrucks dem angegebenen Attributnamen im aktuellen XML-Element zu. |
UFX XPath-Funktionen
UFX fügt viele neue Funktionen hinzu, zusätzlich zu denen, die nativ in XPath verfügbar sind.
Datum/Uhrzeit()
-
datetime(): Gibt die aktuelle Zeit in UTC zurück.
liste()
-
list(bag | list, ...[bag | list]): Nimmt eine Anzahl vonbagoder-Wertenlistals Eingabe und flacht sie zu einem einzigenlist.
Nachschlage-nach-Liste()
-
lookup-to-list(lookup, ...[lookup]): Nimmt mehrerelookupWerte, wandelt jeden Wert mitbagdem undufx-logicalnameMetadatensatzufx-idum und flacht sie zu einem einzigenlist.
Option-zur-Liste()
-
option-to-list(option, ...[option]): Nimmt mehrereoptionWerte, wandelt jeden Wert in einbagmit einer einzigenoptionEigenschaft um und flacht sie zu einem einzigenlist.
Reihenfolge()
-
order(list, string, bool): Ordnet eine Liste nach einer Eigenschaft in jedembag. Spezifizieren Sie die Eigenschaft im zweiten Argument und geben Sie im dritten Argument die absteigende Reihenfolge an. -
order(list, list): Ordnet eine Liste nach mehreren Sortierreihenfolgen, die im zweiten Argument als Liste angegeben sind. Jedebagin der zweiten Liste kann einenameEigenschaft unddescendinghaben.
iif()
-
iif(any, any, any): Wenn das erste Argument wahr ist, gibt das zweite Argument zurück. Andernfalls gibt er das dritte Argument zurück.
UFX XPath-Variablen
| Name | BESCHREIBUNG |
|---|---|
| $input | A bag , der für die UFX-Abfrage mit Eingabewerten verfügbar ist |
| $null | Eine NULL-Konstante. Die Auswahl $null einer Eigenschaft entfernt die Eigenschaft aus der bag |
| $current | Verweis auf den aktuellen Bereich bag , den die UFX-Abfrage verarbeitet |
Weitere Ressourcen
Verstehen und Anpassen des Ressourcenabgleichs in Universal Resource Scheduling