Utöka Universal Resource Scheduling med universell FetchXML
UFX är ett avancerat frågespråk som gör att du kan hämta frågedata med hjälp av dynamisk FetchXML-form och förbereda resultatet för förbrukning av lösningen Universal Resource Scheduling (URS). Den här frågespråket låter dig skapa anpassade frågor för att anpassa och utöka schematavlan och schemaläggningsassistentfilter för att tillgodose unika affärsbehov i organisationen.
UFX består av två komponenter UFX uppsättning och UFX frågan.
Enkel UFX uppsättning
En UFX uppsättning innehåller statiska skrivna data. I minnet visas den som en ordlista med nycklar och värden. Den kan serialiseras till JSON och XML. Om du skriver data tillåter detta att en UFX fråga frågar data från den och klientens användargränssnitt för att koppla till den.
Av praktiska och prestandaskäl kan den minnesinterna uppsättningen implementeras ovanför Dynamics 365 SDK-appar
Entity
-objekt.
Exempeluppsättningen innehåller två värden.
Minnesintern:
Nyckel | värde | typ |
---|---|---|
namn | John | sträng |
ålder | 36 | heltal |
I JSON:
{
"name": "John",
"age": 36
}
I XML:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
UFX-typer som stöds
En UFX uppsättning kan innehålla värden av olika typer. De kategoriseras i 3 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) |
Övriga uppsättningar | bag (Entity) |
Lista över uppsättningar | list (EntityCollection) |
Här följer en JSON exempeluppsättning som innehåller flera 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 uppsättning 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>
Introduktion till UFX frågor
UFX frågor skrivs som XML-baserade UFX uppsättningar. Egenskaper i uppsättningen kan innehålla UFX direktiv för att fråga data dynamiskt. En UFX fråga kör på minnesinterna objekt, inte XML. Endast direktiv skrivs i XML-format. Dess utdata kan serialiseras till JSON eller XML.
Följande UFX-fråga definierar egenskapen accounts
i uppsättningen med source
UFX-direktivet. Detta resulterar i att inline FetchXML körs av Dynamics 365 och egenskapen accounts
blir en lista över uppsättningar, eller en EntityCollection
, med varje uppsättning som en instans av en 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 efter varandra och kan innehålla många FetchXML-frågor.
Här är ett kodavsnitt av resultatet av föregående UFX fråga serialiserad till XML. Observera att vissa värden har metadata som ytterligare beskriver dem.
<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 direktiv tar ett XPath-uttrycket som väljer värden från aktuell uppsättning.
<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>
Resulterande uppsättning i XML:
<bag>
<first_account_name ufx-type="string">Fourth Coffee (sample)</first_acount_name>
</bag>
Den mest kraftfulla aspekten av en UFX fråga är möjligheten att dynamisk generera FetchXML baserat på indata.
I exemplet nedan söker vi efter konton med ett värde som tillhandahålls av användaren och är tillgänglig som en UFX uppsättning via XPath $input
variabeln. Observera UFX-direktiven om och värde 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 NameFilter
i indatauppsättningen innehåller %city%
skulle det producerade FetchXML-villkoret som körs av Dynamics 365 se ut så här.
<condition attribute="name" operator="like" value="%city%" />
Nycklar, värden och metadata
En UFX uppsättning innehåller nycklar och vissa värden med ytterligare metadata som beskriver dem.
Ett exempel kan vara ett värde av typen lookup (EntityReference)
. När en förfrågan från Dynamics 365 görs via FetchXML returneras det logiska namnet på entiteten och det formaterade visningsnamnet för posten. UFX uppsättningen bevarar denna ytterligare information som metadata kopplad till det primära värdet.
Serialiseras till JSON, en lookup
med metadata ser 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
Om du har data skriven i ett UFX uppsättning kan en UFX fråga se den i ett strukturerat format och använda XPath till att bläddra över data och välja värden från den.
Ett XPath-uttryck som anges i ett UFX-direktiv ser data i uppsättningen mycket liknande strukturen i uppsättningen i XML-serialiserade formulär. Men data lagras även i minnesinterna .NET-objekt (i instanser av Entity
och EntityCollection
-typer) och inte i XML-dokument.
Bilaga A: UFX typreferens
Obs! Alla UFX-typer stöder metadata ufx-type
och ufx-formatvalue
. Ytterligare metadata beskrivs bredvid varje typ i tabellen nedan.
UFX-namn | Attributtypkod | .NET namn | UFX-metadata |
---|---|---|---|
bool | Boolesk | Boolesk | |
heltal | Heltal | Int32 | |
lång | BigInt | Int64 | |
dubbel | Dubbel | Dubbel | |
decimaltal | Decimaltal | Decimaltal | |
datum och tid | DatumTid | DatumTid | |
guid | Uniqueidentifier | Guid | |
sträng | Anteckning | Sträng | |
belopp | Belopp | Belopp | |
alternativ | Plocklista | OptionSetValue | |
slå upp | Slå upp | EntityReference | ufx-logicalname |
uppsättning | Saknas | Entitet | ufx-id ufx-logicalname |
list | Saknas | EntityCollection | |
Saknas | Saknas | AliasedValue | ufx-aliasentity ufx-aliasattribute |
Bilaga B: UFX fråga direktiv
UFX direktiv kan användas på uppsättningsegenskaper och på XML-element i en FetchXML-fråga.
UFX uppsättning direktiv
Attribut | Value | Beskrivning |
---|---|---|
ufx:if |
XPath | Testar XPath-uttrycket och hanterar bara egenskapen bara om testet returnerar sant |
ufx:source |
fetch |
Kör inline <fetch> XML-element och tilldelar resultatet till egenskapen |
ufx:select |
XPath | Kör XPath-uttrycket och tilldelar resultatet till egenskapen När du hämtar en bag eller list kan en valfri underordnad bag i XML-formulär anges för att omvandla resultatet av XPath-uttrycket |
UFX FetchXML direktiv
Element | Attribut | Value | Beskrivning |
---|---|---|---|
Alla element | ufx:if |
XPath | Testar XPath-uttrycket och avger endast XML-elementet om dessa tester lyckas |
ufx:apply |
select |
XPath | Går genom över noduppsättningen som returneras av XPath-uttrycket och visar underordnade XML-element för varje nod |
ufx:value |
select |
XPath | Kör XPath-uttrycket och visar resultatet i det aktuella XML-elementet |
ufx:value |
attribute |
attributnamn | Tilldelar resultatet för XPath-uttryck till det angivna attributnamnet på det aktuella XML-elementet |
Bilaga C: UFX XPath-funktioner
UFX lägger till ett antal nya funktioner förutom de som finns inbyggda i XPath.
datetime()
- datetime(): Returnerar aktuell tid i UTC
list()
- list(bag | list, ...[uppsättning | lista]): Tar ett antal
bag
- ellerlist
-värden som indata och lägger samman dem till en endalist
lookup-to-list()
- lookup-to-list(lookup, ...[slå upp]): Tar ett antal
lookup
-värden, konverterar dem till enbag
medufx-id
ochufx-logicalname
metadatauppsättning och lägger samman dem till en endalist
option-to-list()
- option-to-list(option, ...[alternativ]): Tar ett antal
option
-värden och konverterar dem till enbag
med en endaoption
-egenskap och lägger samman dem till en endalist
order()
- order(list, string, bool): Beställer en lista med en egenskap i varje uppsättning. Egenskapen anges i argument 2, fallande anges i argument 3.
- order(list, list): Beställer en lista med flera sorteringsorder som anges som en lista i argument 2. Varje
bag
i andra listan kan ha enname
ochdescending
egenskap
iif()
- iif(any, any, any): Om argument 1 är sant, returneras argument 2, annars returneras argument 3
Bilaga D: UFX XPath-variabler
Namn | Beskrivning |
---|---|
$input | En bag finns för UFX frågan med inmatningsvärden |
$null | En konstant null. Välja $null på en egenskap tar bort egenskapen från uppsättningen |
$current | Referens till aktuell uppsättning bearbetas av UFX-frågan |
Se även
Förstå och anpassa resursmatchning i Universal Resource Scheduling
Universal Resource Scheduling utökningsbarhet – Viktig information