Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Universal FetchXML (UFX) är ett avancerat frågespråk som gör att du kan fråga efter data med hjälp av dynamisk FetchXML, shape och förbereda resulterande data för användning av URS-lösningen (Universal Resource Scheduling). Med det här frågespråket kan du skapa anpassade frågor för att anpassa och utöka schemaläggningstavlan och schemaläggningsassistentens filter för att uppfylla organisationens unika affärsbehov.
UFX består av två komponenter: UFX, väska och UFX-fråga.
Enkel UFX-väska
En UFX-påse innehåller data som är statiskt typade. I minnet modellerar den en ordlista med nycklar och värden. Den kan serialiseras till JSON och XML. Om du har angett data kan en UFX-fråga fråga efter data från den och klientgränssnittet binda till den.
Av praktiska skäl och prestandaskäl implementeras den minnesinterna påsen ovanpå SDK-objektet Entity för Dynamics 365-appar.
Provpåse som innehåller två värden.
I minnet:
| nyckel | värde | typ |
|---|---|---|
| namn | John | snöre |
| ålder | 36 | Int |
I JSON:
{
"name": "John",
"age": 36
}
I XML:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
Typer som stöds av UFX
En UFX-påse kan innehålla många olika värden. De kategoriseras i tre typklasser:
| Kategori | Värde |
|---|---|
| Enkla typer |
bool (Boolean), int (Int32), long (Int64), double (Double), decimal (Decimal), , datetime (DateTime), , guid (Guid)string (String)Dynamics 365-specifika enkla typer: money (Money), option (OptionSet), lookup (EntityReference) |
| Andra väskor | bag (Entity) |
| Lista över väskor | list (EntityCollection) |
Här är ett exempel på en JSON-påse som innehåller fler typer:
{
"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" }
]
}
Samma påse i 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-frågor
UFX-frågor skrivs som XML-baserade UFX-påsar. Egenskaper i påsen kan innehålla UFX-direktiv för att fråga efter data dynamiskt. En UFX-fråga körs på minnesinterna objekt, inte XML. Endast direktiven är skrivna i XML. Dess utdata kan serialiseras till JSON eller XML.
Följande UFX-fråga definierar egenskapen i påsen accounts med source UFX-direktivet. Det innebär att Dynamics 365 kör den infogade FetchXML och fyller i accounts egenskapen med en lista med påsar. En EntityCollection där varje påse representerar en enskild kontopost från Dynamics 365.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
</bag>
En UFX-fråga bearbetas sekventiellt och kan innehålla många FetchXML-frågor.
Här är ett utdrag av resultatet av den tidigare UFX-frågan serialiserad till XML. Observera att vissa värden har metadata som beskriver dem ytterligare.
<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>
select UFX-direktivet tar ett XPath-uttryck som väljer värden från den aktuella påsen.
<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>
Den resulterande påsen i XML:
<bag>
<first_account_name ufx-type="string">Fourth Coffee (sample)</first_acount_name>
</bag>
Den mest kraftfulla aspekten av en UFX Query är dess förmåga att dynamiskt generera FetchXML baserat på indata.
I följande exempel söker vi efter konton med ett värde som tillhandahålls av användaren och som är tillgängligt som en UFX-väska via XPath-variabeln $input . Lägg märke till UFX if - och värdedirektiven på elementet condition .
<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>
Om egenskapen i indatapåsen NameFilter innehöll %city% det skapade FetchXML-villkoret som körs av Dynamics 365 skulle det se ut så här.
<condition attribute="name" operator="like" value="%city%" />
Nycklar, värden och metadata
En UFX-väska innehåller nycklar och värden, där vissa värden har mer metadata för att beskriva dem.
Ett exempel kan vara ett värde av typen lookup (EntityReference). När den efterfrågas från Dynamics 365 via FetchXML returneras det logiska namnet på entiteten och det formaterade visningsnamnet för posten. UFX-påsen bevarar denna ytterligare information som metadata som är kopplade till det primära värdet.
Serialiserad till JSON ser en lookup med metadata ut så här:
{
"primarycontactid": "7e6e39dd-34a1-e611-8111-00155d652f01",
"primarycontactid@ufx-type": "lookup",
"primarycontactid@ufx-logicalname": "contact",
"primarycontactid@ufx-formatvalue": "Susanna Stubberod (sample)"
}
I XML:
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
XPath över Dynamics 365-data
Att ha data i en UFX Bag skriven, gör att en UFX Query kan se den i ett strukturerat format och använda XPath för att gå igenom data och välja värden från den.
Ett XPath-uttryck som anges i ett UFX-direktiv ser data i påsen på samma sätt som påsens struktur i XML-serialiserad form. NET-objekt i minnet (i instanser av Entity och EntityCollection typer) och inte i XML-dokument.
Referens för UFX-typ
Alla UFX-typer har stöd för ufx-typeufx-formatvalue och metadata. Ytterligare metadata beskrivs bredvid varje typ.
| UFX-namn | Kod för attributtyp | .NET-namn | UFX-metadata |
|---|---|---|---|
| Bool | Boolesk | Boolesk | |
| Int | Heltal | Int32 | |
| lång | BigInt | Int64 | |
| dubbel | dubbel | dubbel | |
| decimaltecken | Decimal | Decimal | |
| tidpunkt | Datum och tid | Datum och tid | |
| riktlinje | Uniqueidentifier (Uniqueidentifier) | Guide | |
| snöre | PM | Sträng | |
| pengar | Pengar | Pengar | |
| alternativ | Plocklista | OptionSetValue (AlternativSetVärde) | |
| Sökning | Sökning | EntityReference | ufx-logicalname |
| påse | Inte tillgänglig | Enhet | ufx-idufx-logicalname |
| lista | Inte tillgänglig | EntityCollection (på engelska) | |
| Inte tillgänglig | Inte tillgänglig | AliasedValue (alias) | ufx-aliasentityufx-aliasattribute |
Direktiv för UFX-frågor
UFX-direktiv kan användas på påsegenskaper och på XML-element i en FetchXML-fråga.
Direktiv för UFX-väskor
| Egenskap | Värde | Beskrivning |
|---|---|---|
ufx:if |
XPath | Testar XPath-uttrycket och bearbetar endast egenskapen om testet returnerar true |
ufx:source |
fetch |
Kör det infogade <fetch> XML-elementet och tilldelar resultatet till egenskapen |
ufx:select |
XPath | Kör XPath-uttrycket och tilldelar resultatet till egenskapen När du frågar efter en bag eller list ett valfritt underordnat bag i XML-formulär kan du ange för att transformera resultatet av XPath-uttrycket |
UFX FetchXML-direktiv
| Komponent | Egenskap | Värde | Beskrivning |
|---|---|---|---|
| Alla element | ufx:if |
XPath | Testar XPath-uttrycket och genererar bara XML-elementet om testerna lyckas |
ufx:apply |
select |
XPath | Loopar över noduppsättningen som returneras av XPath-uttrycket och matar ut de underordnade XML-elementen en gång för varje nod |
ufx:value |
select |
XPath | Kör XPath-uttrycket och matar ut resultatet i det aktuella XML-elementet |
ufx:value |
attribute |
Namn på attribut | Tilldelar XPath-uttryckets resultat till det angivna attributnamnet för det aktuella XML-elementet |
UFX XPath-funktioner
UFX lägger till många nya funktioner utöver de som finns tillgängliga i XPath.
datetime()
- datetime(): Returnerar den aktuella tiden i UTC
lista()
- lista (väska | lista, ... [bag | list]): Tar ett antal
bagor-värdenlistsom indata och plattar ut dem till en endalist
lookup-to-list()
- lookup-to-list(lookup, ... [lookup]): Tar ett antal värden, konverterar var och en av
lookupdem till a medbagmetadatauppsättningenufx-idochufx-logicalnameplattar ut dem till en endalist
alternativ-till-lista()
- alternativ-till-lista (alternativ, ... [option]): Tar ett antal värden, konverterar vart och ett av
optiondem till abagmed en endaoptionegenskap och plattar ut dem till ett endalist
ordning()
- order(list, string, bool): Beställer en lista efter en egenskap i varje påse. Egenskapen anges i argument 2, fallande anges i argument 3.
- order (list, list): Ordna en lista efter flera sorteringsordningar som anges som en lista i argument 2. Var
bagoch en i den andra listan kan ha ennameoch-egenskapdescending
iif()
- iif(any, any, any): Om argument 1 är sant, returnerar argument 2, annars returneras argument 3
UFX XPath-variabler
| Namn | Beskrivning |
|---|---|
| $input | En bag tillgänglig för UFX-frågan med indatavärden |
| $null | En null-konstant. Om du väljer $null en egenskap tas den bort från påsen |
| $current | Referens till den aktuella påsen som UFX-frågan bearbetar |
Ytterligare resurser
Förstå och anpassa resursmatchning i Universal Resource Scheduling