A Universal Resource Scheduling kibővítése a Universal FetchXML használatával
Az UFX egy speciális lekérdezési nyelv, amely lehetővé teszi, hogy lekérdezzen adatokat dinamikus FetchXML használatával, és az eredményül kapott adatok előkészítse a Universal Resource Scheduling (URS) megoldás általi felhasználásra. A lekérdezési nyelv lehetővé teszi, hogy létre hozza egyéni lekérdezések testreszabását és bővítése az ütemezési táblát és az ütemezési segéd szűrőket a szervezet egyedi üzleti igényei szerint.
Az UFX összetevőből áll, UFX Bag és UFX Query.
Egyszerű UFX Bag
Egy UFX Bag statikus beírt adatokat tartalmaz. Memóriában kulcsok és értékek szótáraként jelenik meg. Szerializálható: JSON és XML. A beírt adatok lehetővé teszi, hogy egy UFX Query lekérdezzen adatokat és az ügyfél felhasználói felület kapcsolódjon.
A memóriában levő zsák megvalósítása a Dynamics 365 apps SDK
Entity
objektumon van gyakorlati és a teljesítmény okokból.
Példa zsák két értékkel.
Memóriában levő:
kulcs | érték | típus |
---|---|---|
Név | John | karakterlánc |
kor | 36 | egész |
A JSON-ban:
{
"name": "John",
"age": 36
}
XML-ben:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
UFX támogatott típusok
Egy UFX Bag különféle értéket tartalmazhat. Kategorizálva vannak három típusosztályba:
Kategória | Érték |
---|---|
Egyszerű típusok | bool (Boolean) , int (Int32) , long (Int64) , double (Double) , decimal (Decimal) , datetime (DateTime) , guid (Guid) , string (String) Dynamics 365 specifikus egyszerű típusok: money (Money) , option (OptionSet) , lookup (EntityReference) |
Egyéb zsákok | bag (Entity) |
Zsákok listája | list (EntityCollection) |
Íme egy példa JSON zsák további típusokat tartalmazó:
{
"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" }
]
}
Az XML-ben ugyanaz a zsák:
<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>
A UFX Queries bemutatása
Az UFX Queries XML alapú UFX zsákokként vannak megírva. A zsákokban a tulajdonságok tartalmazhatnak UFX irányelveket az adatok dinamikus lekérdezéséhez. Az UFX Query végrehajtása a memóriában tárolt objektumokon, nem XML-en történik. Csak az irányelvek készülnek XML-ben. A kimenete szerializálható JSON vagy XML formátumba.
A következő UFX Query határozza meg az accounts
tulajdonságot a zsákban a source
UFX utasítással. Ennek eredményeként a Dynamics 365-ben végrehajtódik a beágyazott FetchXML és az accounts
tulajdonság zsákok listája lesz vagy EntityCollection
, ahol mindegyik zsák a Dynamics 365 egy partnerbejegyzésének egy példánya.
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
<accounts ufx:source="fetch">
<fetch top="10">
<entity name="account" />
</fetch>
</accounts>
</bag>
UFX Query egymás után következő feldolgozású, és sok FetchXML-lekérdezéset tartalmazhat.
Íme egy szövegminta az előző XML-be szerializált UFX lekérdezés eredményéből. Tekintse meg, hogy néhány értéket további metaadatok írnak le.
<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>
A select
UFX irányelv veszi egy XPath kifejezést, amely értékeket jelöli ki a jelenlegi zsákból.
<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>
Az eredmény zsák XML-ben:
<bag>
<first_account_name ufx-type="string">Fourth Coffee (sample)</first_acount_name>
</bag>
Az UFX lekérdezés egyértelműen leghatékonyabb eleme, az a képesség, hogy a bevitt adatok alapján FetchXML-t dinamikusan létrehoz.
Az alábbi példában keresésünk partnereket a felhasználó által megadott érték alapján az XPath keresztül egy UFX zsákokban formájában érhetők el $input
változó. Figyelje meg a UFX ha és érték irányelveket a condition
elemen.
<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>
Ha a NameFilter
tulajdonság a bemeneti zsákban tartalmazza a %city%
elemet, a Dynamics 365 által végrehajtott gyártott FetchXML feltétel így néz ki.
<condition attribute="name" operator="like" value="%city%" />
Kulcsok, értékek és metaadatok
Egy UFX Bag kulcsokat és értékeket tartalmaz, és néhány értékek rendelkezik további, az értéket leíró metaadatokkal.
Példa lehet egy lookup (EntityReference)
típusú érték. Amikor a Dynamics 365 alkalmazásból FetchXML-en keresztül lekérdezik, az entitás logikai nevét, valamint formázott megjelenítendő nevét adja vissza bejegyzésként. A UFX Bag megőrzi a kiegészítő információkat az elsődleges értékhez csatolt metaadatokként.
Szerializálva JSON-be, egy lookup
metaadatokkal így néz ki:
{
"primarycontactid": "7e6e39dd-34a1-e611-8111-00155d652f01",
"primarycontactid@ufx-type": "lookup",
"primarycontactid@ufx-logicalname": "contact",
"primarycontactid@ufx-formatvalue": "Susanna Stubberod (sample)"
}
XML-ben:
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
XPath a Dynamics 365 adatok felett
Azáltal, hogy az adatok egy UFX zsákokban vannak típussal ellátva, a UFX Query strukturált formátumban látja őket, és az XPath bejárja az adatokat, és kiválasztja belőlük az értékeket.
A UFX irányelvben megadott XPath kifejezés hasonlóan látja a zsákban az adatokat a zsák szerkezetéhez XML-szerializált formában. Azonban az adatokat a memóriában .NET objektumokként tárolja (Entity
és EntityCollection
típusok példányaiban), és nem az XML-dokumentumokban.
A. függelék: UFX-típus referenica
Megjegyzés: Minden UFX-típus támogatja a ufx-type
és ufx-formatvalue
metaadatokat. További metaadat-típusok az alábbi táblázatban ismertetettek a típusok mellett.
UFX-név | Attribútumtípus kódja | .NET-név | UFX-metaadat |
---|---|---|---|
bool | Logikai | Logikai | |
egész | Egész | Int32 | |
long | BigInt | Int64 | |
double | Dupla | Dupla | |
tizedesjegy | Tizedes | Tizedes | |
dátumidő | DátumIdő | DátumIdő | |
guid | Uniqueidentifier | Guid | |
karakterlánc | Feljegyzés | Karakterlánc | |
pénznem | Pénz | Pénz | |
option | Választási lista | OptionSetValue | |
keresés | Keresés | EntityReference | ufx-logicalname |
bag | n.a. | Entitás | ufx-id ufx-logicalname |
lista | n.a. | EntityCollection | |
n.a. | n.a. | AliasedValue | ufx-aliasentity ufx-aliasattribute |
B. függelék: UFX lekérdezési irányelvek
Az UFX-irányelvek használhatók a zsákoktulajdonságokon és a FetchXML-lekérdezés XML-elemein.
UFX Bag irányelvek
Attribútum | Value | Leírás |
---|---|---|
ufx:if |
XPath | XPath kifejezés tesztelése, és csak akkor dolgozza fel a tulajdonságot, ha a teszt eredménye igaz |
ufx:source |
fetch |
Végrehajtja a beágyazott <fetch> XML-elemet, és hozzárendeli az eredményt a tulajdonsághoz |
ufx:select |
XPath | Végrehajtja a beágyazott XPath kifejezést, és hozzárendeli az eredményt a tulajdonsághoz Lekérdezésekor egy bag vagy list esetén egy választható alárendelt bag XML-ben lehet megadni az XPath kifejezés eredményének átalakításához |
UFX FetchXML irányelvek
Elem | Attribútum | Value | Leírás |
---|---|---|---|
Minden elem | ufx:if |
XPath | Az XPath kifejezésen teszteket végez, és csak a tesztek sikere esetén bocsátja ki az XML-elemet. |
ufx:apply |
select |
XPath | Átnézi az XPath kifejezés által visszaadott nodesetet, és exportálja az alárendelt XML-elemeket egyszer mindegyik csomópontjára vonatkozóan |
ufx:value |
select |
XPath | Végrehajtja az XPath kifejezést, és exportálja az eredményeket az aktuális XML-elembe |
ufx:value |
attribute |
attribútumnév | XPath kifejezés eredményét hozzárendeli a megadott attribútum nevét az aktuális XML-elemen |
C függelék: UFX XPath függvények
Az UFX felvesz számos új függvényt az XPath natív függvénykészlete mellé.
datetime()
- datetime(): UTC-ben adja meg az aktuális időt
list()
- list(bag | list, ...[bag | list]): Vesz több
bag
vagylist
bemeneti értéket, és egyetlenlist
értékbe olvasztja össze őket
lookup-to-list()
- lookup-to-list(lookup, ...[lookup]): vesz számos
lookup
értékeket, konvertálja mindet egybag
értékbe beállítottufx-id
ésufx-logicalname
metaadatokkal, és egyetlenlist
értékbe olvasztja össze őket
option-to-list()
- option-to-list(option, ...[option]): vesz számos
option
értékeket, konvertálja mindet egybag
értékbe egyetlenoption
tulajdonsággal, és egyetlenlist
értékbe olvasztja össze őket
order()
- order(list, string, bool): listájá rendez a zsákokban tulajdonság szerint. A tulajdonság 2. argumentumban van megadva, a csökkenő argumentum a 3. argumentumban van megadva.
- order(list, list): lista rendezése több rendezési szempont szerint, amelyek a 2. argumentumban listaként vannak megadva. Minden egyes
bag
a második listában rendelkezhetname
ésdescending
tulajdonsággal
iif()
- iif(any, any, any): az 1. argumentum teljesülésekor a 2. argumentumot adja eredményül, egyébként visszaadja a 3. argumentumot
D. függelék: UFX XPath változók
Név | Leírás |
---|---|
$input | Egy bag elérhető el a UFX lekérdezésben bemeneti értékekkel |
$null | Null állandó. A $null kijelölése egy tulajdonságon eltávolítja a tulajdonságot a zsákokból |
$current | Az aktuális zsákra hivatkozás, amelyet az UFX lekérdezés feldolgozott |
Kapcsolódó információk
Az erőforrás-egyeztetés megértése és testreszabása a Universal Resource Scheduling alkalmazásban
Universal Resource Scheduling bővíthetőség kibocsátási megjegyzések
Hinweis
Megosztja velünk a dokumentációja nyelvi preferenciáit? Rövid felmérés elvégzése. (ne feledje, hogy ez a felmérés angol nyelvű)
A felmérés elvégzése körülbelül hét percet vesz igénybe. Semmilyen személyes adatot nem gyűjtünk (adatvédelmi nyilatkozat).
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: