הערה
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות להיכנס או לשנות מדריכי כתובות.
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות לשנות מדריכי כתובות.
Universal FetchXML (UFX) היא שפת שאילתות מתקדמת המאפשרת לך לבצע שאילתה על נתונים באמצעות FetchXML דינאמי, לעצב ולהכין את הנתונים המתקבלים לצריכה על-ידי פתרון Universal Resource Scheduling (URS). שפת שאילתות זו מאפשרת לך ליצור שאילתות מותאמות אישית כדי להתאים אישית ולהרחיב את לוח הזמנים ואת מסנני מסייע לוחות הזמנים כדי לענות על הצרכים העסקיים הייחודיים של הארגון.
UFX מורכב משני רכיבים תיק UFX ושאילתת UFX.
תיק UFX פשוט
שקית UFX מכילה נתונים סטטיים. בזיכרון, הוא מדגמן מילון עם מפתחות וערכים. ניתן לסדר אותו ל-JSON ו-XML. הקלדת הנתונים מאפשרת לשאילתת UFX לבצע שאילתה על נתונים ממנה, ולממשק המשתמש של הלקוח לאגד אליה.
מסיבות מעשיות ומסיבות ביצועים, תיק הזיכרון מיושם על גבי אובייקט ה- SDK Entity של יישומי Dynamics 365.
תיק לדוגמה המכיל שני ערכים.
לזכר:
| מפתח | ערך | סוג נתונים |
|---|---|---|
| שם | שי | מחרוזת |
| גיל | 36 | ת.ת |
ב-JSON:
{
"name": "John",
"age": 36
}
ב-XML:
<bag>
<name ufx-type="string">John</name>
<age ufx-type="int">36</age>
</bag>
סוגים נתמכים של UFX
תיק UFX יכול להכיל ערכים מסוגים רבים. הם מסווגים לשלוש מחלקות סוג:
| קטגוריה | ערך |
|---|---|
| סוגים פשוטים |
bool (Boolean), int (Int32), long (Int64), double (Double), decimal (Decimal)datetime (DateTime), guid (Guid),string (String)סוגים פשוטים ספציפיים של Dynamics 365: money (Money), option (OptionSet), lookup (EntityReference) |
| תיקים אחרים | bag (Entity) |
| רשימת תיקים | list (EntityCollection) |
הנה שקית JSON לדוגמה המכילה סוגים נוספים:
{
"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" }
]
}
אותו תיק ב-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
שאילתות UFX נכתבות כשקיות UFX מבוססות XML. מאפיינים בתיק יכולים להכיל הוראות UFX לביצוע שאילתות על נתונים באופן דינאמי. שאילתת UFX מתבצעת באובייקטים בזיכרון, לא ב-XML. רק ההוראות כתובות ב-XML. ניתן לסדר את הפלט שלו ל-JSON או XML.
שאילתת UFX הבאה מגדירה את המאפיין accounts בתיק עם source הוראת UFX. כתוצאה מכך, Dynamics 365 מבצע את ה- FetchXML המוטבע, ומאכלס את accounts המאפיין ברשימה של תיקים. כאשר EntityCollection כל תיק מייצג רשומת תיק לקוח בודדת מ- 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>
שאילתת UFX מעובדת ברצף ויכולה להכיל שאילתות FetchXML רבות.
הנה קטע מהתוצאה של שאילתת ה-UFX הקודמת בסדרה ל-XML. שימו לב שלערכים מסוימים יש מטא-נתונים המתארים אותם עוד יותר.
<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>
הוראת UFX select מקבלת ביטוי XPath שבוחר ערכים מהתיק הנוכחי.
<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>
התיק המתקבל ב-XML:
<bag>
<first_account_name ufx-type="string">Fourth Coffee (sample)</first_acount_name>
</bag>
אין ספק שההיבט החזק ביותר של שאילתת UFX הוא היכולת שלה ליצור באופן דינמי FetchXML על סמך נתוני קלט.
בדוגמה הבאה, אנו מחפשים חשבונות לפי ערך שסופק על ידי המשתמש וזמין כתיק UFX דרך המשתנה XPath $input . שים לב להוראות ה-UFX ifו-value על האלמנט 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>
אם המאפיין בתיק הקלט NameFilter הכיל %city% את התנאי FetchXML שהופק, שבוצע על-ידי Dynamics 365 ייראה כך.
<condition attribute="name" operator="like" value="%city%" />
מפתחות, ערכים ומטה-נתונים
תיק UFX מכיל מפתחות וערכים, כאשר לערכים מסוימים יש יותר מטא-נתונים כדי לתאר אותם.
דוגמה יכולה להיות ערך מסוג lookup (EntityReference). כאשר מתבצעת שאילתה מ- Dynamics 365 דרך FetchXML, היא מחזירה את השם הלוגי של הישות ואת שם התצוגה המעוצב של הרשומה. שקית UFX שומרת על מידע נוסף זה כמטא-נתונים המצורפים לערך הראשי.
בסדרה ל-JSON, a lookup עם מטא-נתונים נראה כך:
{
"primarycontactid": "7e6e39dd-34a1-e611-8111-00155d652f01",
"primarycontactid@ufx-type": "lookup",
"primarycontactid@ufx-logicalname": "contact",
"primarycontactid@ufx-formatvalue": "Susanna Stubberod (sample)"
}
ב-XML:
<primarycontactid ufx-type="lookup" ufx-formatvalue="Susanna Stubberod (sample)" ufx-logicalname="contact">7e6e39dd-34a1-e611-8111-00155d652f01</primarycontactid>
XPath על נתוני Dynamics 365
הקלדת הנתונים בתיק UFX, מאפשרת לשאילתת UFX לראות אותם בפורמט מובנה ולהשתמש ב-XPath כדי לעבור על הנתונים ולבחור ערכים מתוכם.
ביטוי XPath שצוין בהנחיית UFX רואה את הנתונים בתיק בדומה למבנה התיק בצורה סידורית XML. עם זאת, הנתונים מאוחסנים באובייקטי .NET בזיכרון (במופעים של Entity וסוגים EntityCollection ) ולא במסמכי XML.
הפניה לסוג UFX
כל סוגי ה-UFX תומכים במטא ufx-typeufx-formatvalue נתונים. מטא-נתונים נוספים מתוארים ליד כל סוג.
| שם UFX | קוד סוג תכונה | שם .NET | מטא נתונים של UFX |
|---|---|---|---|
| בול | בוליאני | בוליאני | |
| ת.ת | מספר שלם | אינט 32 | |
| ארוך | ביגנט | אינט 64 | |
| כפול | כפול | כפול | |
| עשרוני | עשרוני | עשרוני | |
| תאריך ושעה | תאריך ושעה | תאריך ושעה | |
| GUID | מזהה ייחודי | GUID | |
| מחרוזת | תזכיר | מחרוזת | |
| כסף | כסף | כסף | |
| אפשרות | רשימת בחירה | OptionSetValue | |
| בדיקת מידע | בדיקת מידע | EntityReference | ufx-logicalname |
| תיק | לא ישים | ישות | ufx-idufx-logicalname |
| רשימה | לא ישים | EntityCollection | |
| לא ישים | לא ישים | כינוי ערך | ufx-aliasentityufx-aliasattribute |
הוראות שאילתות UFX
ניתן להשתמש בהוראות UFX על מאפייני תיק ועל רכיבי XML של שאילתת FetchXML.
הנחיות שקיות UFX
| תכונה | ערך | תיאור |
|---|---|---|
ufx:if |
XPath | בדיקת ביטוי XPath ועיבוד המאפיין רק אם הבדיקה מחזירה true |
ufx:source |
fetch |
מפעיל את רכיב ה- XML המוטבע <fetch> ומקצה את התוצאה למאפיין |
ufx:select |
XPath | ביצוע ביטוי XPath והקצאת התוצאה למאפיין בעת ביצוע שאילתה עבור bag צאצא או list צאצא bag אופציונלי בטופס XML ניתן לציין כדי להמיר את התוצאה של ביטוי XPath |
הוראות UFX FetchXML
| אלמנט | תכונה | ערך | תיאור |
|---|---|---|---|
| כל האלמנטים | ufx:if |
XPath | בודק את ביטוי XPath ופולט את רכיב ה- XML רק אם הבדיקות מצליחות |
ufx:apply |
select |
XPath | לולאה מעל ערכת הצומת המוחזרת על-ידי ביטוי XPath ומוציאה את רכיבי ה-XML הצאצאים פעם אחת עבור כל צומת |
ufx:value |
select |
XPath | מבצע את ביטוי XPath ומוציא את התוצאה ברכיב XML הנוכחי |
ufx:value |
attribute |
שם תכונה | הקצאת תוצאת ביטוי XPath לשם התכונה שצוינה ברכיב ה- XML הנוכחי |
פונקציות UFX XPath
UFX מוסיף פונקציות חדשות רבות בנוסף לאלו הזמינות באופן מקורי ב-XPath.
datetime()
- datetime(): החזרת השעה הנוכחית ב- UTC
רשימה ()
- רשימה (תיק | רשימה, ... [תיק | רשימה]): לוקח מספר או
baglistערכים כקלט ומשטח אותם ליחידlist
lookup-to-list()
- lookup-to-list(lookup, ... [בדיקת מידע]): לוקח מספר
lookupערכים, ממיר כל אחד מהם ל-abagעם ערכת המטא-נתוניםufx-idומשטחufx-logicalnameאותם לקובץ יחידlist
option-to-list()
- option-to-list(option, ... [אופציה]): לוקח מספר
optionערכים, ממיר כל אחד מהם ל-abagעם מאפיין יחידoption, ומשטח אותם ליחידlist
סדר()
- order(list, string, bool): הזמנת רשימה לפי מאפיין בכל תיק. המאפיין מצוין בארגומנט 2, יורד מצוין בארגומנט 3.
- סדר (רשימה, רשימה): סדר רשימה לפי סדרי מיון מרובים שצוינו כרשימה בארגומנט 2. לכל אחד ברשימה
bagהשנייה יכול להיות מאפייןnameו-descending
iif()
- iif(any, any, any): אם ארגומנט 1 נכון, מחזיר ארגומנט 2, אחרת מחזיר ארגומנט 3
משתני UFX XPath
| שם | תיאור |
|---|---|
| $input | A bag זמין לשאילתת UFX עם ערכי קלט |
| $null | קבוע אפס. בחירה $null במאפיין מסירה את המאפיין מהתיק |
| $current | הפניה לתיק הנוכחי ששאילתת UFX מעבדת |
משאבים נוספים
הבנה והתאמה אישית של התאמת משאבים ב- Universal Resource Scheduling