Pastaba.
Prieigai prie šio puslapio reikalingas įgaliojimas. Galite bandyti prisijungti arba pakeisti katalogus.
Prieigai prie šio puslapio reikalingas įgaliojimas. Galite bandyti pakeisti katalogus.
"Universal FetchXML" (UFX) yra išplėstinė užklausų kalba, leidžianti užklausti duomenis naudojant dinaminį "FetchXML", formuoti ir paruošti gautus duomenis naudoti " Universal Resource Scheduling" (URS) sprendimui. Ši užklausos kalba leidžia kurti pasirinktines užklausas, kad galėtumėte tinkinti ir išplėsti planavimo lentos ir planavimo pagalbinės priemonės filtrus, kad jie atitiktų unikalius organizacijos verslo poreikius.
UFX susideda iš dviejų komponentų: UFX maišelio ir UFX užklausos.
Paprastas UFX krepšys
UFX maišelyje yra statinio tipo duomenys. Atmintyje jis modeliuoja žodyną su raktais ir reikšmėmis. Jis gali būti serijinis JSON ir XML. Įvedę duomenis, UFX užklausa gali pateikti užklausą dėl duomenų iš jų, o kliento vartotojo sąsaja gali su ja susieti.
Praktiniais ir efektyvumo sumetimais atminties krepšys įdiegiamas ant "Dynamics 365" programų SDK Entity objekto.
Ėminio maišas, kuriame yra dvi vertės.
Atmintyje:
| raktas | reikšmė | tipas |
|---|---|---|
| pavadinimas | John | eilutė |
| amžius | 36 | sveik. sk. |
In JSON:
{
"name": "John",
"age": 36
}
XML formatu:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
UFX palaikomi tipai
UFX maišelyje gali būti įvairių tipų vertės. Jie skirstomi į tris tipų klases:
| Kategorija | Reikšmė |
|---|---|
| Paprasti tipai |
bool (Boolean), int (Int32), , long (Int64), double (Double)decimal (Decimal), , datetime (DateTime), guid (Guid)string (String)"Dynamics 365" konkretūs paprasti tipai: money (Money), option (OptionSet), lookup (EntityReference) |
| Kiti krepšiai | bag (Entity) |
| Krepšių sąrašas | list (EntityCollection) |
Štai pavyzdinis JSON krepšys, kuriame yra daugiau tipų:
{
"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" }
]
}
Tas pats maišelis 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 užklausos
UFX užklausos rašomos kaip XML pagrįsti UFX maišeliai. Maišelio ypatybėse gali būti UFX direktyvų , kad būtų galima dinamiškai užklausti duomenų. UFX užklausa vykdoma atmintyje esančiuose objektuose, o ne XML. Tik direktyvos yra parašytos XML formatu. Jo išvestis gali būti serializuota į JSON arba XML.
Ši UFX užklausa apibrėžia accounts maišelyje esančią ypatybę su source UFX direktyva. Dėl to "Dynamics 365" vykdo įdėtąjį "FetchXML", užpildydama accounts ypatybę maišelių sąrašu. Kur EntityCollection kiekvienas krepšys reiškia atskirą "Dynamics 365" kliento įrašą.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
</bag>
UFX užklausa apdorojama nuosekliai ir joje gali būti daug "FetchXML" užklausų.
Štai ankstesnės UFX užklausos rezultato fragmentas, suskirstytas į XML. Stebėkite, kad kai kurios vertės turi metaduomenis, toliau juos apibūdinančius.
<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 direktyvoje naudojama XPath išraiška, kuri parenka reikšmes iš dabartinio maišelio.
<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>
Gautas maišelis XML:
<bag>
<first_account_name ufx-type="string">Fourth Coffee (sample)</first_acount_name>
</bag>
Žinoma, galingiausias UFX užklausos aspektas yra jos galimybė dinamiškai generuoti "FetchXML", remiantis įvesties duomenimis.
Šiame pavyzdyje ieškome sąskaitų pagal vartotojo pateiktą vertę ir prieinamą kaip UFX maišelį per XPath $input kintamąjį. Atkreipkite dėmesį į UFX if ir vertės direktyvas ant elemento 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>
Jei įvesties maišelio ypatybėje NameFilter buvo %city% sukurta "FetchXML" sąlyga, kurią vykdo "Dynamics 365", atrodys taip.
<condition attribute="name" operator="like" value="%city%" />
Raktai, reikšmės ir metaduomenys
UFX maišelyje yra raktai ir reikšmės, kur kai kurios reikšmės turi daugiau metaduomenų joms apibūdinti.
Pavyzdys gali būti tipo lookup (EntityReference)reikšmė . Kai užklausiama iš "Dynamics 365" per "FetchXML", pateikiamas loginis objekto pavadinimas ir suformatuotas rodomas įrašo pavadinimas. UFX maišelyje ši papildoma informacija saugoma kaip metaduomenys, pridėti prie pirminės vertės.
Serializuotas į JSON, a lookup su metaduomenimis atrodo taip:
{
"primarycontactid": "7e6e39dd-34a1-e611-8111-00155d652f01",
"primarycontactid@ufx-type": "lookup",
"primarycontactid@ufx-logicalname": "contact",
"primarycontactid@ufx-formatvalue": "Susanna Stubberod (sample)"
}
XML formatu:
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
XPath per "Dynamics 365" duomenis
Įvedus duomenis į UFX maišą, UFX užklausa gali juos matyti struktūriniu formatu ir naudoti XPath, kad pereitų duomenis ir iš jų pasirinktų reikšmes.
XPath išraiška, nurodyta UFX direktyvoje, mato duomenis maišelyje, panašius į maišelio struktūrą XML serijos forma. Tačiau duomenys saugomi atminties .NET objektuose (pvz., ir tipuose EntityEntityCollection ), o ne XML dokumentuose.
UFX tipo nuoroda
Visi UFX tipai palaiko ufx-type ir ufx-formatvalue metaduomenis. Papildomi metaduomenys aprašomi šalia kiekvieno tipo.
| UFX pavadinimas | Atributo tipo kodas | .NET pavadinimas | UFX metaduomenys |
|---|---|---|---|
| bool | Bulio logikos | Bulio logikos | |
| sveik. sk. | Sveikasis skaičius | Int32 | |
| ilgai | BigInt | Int64 | |
| dvigubas | Dviguba | Dviguba | |
| dešimtainis | Dešimtainis skaičius | Dešimtainis skaičius | |
| datetime | Data ir laikas | Data ir laikas | |
| Guid | Unikalus identifikatorius | GUID | |
| eilutė | Atmintinė | Eilutės | |
| pinigai | Pinigai | Pinigai | |
| Parinktį | Išrinkimo sąrašas | OptionSetValue | |
| Peržvalgos | Peržvalga | EntityReference | ufx-logicalname |
| krepšys | Netaikoma | Subjektas | ufx-idufx-logicalname |
| sąrašas | Netaikoma | EntityCollection | |
| Netaikoma | Netaikoma | AliasedValue | ufx-aliasentityufx-aliasattribute |
UFX užklausos direktyvos
UFX direktyvas galima naudoti maišelio ypatybėms ir "FetchXML" užklausos XML elementams.
UFX maišelių direktyvos
| Atributas | Reikšmė | Aprašas |
|---|---|---|
ufx:if |
„XPath“ | Tikrina XPath išraišką ir apdoroja ypatybę tik tuo atveju, jei testas pateikia true |
ufx:source |
fetch |
Vykdo įdėtąjį <fetch> XML elementą ir priskiria rezultatą ypatybei |
ufx:select |
„XPath“ | Vykdo XPath išraišką ir priskiria rezultatą ypatybei Kai užklausoje XML bag formoje galima nurodyti arba list pasirinktinį antrinį bag elementą, kad būtų galima transformuoti XPath išraiškos rezultatą |
UFX FetchXML direktyvos
| Elementas | Atributas | Reikšmė | Aprašas |
|---|---|---|---|
| Visi elementai | ufx:if |
„XPath“ | Tikrina XPath išraišką ir skleidžia XML elementą tik tuo atveju, jei bandymai pavyksta |
ufx:apply |
select |
„XPath“ | Kartoja per mazgų rinkinį, kurį grąžina XPath išraiška, ir išveda antrinius XML elementus vieną kartą kiekvienam mazgui |
ufx:value |
select |
„XPath“ | Vykdo XPath išraišką ir išveda rezultatą dabartiniame XML elemente |
ufx:value |
attribute |
atributo pavadinimas | Priskiria XPath išraiškos rezultatą nurodytam dabartinio XML elemento atributo pavadinimui |
UFX XPath funkcijos
UFX prideda daug naujų funkcijų, be tų, kurios yra XPath.
datetime()
- datetime(): pateikia dabartinį laiką UTC
sąrašas()
- sąrašas(krepšys | sąrašas, ... [krepšys | sąrašas]): paima skaičių
bagarba reikšmių kaiplistįvestį ir išlygina jas į vienąlist
peržvalga į sąrašą()
- peržvalga į sąrašą(peržvalga, ... [peržvalga]): paima keletą
lookupreikšmių, konvertuoja kiekvieną iš jų į abagsuufx-idmetaduomenų rinkiniu irufx-logicalnameišlygina jas į vienąlist
parinktis į sąrašą()
- parinktis-į sąrašą(parinktis, ... [option]): paima keletą
optionreikšmių, kiekvieną iš jų konvertuoja į vienąbagoptionypatybę ir išlygina į vienąlist
Užsakymas()
- order(list, string, bool): Užsako sąrašą pagal ypatybę kiekviename maiše. Ypatybė nurodyta 2 argumente, mažėjimo tvarka nurodyta 3 argumente.
- tvarka (sąrašas, sąrašas): Išdėstykite sąrašą pagal kelias rūšiavimo tvarkas, nurodytas kaip sąrašas 2 argumente. Kiekvienas
bagiš antrojo sąrašo gali turėti anameirdescendingnuosavybę
IIF()
- iif(bet koks, bet koks, bet koks): jei argumentas 1 yra teisingas, grąžina argumentą 2, kitu atveju pateikia argumentą 3
UFX XPath kintamieji
| Pavadinimas | Aprašas |
|---|---|
| $input | A bag pasiekiamas UFX užklausai su įvesties reikšmėmis |
| $null | Nulinė konstanta. Pasirinkus $null ypatybę, nuosavybė pašalinama iš maišo |
| $current | Nuoroda į dabartinį krepšelį, kurį apdoroja UFX užklausa |
Papildomi ištekliai
Išteklių atitikimo supratimas ir tinkinimas naudojant "Universal Resource Scheduling"