ขยาย Universal Resource Scheduling ด้วย FetchXML สากล
UFX เป็นภาษาในการสอบถามขั้นสูงที่ช่วยให้คุณสามารถสอบถามข้อมูลได้โดยใช้ FetchXML ไดนามิก รูปร่าง และเตรียมข้อมูลที่เป็นผลลัพธ์สำหรับการใช้โดยโซลูชัน Universal Resource Scheduling (URS) ภาษาของแบบสอบถามนี้ช่วยให้คุณสามารถสร้างแบบสอบถามแบบกำหนดเองเพื่อปรับแต่ง และขยายบอร์ดกำหนดการและตัวกรองผู้ช่วยจัดกำหนดการ เพื่อให้ตรงกับความต้องการทางธุรกิจเฉพาะขององค์กร
UFX ประกอบด้วยส่วนประกอบสองรายการ ที่เก็บ UFX และแบบสอบถาม UFX
ที่เก็บ UFX อย่างง่าย
ที่เก็บ UFX ประกอบด้วย ข้อมูลที่พิมพ์แบบคงที่ ในหน่วยความจำ จะมีการแสดงเป็นพจนานุกรมที่มีคีย์และค่า สามารถเป็นอนุกรมกับ JSON และ XML ได้ การพิมพ์ข้อมูลอนุญาตให้ การสอบถาม UFX สอบถามข้อมูลจากรายการนั้น และผูกกับ UI ไคลเอ็นต์
เพื่อเหตุผลทางปฏิบัติและประสิทธิภาพการทำงาน ที่เก็บในหน่วยความจำถูกนำไปใช้ที่ด้านบนของออบเจ็กต์แอป Dynamics 365 SDK
Entity
ที่เก็บตัวอย่างที่ประกอบด้วยค่าสองค่า
ในหน่วยความจำ:
คีย์ | ค่า | ชนิด |
---|---|---|
ชื่อ | จอห์น | สตริง |
อายุ | 36 | int |
ใน 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
ในที่เก็บที่มีคำสั่ง UFX ของ source
นี่ส่งผลต่อ FetchXML แบบอินไลน์ ที่จะถูกดำเนินการโดย Dynamics 365 และคุณสมบัติ 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 ผ่านตัวแปร $input
XPath สังเกตว่า คำสั่ง UFX ถ้า และ ค่า ในองค์ประกอบ 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 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
ภาคผนวก A: การอ้างอิงชนิด UFX
หมายเหตุ: UFX ทุกชนิดสนับสนุนข้อมูลเมตา ufx-type
และ ufx-formatvalue
ข้อมูลเมตาเพิ่มเติมถูกอธิบายไว้ถัดจากชนิดแต่ละชนิดในตารางด้านล่าง
ชื่อ UFX | รหัสชนิดแอตทริบิวต์ | ชื่อ .NET | ข้อมูลเมตา UFX |
---|---|---|---|
bool | บูลีน | บูลีน | |
int | จำนวนเต็ม | Int32 | |
long | BigInt | Int64 | |
double | สองครั้ง | สองครั้ง | |
ทศนิยม | ทศนิยม | ทศนิยม | |
datetime | วันที่และเวลา | วันที่และเวลา | |
guid | Uniqueidentifier | Guid | |
สตริง | บันทึกช่วยจำ | String | |
จำนวนเงิน | จำนวนเงิน | จำนวนเงิน | |
ตัวเลือก | รายการให้เลือก | OptionSetValue | |
การค้นหา | ค้นหา | EntityReference | ufx-logicalname |
ที่เก็บ | ไม่มีข้อมูล | เอนทิตี | ufx-id ufx-logicalname |
list | ไม่มีข้อมูล | EntityCollection | |
ไม่มีข้อมูล | ไม่มีข้อมูล | AliasedValue | ufx-aliasentity ufx-aliasattribute |
ภาคผนวก B: คำสั่งของแบบสอบถาม UFX
สามารถใช้คำสั่ง UFX ได้ในคุณสมบัติที่เก็บ และในองค์ประกอบ XML ของแบบสอบถาม FetchXML
คำสั่งที่เก็บของ UFX
แอตทริบิวต์ | Value | คำอธิบาย |
---|---|---|
ufx:if |
XPath | ทดสอบนิพจน์ XPath และประมวลผลเฉพาะคุณสมบัติ ถ้าการทดสอบส่งกลับค่าจริง |
ufx:source |
fetch |
ดำเนินการองค์ประกอบ XML <fetch> แบบอินไลน์ และกำหนดผลลัพธ์ไปยังคุณสมบัติ |
ufx:select |
XPath | ดำเนินการนิพจน์ XPath และกำหนดผลลัพธ์ไปยังคุณสมบัติ เมื่อการสอบถามสำหรับ bag หรือ list รายการรองเพิ่มเติม bag ในฟอร์ม XML สามารถถูกระบุเพื่อแปลงผลลัพธ์ของนิพจน์ XPath ได้ |
คำสั่ง UFX FetchXML
องค์ประกอบ | แอตทริบิวต์ | Value | คำอธิบาย |
---|---|---|---|
องค์ประกอบทั้งหมด | ufx:if |
Xpath | ทดสอบนิพจน์ XPath และส่งองค์ประกอบ XML เท่านั้น ถ้าการทดสอบสำเร็จ |
ufx:apply |
select |
XPath | ลูปผ่าน nodeset ที่ถูกส่งกลับโดยนิพจน์ XPath และให้ผลองค์ประกอบ XML รองหนึ่งครั้งสำหรับแต่ละโหนด |
ufx:value |
select |
Xpath | ดำเนินการนิพจน์ XPath และให้ผลผลลัพธ์ในองค์ประกอบ XML ปัจจุบัน |
ufx:value |
attribute |
ชื่อแอตทริบิวต์ | กำหนดผลลัพธ์ของนิพจน์ XPath ไปยังชื่อแอตทริบิวต์ที่ระบุในองค์ประกอบ XML ปัจจุบัน |
ภาคผนวก C: ฟังก์ชัน UFX XPath
UFX เพิ่มฟังก์ชันใหม่มากมาย นอกเหนือจากรายการที่พร้อมใช้งานอยู่ใน XPath
datetime()
- datetime(): ส่งกลับค่าเวลาปัจจุบันใน UTC
list()
- list(bag | list, ...[bag | list]): ใช้จำนวนของค่า
bag
หรือlist
เป็นข้อมูลป้อนเข้าและยุบรายการเหล่านั้นไว้ในlist
เดียว
lookup-to-list()
- lookup-to-list(lookup, ...[lookup]): ใช้จำนวนของค่า
lookup
แปลงแต่ละรายการเป็นbag
กับชุดข้อมูลเมตาufx-id
และufx-logicalname
และยุบรายการเหล่านั้นไว้ในlist
เดียว
option-to-list()
- option-to-list(option, ...[option]): ใช้จำนวนของค่า
option
แปลงแต่ละรายการเป็นbag
กับคุณสมบัติoption
เดียว และยุบรายการเหล่านั้นไว้ในlist
เดียว
order()
- order(list, string, bool): เรียงลำดับรายการตามคุณสมบัติในที่เก็บแต่ละรายการ คุณสมบัติถูกระบุไว้ในอาร์กิวเมนต์ 2 การเรียงลำดับจากมากไปน้อยถูกระบุไว้ในอาร์กิวเมนต์ 3
- order(list, list): เรียงลำดับรายการตามลำดับการจัดเรียงที่หลากหลายซึ่งระบุเป็นรายการในอาร์กิวเมนต์ 2 แต่ละ
bag
ในรายการที่สองสามารถมีคุณสมบัติname
และdescending
ได้
iif()
- iif(any, any, any): ถ้าอาร์กิวเมนต์ 1 เป็นจริง ส่งกลับอาร์กิวเมนต์ 2 มิฉะนั้น ส่งกลับอาร์กิวเมนต์ 3
ภาคผนวก D: ตัวแปร UFX XPath
ชื่อ | คำอธิบาย |
---|---|
$input | bag ที่พร้อมใช้งานสำหรับแบบสอบถาม UFX ที่มีค่าอินพุต |
$null | ค่าคงที่ null การเลือก $null ในคุณสมบัติจะลบคุณสมบัติออกจากที่เก็บ |
$current | การอ้างอิงถึงไปยังที่เก็บปัจจุบันที่กำลังถูกประมวลผลโดยแบบสอบถาม UFX |
ดูเพิ่มเติม
การทำความเข้าใจ และการกำหนดการจับคู่ทรัพยากรด้วยตนเองใน Universal Resource Scheduling
Universal Resource Scheduling บันทึกย่อประจำรุ่นของความสามารถในการเพิ่ม