Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Universal FetchXML (UFX) er et avansert spørringsspråk som lar deg spørre etter data ved hjelp av dynamisk FetchXML, forme og klargjøre de resulterende dataene for forbruk av Universal Resource Scheduling (URS)- løsningen. Med dette spørringsspråket kan du opprette egendefinerte spørringer for å tilpasse og utvide filtrene for planleggingstavlen og planleggingsassistenten for å dekke organisasjonens unike forretningsbehov.
UFX består av to komponenter: UFX-veske og UFX-spørring.
Enkel UFX-veske
En UFX-pose inneholder statiske data. I minnet modellerer den en ordbok med nøkler og verdier. Den kan serialiseres til JSON og XML. Når dataene er skrevet, kan en UFX-spørring spørre etter data fra den, og klientgrensesnittet kan binde seg til den.
Av praktiske årsaker og ytelsesgrunner implementeres den minneinterne posen på toppen av Dynamics 365 Apps SDK-objektet Entity .
Prøvepose som inneholder to verdier.
Til minne:
| nøkkel | verdi | type |
|---|---|---|
| navn | John | streng |
| alder | 36 | Int |
I JSON:
{
"name": "John",
"age": 36
}
I XML:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
UFX-støttede typer
En UFX-pose kan inneholde verdier av mange typer. De er kategorisert i tre typeklasser:
| Kategori | Verdi |
|---|---|
| Enkle typer |
bool (Boolean), int (Int32), , long (Int64), double (Double)decimal (Decimal)datetime (DateTime)guid (Guid)string (String)Dynamics 365-spesifikke enkle typer: money (Money), option (OptionSet), lookup (EntityReference) |
| Andre vesker | bag (Entity) |
| Liste over vesker | list (EntityCollection) |
Her er et eksempel på en JSON-pose som inneholder flere 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" }
]
}
Den samme vesken 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-spørringer
UFX-spørringer skrives som XML-baserte UFX-vesker. Egenskaper i posen kan inneholde UFX-direktiver for å spørre etter data dynamisk. En UFX-spørring kjøres på minneobjekter, ikke XML. Bare direktivene er skrevet i XML. Utdataene kan serialiseres til JSON eller XML.
Følgende UFX-spørring definerer egenskapen accounts i posen med UFX-direktivet source . Som et resultat av dette kjører Dynamics 365 den innebygde FetchXML, og accounts fyller ut egenskapen med en liste over poser. En EntityCollection der hver pose representerer en individuell forretningsforbindelsesoppføring fra 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-spørring behandles sekvensielt og kan inneholde mange FetchXML-spørringer.
Her er et utdrag av resultatet av den forrige UFX-spørringen serialisert til XML. Observer at noen verdier har metadata som beskriver dem ytterligere.
<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 et XPath-uttrykk som velger verdier fra gjeldende pose.
<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 resulterende posen i XML:
<bag>
<first_account_name ufx-type="string">Fourth Coffee (sample)</first_acount_name>
</bag>
Det kraftigste aspektet ved en UFX-spørring er absolutt dens evne til dynamisk å generere FetchXML basert på inngangsdata.
I eksemplet nedenfor søker vi etter kontoer etter en verdi som er angitt av brukeren og tilgjengelig som en UFX-pose via XPath-variabelen $input . Legg merke til UFX if - og verdidirektivene 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>
Hvis egenskapen NameFilter i inndataposen inneholdt %city% den produserte FetchXML-betingelsen som kjøres av Dynamics 365, vil den se slik ut.
<condition attribute="name" operator="like" value="%city%" />
Nøkler, verdier og metadata
En UFX-pose inneholder nøkler og verdier, der noen verdier har flere metadata for å beskrive dem.
Et eksempel kan være en verdi av typen lookup (EntityReference). Når den spørres fra Dynamics 365 til FetchXML, returnerer den det logiske navnet på enheten og det formaterte visningsnavnet for oppføringen. UFX-posen bevarer denne tilleggsinformasjonen som metadata knyttet til primærverdien.
Serialisert til JSON, ser en lookup med metadata slik ut:
{
"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 over Dynamics 365-data
Når dataene i en UFX-pose er skrevet, kan en UFX-spørring se dem i et strukturert format og bruke XPath til å krysse over dataene og velge verdier fra dem.
Et XPath-uttrykk som er angitt i et UFX-direktiv, ser dataene i posen på samme måte som strukturen til posen i XML-serialisert form. Dataene lagres imidlertid i NET-objekter i minnet (i forekomster av Entity og EntityCollection typer) og ikke i XML-dokumenter.
UFX-typereferanse
Alle UFX-typer støtter ufx-type og ufx-formatvalue metadata. Ytterligere metadata er beskrevet ved siden av hver type.
| UFX-navn | Kode for attributttype | .NET-navn | UFX-metadata |
|---|---|---|---|
| Bool | boolsk | boolsk | |
| Int | Heltall | Int32 | |
| lang | BigInt | Int64 | |
| dobbel | Dobbel | Dobbel | |
| desimal | Desimal | Desimal | |
| datetime | Date/klokkeslett | Date/klokkeslett | |
| Guid | Unik identifikator | Guid | |
| streng | Notat | Streng | |
| penger | Penger | Penger | |
| opsjon | Valgliste | OpsjonssettVerdi | |
| oppslag | Oppslag | EntityReference | ufx-logicalname |
| pose | I/T | Enhet | ufx-idufx-logicalname |
| liste | I/T | Samling av enheter | |
| I/T | I/T | Aliased-verdi | ufx-aliasentityufx-aliasattribute |
UFX-spørringsdirektiver
UFX-direktiver kan brukes på poseegenskaper og på XML-elementer i en FetchXML-spørring.
UFX veske direktiver
| Attributt | Verdi | Beskrivelse |
|---|---|---|
ufx:if |
XPath | Tester XPath-uttrykket og behandler bare egenskapen hvis testen returnerer sann |
ufx:source |
fetch |
Kjører det innebygde <fetch> XML-elementet og tilordner resultatet til egenskapen |
ufx:select |
XPath | Kjører XPath-uttrykket og tilordner resultatet til egenskapen Når spørring etter en bag eller list en valgfri underordnet bag i XML-skjema kan angis for å transformere resultatet av XPath-uttrykket |
UFX FetchXML-direktiver
| Element | Attributt | Verdi | Beskrivelse |
|---|---|---|---|
| Alle elementer | ufx:if |
XPath | Tester XPath-uttrykket og sender bare XML-elementet hvis testene lykkes |
ufx:apply |
select |
XPath | Sløyfer over nodesettet som returneres av XPath-uttrykket, og sender ut de underordnede XML-elementene én gang for hver node |
ufx:value |
select |
XPath | Kjører XPath-uttrykket og skriver ut resultatet i det gjeldende XML-elementet |
ufx:value |
attribute |
Navn på attributt | Tilordner XPath-uttrykksresultatet til det angitte attributtnavnet på gjeldende XML-element |
UFX XPath-funksjoner
UFX legger til mange nye funksjoner i tillegg til de som er tilgjengelige i XPath.
datoklokkeslett()
- datetime(): Returnerer gjeldende klokkeslett i UTC
liste()
- liste(veske | liste, ... [bag | list]): Tar et antall
bageller-verdierlistsom inndata og flater dem ut til ett enkeltlist
slå opp til liste()
- søkeopp-til-liste(oppslag, ... [lookup]): Tar en rekke
lookupverdier, konverterer hver av dem til abagmedufx-idmetadatasettet ogufx-logicalnameflater dem ut til ett enkeltlist
alternativ-til-liste()
- alternativ-til-liste(alternativ, ... [option]): Tar en rekke
optionverdier, konverterer hver av dem til enbagmed én enkeltoptionegenskap og flater dem ut til én enkeltlist
rekkefølge()
- order(list, string, bool): Bestiller en liste etter en egenskap i hver pose. Egenskapen er angitt i argument 2, synkende er angitt i argument 3.
- ordre(liste, liste): Sorter en liste etter flere sorteringsrekkefølger angitt som en liste i argument 2. Hver
bagi den andre listen kan ha ennameogdescendingegenskap
iif()
- iif(any, any, any): Hvis argument 1 er sant, returnerer argument 2, ellers returnerer argument 3
UFX XPath-variabler
| Navn | Beskrivelse |
|---|---|
| $input | A bag tilgjengelig for UFX-spørringen med inndataverdier |
| $null | En nullkonstant. Hvis du velger $null på en eiendom, fjernes egenskapen fra posen |
| $current | Referanse til gjeldende pose UFX-spørringen behandler |
Flere ressurser
Forstå og tilpasse ressurssamsvar i Universal Resource Scheduling