Universal FetchXML להרחבת Universal Resource Scheduling

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-id
ufx-logicalname
רשימה לא ישים EntityCollection
לא ישים לא ישים כינוי ערך ufx-aliasentity
ufx-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 ערכים, ממיר כל אחד מהם ל-a bag עם ערכת המטא-נתונים ufx-id ומשטח ufx-logicalname אותם לקובץ יחיד list

option-to-list()

  • option-to-list(option, ... [אופציה]): לוקח מספר option ערכים, ממיר כל אחד מהם ל-a bag עם מאפיין יחיד 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