ตัวอย่าง: ขยาย Universal Resource Scheduling ด้วยข้อจํากัดด้านภาษาแบบกําหนดเอง

บทความนี้เป็นคู่หูในการทําความเข้าใจและกําหนดทรัพยากรที่ตรงกันในการจัดกําหนดการทรัพยากรสากล

ในคําแนะนําทีละขั้นตอนนี้ เราจะขยายทรัพยากร Universal Resource Scheduling ด้วยข้อจํากัดLanguage พิจารณาองค์กรที่ต้องการกรองทรัพยากรตามภาษาที่พวกเขาพูด พวกเขายังต้องการบันทึกภาษาที่จำเป็นสำหรับงานไว้ใน Requirement ข้อจํากัดนี้เป็นไปตามรูปแบบ Territory ที่คล้ายกับข้อจํากัดในตัว เอนทิตี Language หลักใหม่จัดเก็บภาษาต่างๆ ที่ทรัพยากรสามารถพูดได้ จากนั้น เรกคอร์ด Resource จะถูกเชื่อมโยงกับ Languages หลายรายการ ผ่านทางเอนทิตีความสัมพันธ์แบบกลุ่มต่อกลุ่ม บนRequirementเอนทิตี เราสร้างแบบจําลองนี้โดยการสร้างแอตทริบิวต์การค้นหาใหม่สองแอตทริบิวต์: Primary Language และSecondary Language เมื่อระบบค้นหาทรัพยากรที่พร้อมใช้งานสำหรับความต้องการ เฉพาะทรัพยากรที่เชื่อมโยงกับ Primary Language หรือ Secondary Language เท่านั้นที่จะปรากฏขึ้น

เคล็ดลับ

เอนทิตียังเรียกอีกอย่างว่า ตาราง

สร้างตารางและความสัมพันธ์ใหม่

สร้าง Schema ใหม่สําหรับตารางหลัก Language และอัปเดตResourceตาราง และ Requirement ด้วยความสัมพันธ์ที่สอดคล้องกันกับตารางใหม่Language

สร้างผู้เผยแพร่ใหม่

  1. ไปที่แอป การตั้งค่าสภาพแวดล้อม Power Platform เลือกการกําหนดเอง>ผู้เผยแพร่ และสร้างผู้เผยแพร่ใหม่ เรียนรู้เพิ่มเติมใน สร้างผู้เผยแพร่

  2. ใส่ข้อมูลต่อไปนี้:

    เขตข้อมูล ค่า
    ชื่อที่แสดง ภาษา
    ชื่อ ภาษา
    คำนำหน้า ภาษา
  3. เลือก บันทึก

สร้างโซลูชันใหม่

  1. เลือกการปรับแต่ง>โซลูชัน และสร้างโซลูชันใหม่ เรียนรู้เพิ่มเติมใน สร้างโซลูชัน

  2. ใส่ข้อมูลต่อไปนี้:

    เขตข้อมูล ค่า
    ชื่อที่ใช้แสดง ภาษา
    ชื่อ ภาษา
    ผู้เผยแพร่ ภาษา
    เวอร์ชัน 1.0.0.0
  3. เลือก สร้าง

สร้างตารางภาษา

  1. เปิดโซลูชันภาษา และเลือกตาราง>ใหม่>(คุณสมบัติขั้นสูง) เรียนรู้เพิ่มเติมได้ที่ สร้างตารางใหม่

  2. ใส่ข้อมูลต่อไปนี้:

    เขตข้อมูล ค่า
    ชื่อที่ใช้แสดง ภาษา
    ชื่อพหูพจน์ ภาษา

    ชื่อสคีมาภายใต้ ตัวเลือกขั้นสูง จะถูกกรอกโดยอัตโนมัติ lang_Language คํานําหน้า lang_ เป็นแบบอ่านอย่างเดียว

  3. เลือก บันทึก

สร้างความสัมพันธ์แบบกลุ่มต่อกลุ่มจากตารางทรัพยากรไปยังตารางภาษา

  1. เปิดตารางภาษาและเลือกความสัมพันธ์>ใหม่>หลายต่อหลาย เรียนรู้เพิ่มเติมในส่วน สร้างความสัมพันธ์แบบหลายต่อหลายตาราง
  2. สําหรับตารางที่เกี่ยวข้อง (กลุ่ม) เลือกทรัพยากรที่สามารถจองได้
  3. เลือก เสร็จสิ้น
  4. ปิดตารางภาษา

สร้างความสัมพันธ์จากตารางข้อกําหนดที่มีอยู่ไปยังตารางภาษา

  1. เปิดโซลูชันภาษา และเลือกเพิ่มความต้องการทรัพยากร>>

  2. ถ้าแสดงกล่องโต้ตอบคอมโพเนนต์ที่จําเป็นที่ขาดหายไป เลือก ไม่ และไม่มีคอมโพเนนต์ที่จําเป็น

  3. เลือก เพิ่ม

  4. ในตารางข้อกําหนดทรัพยากร ให้สร้างคอลัมน์ใหม่

  5. ใส่ข้อมูลต่อไปนี้:

    เขตข้อมูล ค่า
    ชื่อที่แสดง ภาษาหลัก
    ชนิดของข้อมูล การค้นหา
    ตารางที่เกี่ยวข้อง ภาษา
  6. เลือก บันทึก

  7. ในตารางความต้องการทรัพยากร ให้สร้างคอลัมน์ใหม่อีกคอลัมน์หนึ่ง

  8. ใส่ข้อมูลต่อไปนี้:

    เขตข้อมูล ค่า
    ชื่อที่แสดง ภาษารอง
    ชนิดของข้อมูล การค้นหา
    ตารางที่เกี่ยวข้อง ภาษา
  9. เลือก บันทึก

อัปเดตฟอร์มหลักของความต้องการ

  1. ในตารางข้อกําหนดทรัพยากร เลือกฟอร์ม
  2. เลือก เพิ่มข้อมูลฟอร์ม>ที่มีอยู่ และ เพิ่ม ถ้ากล่องโต้ตอบคอมโพเนนต์ที่จําเป็นที่หายไปปรากฏขึ้น เลือก ไม่ และไม่มีคอมโพเนนต์ที่จําเป็น
  3. เปิดแบบฟอร์ม ข้อมูล และเพิ่มคอลัมน์ใหม่สองคอลัมน์ คือ ภาษาหลักและภาษารอง เพื่อให้ผู้ใช้สามารถกรอกข้อมูลนี้ขณะสร้างข้อกําหนด เรียนรู้เพิ่มเติมใน เพิ่มคอลัมน์ลงในฟอร์ม
  4. เลือก บันทึกและเผยแพร่

เพิ่มข้อมูลภาษาไปยังแหล่งข้อมูลและข้อกําหนด

เพิ่มระเบียนใหม่ลงในตารางภาษา จากนั้นคุณสามารถเชื่อมโยงระเบียนทรัพยากรกับระเบียนภาษาใหม่โดยการเปิดระเบียนทรัพยากรและนําทางไปยังความสัมพันธ์ภาษาในแถบนําทาง สําหรับระเบียนข้อกําหนด คุณสามารถกรอกข้อมูลในเขตข้อมูลภาษาหลักและภาษารองใหม่บนฟอร์มข้อกําหนดได้

ปรับแต่งบอร์ดตารางงาน

หากต้องการกรองทรัพยากรในบอร์ดกําหนดเวลาโดยใช้ข้อจํากัดภาษาใหม่ ให้อัปเดตระเบียนการกําหนดค่า Retrieve Resources Query และ Filter Layout

หมายเหตุ

การปรับแต่งกระดานกำหนดเวลาเหล่านี้จะมีผลกับทุกแท็บเหมือนกันทั้งหมด และไม่สามารถตั้งค่าแยกเป็นรายแท็บได้ การปรับแต่งนี้ใช้กับ เค้าโครงตัวกรองของ Schedule Assistant, คิวรีการดึงข้อมูลทรัพยากรของ Schedule Assistant, เทมเพลตเซลล์ทรัพยากรของ Schedule Assistant และ คิวรีการดึงข้อมูลข้อจำกัดของ Schedule Assistant

กําหนดค่าการจัดวางตัวกรอง

สำหรับขั้นตอนต่อไปนี้ ใช้ตัวแก้ไขข้อความที่สนับสนุนไวยากรณ์ XML ที่เน้นการทำการเปลี่ยนแปลงของคุณ และจากนั้น วางการเปลี่ยนแปลงของคุณกลับไปยังตัวแก้ไข Universal Resource Scheduling

การกําหนดค่าการจัดวางตัวกรองเป็นการกําหนดการจัดวาง XML เพื่อปรับแต่งการจัดวางของแผงตัวกรอง

หมายเหตุ

ลบตัวกรองเริ่มต้นทั้งหมดที่ Universal Resource Scheduling มาพร้อมกับจากแผงตัวกรอง และเพิ่มภาษาเป็นตัวกรองเดียวที่ใช้งานได้

<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />

องค์ประกอบจะ control เพิ่มตัวควบคุมใหม่ลงในแผงตัวกรอง คําอธิบายของแต่ละแอตทริบิวต์มีดังนี้

ชื่อ คำอธิบาย
type ประเภทของการควบคุมตัวกรอง comboตัวควบคุมจะแสดงดรอปดาวน์พร้อมค่าให้เลือก
source แหล่งที่มาของค่าสำหรับเมนูแบบเลื่อนลง entityแหล่งที่มาแสดงเรกคอร์ดเอนทิตีในดรอปดาวน์
key คีย์ที่จะใช้เพื่อจัดเก็บค่าที่เลือกในถุงคุณสมบัติข้อจํากัด
inactive-state ไม่ได้ใช้งาน statecode สําหรับเอนทิตีนี้ ซึ่งใช้เพื่อแยกระเบียนที่ไม่ได้ใช้งานออกจากดรอปดาวน์
label-id ป้ายชื่อที่แปลเป็นภาษาท้องถิ่นเพื่อใช้สําหรับตัวควบคุมนี้
entity เรกคอร์ดของเอนทิตีนี้จะแสดงในดรอปดาวน์
multi กําหนดค่าดรอปดาวน์เพื่ออนุญาตให้เลือกเรกคอร์ดเดียวหรือหลายเรกคอร์ด

การจัดวางตัวกรอง:

<?xml version="1.0" encoding="utf-8" ?>
<filter>
  <controls>
    <control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
  </controls>
</filter>

สร้างบอร์ดภาษาใหม่

เพื่อแยกการเปลี่ยนแปลงเหล่านี้ออกจากกัน ให้สร้างบอร์ดกําหนดเวลาแยกต่างหากและดําเนินการเปลี่ยนแปลงเหล่านั้น คุณสามารถทําการเปลี่ยนแปลงเหล่านี้บนบอร์ดกําหนดเวลาเริ่มต้นได้เสมอ เพื่อให้บอร์ดกําหนดเวลาอื่น ๆ สามารถรับช่วงการเปลี่ยนแปลงเหล่านี้ได้โดยอัตโนมัติ

  1. ไปที่แอป การกําหนดตารางเวลาทรัพยากร และเลือก บอร์ดกําหนดการ
  2. เลือก + เครื่องหมายเพื่อสร้างบอร์ดใหม่
  3. ตั้งชื่อภาษาของบอร์ดใหม่
  4. ที่ด้านล่างของกล่องโต้ตอบ ให้เลือก เพิ่ม มีการสร้างบอร์ดใหม่

กําหนดค่าการจัดวางตัวกรองบอร์ดกําหนดเวลา

ถัดไป สร้างระเบียนการกําหนดค่าใหม่ที่เก็บข้อมูลการจัดวางตัวกรองและคําสั่งค้นหาที่ใช้โดยบอร์ดกําหนดเวลา จากนั้น เชื่อมโยงบอร์ดกําหนดเวลาที่สร้างใหม่กับระเบียนการกําหนดค่าใหม่ มีหลายวิธีในการดําเนินการดังกล่าว แต่นี่คือวิธีที่รวดเร็วที่สุด:

  1. บนกระดานกําหนดเวลา ให้เลือกจุดไข่ปลา (...) ที่มุมขวาบนและการตั้งค่าตัวจัดตารางเวลา
  2. เลือก การตั้งค่าบอร์ดทั้งหมด ที่ด้านล่างของบานหน้าต่าง จากนั้นเลือก อื่นๆ
  3. ค้นหาเขตข้อมูล เค้าโครงตัวกรอง และเลือกไอคอนรูปดินสอเพื่อเปิดตัวแก้ไข
  4. ป้อน "Language Filter Layout" ในช่อง Name แล้วเพิ่มรหัสการจัดวางตัวกรอง จากนั้นเลือก บันทึกเป็นใหม่
  5. เลือก บันทึก จะมีการสร้างระเบียนการกําหนดค่าใหม่ซึ่งเชื่อมโยงบอร์ดกําหนดเวลานี้กับระเบียนนั้น
  6. เลือก ตัวกรอง บานหน้าต่าง ตัวกรอง จะปรากฏขึ้นพร้อมเค้าโครงใหม่ มีเฉพาะตัวกรองภาษา การกรองจะไม่ทํางานจนกว่าคุณจะอัปเดตคิวรีทรัพยากรเรียกข้อมูล

อัปเดตคำสั่งค้นคืนทรัพยากร

สำหรับขั้นตอนต่อไปนี้ ใช้ตัวแก้ไขข้อความที่สนับสนุนไวยากรณ์ XML ที่เน้นการทำการเปลี่ยนแปลงของคุณ และจากนั้น วางการเปลี่ยนแปลงของคุณกลับไปยังตัวแก้ไข Universal Resource Scheduling

การกําหนดค่าคิวรีค้นคืนทรัพยากรคือ คิวรี Universal FetchXML (UFX) ที่ใช้โดย API การจับคู่ทรัพยากร ใช้ค่าที่ป้อนในแผงตัวกรองเป็นอินพุตและสร้าง FetchXML ที่ถูกต้องแบบไดนามิกเพื่อค้นหาทรัพยากรที่ตรงกัน

หมายเหตุ

เพิ่มส่วนย่อยเหล่านี้ลงในคิวรีเรียกใช้ทรัพยากรเพื่อให้ตรงกับและเรียงลําดับตามภาษาของทรัพยากร

เพิ่มการรวมจาก bookableresource ไปยัง lang_language

<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_primary" link-type="outer" ufx:if="$input/Languages/bag[1]">
  <attribute name="lang_languageid" alias="lang_primary" groupby="true" />

  <filter>
    <condition attribute="lang_languageid" operator="eq">
      <ufx:value select="$input/Languages/bag[1]/@ufx-id" attribute="value" />
    </condition>          
  </filter>
</link-entity>

<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_secondary" link-type="outer" ufx:if="$input/Languages/bag[2]">
  <attribute name="lang_languageid" alias="lang_secondary" groupby="true" />

  <filter>
    <condition attribute="lang_languageid" operator="eq">
      <ufx:value select="$input/Languages/bag[2]/@ufx-id" attribute="value" />
    </condition>          
  </filter>
</link-entity>

<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_others" link-type="outer" ufx:if="$input/Languages/bag[position() > 2]">

  <filter>
    <condition attribute="lang_languageid" operator="in">
      <ufx:apply select="$input/Languages/bag[position() > 2]">
        <value>
          <ufx:value select="@ufx-id" />
        </value>
      </ufx:apply>
    </condition>            
  </filter>
</link-entity>        

<filter type="or">
  <condition entityname="lang_primary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[1]" />
  <condition entityname="lang_secondary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[2]" />
  <condition entityname="lang_others" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[position() > 2]" />          
</filter>

หมายเหตุ

ค่าที่เลือกในแผงตัวกรองจะถูกส่งเป็นข้อมูลนําเข้าไปยังคําสั่งค้นหาและสามารถใช้งานได้ในตัวแปร XPath $input

คิวรีดึงทรัพยากรใช้ FetchXML เพื่อสอบถามเอนทิตี Resource (bookableresource) เราเลือกองค์ประกอบ FetchXML link-entity เพื่อส่งคืนทรัพยากรที่เกี่ยวข้องกับเรกคอร์ดภาษาที่เลือกในแผงตัวกรองเท่านั้น ใช้การรวมหลายlink-entityรายการเพื่อแสดงภาษาและลําดับที่ตรงกันตามภาษาหลักหรือรอง ตามที่อธิบายไว้ในส่วน Resource Cell Template

นี่คือคําอธิบายของแต่ละรายการ element และ attribute:

ชื่อ คำอธิบาย
link-entity สร้างการเชื่อมโยงกับความสัมพันธ์แบบหลายต่อหลายระหว่างเอนทิตีทรัพยากรและภาษา
ufx:if ปล่อยองค์ประกอบ FetchXML นี้ (link-entity) เฉพาะเมื่อนิพจน์ XPath ในแอตทริบิวต์นี้ส่งคืนค่า
attribute ส่งคืนภาษาหลักหรือภาษารองที่ตรงกัน
filter และ condition กรองเรกคอร์ดความสัมพันธ์แบบกลุ่มต่อกลุ่มให้ตรงกับรหัสภาษาที่ระบุเท่านั้น
ufx:value และ select ส่งออกผลลัพธ์ของนิพจน์ XPath ลงในคุณลักษณะ select
ufx:apply และ select ส่งออกองค์ประกอบ FetchXML รองสำหรับผลลัพธ์แต่ละรายการที่ถูกส่งกลับจากนิพจน์ XPath ในแอตทริบิวต์ select
value ประกอบด้วยรหัสของระเบียนภาษา

กําหนดลําดับการจัดเรียงของทรัพยากร

หลังจากที่คุณเรียกใช้ทรัพยากรที่ตรงกัน โดยยึดตามภาษาที่กําหนดของทรัพยากรกําหนดคุณสมบัติใหม่ lang_order เพื่อกําหนดลําดับการจัดเรียงของทรัพยากร

<bag>
  <lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
</bag>

คําอธิบายของแต่ละ element และ attribute:

ชื่อ คำอธิบาย
lang_order สร้างคุณสมบัติใหม่ในแต่ละทรัพยากรที่ส่งคืนจากคิวรี FetchXML ที่ชื่อ lang_order
ufx:select กําหนดผลลัพธ์ของนิพจน์ XPath ในแอตทริบิวต์นี้ให้กับ lang_order คุณสมบัติ lang_primaryคุณสมบัติ และ lang_secondary ที่ดึงมาก่อนหน้านี้ในคําค้นหา จะถูกใช้ร่วมกับฟังก์ชัน XPath iif เพื่อกําหนดลําดับการจับคู่ทรัพยากร

สั่งซื้อผลลัพธ์

<Resources ufx:select="order(Resources, 'lang_order')" />

การสืบค้น UFX ได้รับการประมวลผลตามลําดับ หลังจากดึงทรัพยากรผ่าน FetchXML แล้ว ให้กําหนดผลลัพธ์ให้กับ Resources คุณสมบัติ เรียงลําดับผลลัพธ์ตามคุณสมบัติที่ lang_order เพิ่มไว้ก่อนหน้านี้ และมอบผลลัพธ์ที่เรียงลําดับให้กับ Resources คุณสมบัติ

คําอธิบายของแต่ละ element และ attribute:

ชื่อ คำอธิบาย
Resources กําหนดคุณสมบัติใหม่Resources
ufx:select กําหนดผลลัพธ์ของนิพจน์ XPath ในแอตทริบิวต์นี้ให้กับ Resources คุณสมบัติ ฟังก์ชัน XPath order ใช้เพื่อเรียงลําดับResourcesรายการในคุณสมบัติของมันlang_order

หมายเหตุ

แบบสอบถาม ดึงทรัพยากร เริ่มต้นที่จัดส่งพร้อมกับ Universal Resource Scheduling เป็นแบบสอบถามขนาดใหญ่ที่รองรับข้อจํากัดของทรัพยากรทั้งหมดที่รวมอยู่ใน Universal Resource Scheduling สําหรับแบบฝึกหัดนี้ ให้ใช้เฉพาะชุดย่อยของคําสั่งเริ่มต้นและเพิ่ม ภาษา เป็นตัวกรองเดียว

<?xml version="1.0" encoding="utf-8" ?>
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
  <Resources ufx:source="fetch">
    <fetch mapping="logical" aggregate="true">
      <entity name="bookableresource">
        <attribute name="bookableresourceid" alias="bookableresourceid" groupby="true"/>
        <attribute name="name" alias="name" groupby="true"/>
        <attribute name="calendarid" alias="calendarid" groupby="true"/>
        <attribute name="resourcetype" alias="resourcetype" groupby="true"/>
        <attribute name="msdyn_startlocation" alias="startlocation" groupby="true"/>

        <!-- Language join -->
        <link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_primary" link-type="outer" ufx:if="$input/Languages/bag[1]">
          <attribute name="lang_languageid" alias="lang_primary" groupby="true" />
          
          <filter>
            <condition attribute="lang_languageid" operator="eq">
              <ufx:value select="$input/Languages/bag[1]/@ufx-id" attribute="value" />
            </condition>          
          </filter>
        </link-entity>

        <link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_secondary" link-type="outer" ufx:if="$input/Languages/bag[2]">
          <attribute name="lang_languageid" alias="lang_secondary" groupby="true" />
          
          <filter>
            <condition attribute="lang_languageid" operator="eq">
              <ufx:value select="$input/Languages/bag[2]/@ufx-id" attribute="value" />
            </condition>          
          </filter>
        </link-entity>
        
        <link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_others" link-type="outer" ufx:if="$input/Languages/bag[position() > 2]">
          
          <filter>
            <condition attribute="lang_languageid" operator="in">
              <ufx:apply select="$input/Languages/bag[position() > 2]">
                <value>
                  <ufx:value select="@ufx-id" />
                </value>
              </ufx:apply>
            </condition>            
          </filter>
        </link-entity>        
        
        <filter type="or">
          <condition entityname="lang_primary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[1]" />
          <condition entityname="lang_secondary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[2]" />
          <condition entityname="lang_others" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[position() > 2]" />          
        </filter>
        
        <link-entity name="systemuser" from="systemuserid" to="userid" link-type="outer">
          <attribute name="systemuserid" alias="systemuserid" groupby="true" />
          <attribute name="entityimage_url" alias="userimagepath" groupby="true"/>
        </link-entity>

        <link-entity name="contact" from="contactid" to="contactid" link-type="outer">
          <attribute name="contactid" alias="contactid" groupby="true"/>
          <attribute name="entityimage_url" alias="contactimagepath" groupby="true"/>
        </link-entity>
        
        <link-entity name="account" from="accountid" to="accountid" link-type="outer">
          <attribute name="accountid" alias="accountid" groupby="true"/>
          <attribute name="entityimage_url" alias="accountimagepath" groupby="true"/>
        </link-entity>
      </entity>
    </fetch>

    <bag>
      <imagepath ufx:select="accountimagepath | contactimagepath | userimagepath" />

      <accountimagepath ufx:select="$null" />
      <contactimagepath ufx:select="$null" />
      <userimagepath ufx:select="$null" />
      
      <lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
    </bag>
  </Resources>

  <Resources ufx:select="order(Resources, 'lang_order')" />
</bag>

อัปเดตคําสั่งดึงทรัพยากรจากบอร์ดกําหนดเวลา

  1. บนกระดานกําหนดเวลา ให้เลือกจุดไข่ปลา (...) ที่มุมขวาบนและการตั้งค่าตัวจัดตารางเวลา
  2. เลือก การตั้งค่าบอร์ดทั้งหมด ที่ด้านล่างของบานหน้าต่าง จากนั้นเลือก อื่นๆ
  3. ค้นหาเขตข้อมูล คิวรีค้นคืนทรัพยากร และเลือกไอคอนดินสอเพื่อเปิดตัวแก้ไข
  4. กรอกLanguage Resources Queryในช่องชื่อ เพิ่มรหัสค้นหาทรัพยากร และเลือก บันทึกเป็นใหม่
  5. เลือก บันทึก จะมีการสร้างระเบียนการกําหนดค่าใหม่ซึ่งเชื่อมโยงบอร์ดกําหนดเวลานี้กับระเบียนนั้น

บอร์ดจะโหลดอีกครั้งด้วยการกำหนดค่าที่ปรับปรุงแล้ว การกรองทํางาน หากคุณสร้างเรกคอร์ดภาษาและเชื่อมโยงรายการเหล่านั้นกับเรกคอร์ดทรัพยากร คุณสามารถกรองทรัพยากรได้โดยภาษาที่เกี่ยวข้องของพวกเขา

ปรับแต่งผู้ช่วยกําหนดเวลา

ปรับแต่งการจัดวางตัวกรองผู้ช่วยกําหนดเวลาและการกําหนดค่าการสืบค้น Retrieve Constraints เพื่อใช้ข้อจํากัดภาษาใหม่ในผู้ช่วยกําหนดเวลา

แตกต่างจากการปรับแต่งบอร์ดกําหนดเวลาที่คุณสามารถปรับแต่งแต่ละบอร์ดได้ทีละบอร์ด การปรับแต่งผู้ช่วยกําหนดเวลาจะส่งผลต่อทุกบอร์ดที่ใช้ผู้ช่วยกําหนดเวลา คุณสามารถปรับแต่งผู้ช่วยกําหนดเวลาให้เฉพาะกับประเภทที่กําหนดเวลาได้ หรือสําหรับทุกประเภท ในตัวอย่างนี้ ปรับแต่งผู้ช่วยกําหนดเวลาสําหรับทุกประเภท

กําหนดค่าการจัดวางตัวกรองของผู้ช่วยกําหนดเวลา

สำหรับขั้นตอนต่อไปนี้ ใช้ตัวแก้ไขข้อความที่สนับสนุนไวยากรณ์ XML ที่เน้นการทำการเปลี่ยนแปลงของคุณ และจากนั้น วางการเปลี่ยนแปลงของคุณกลับไปยังตัวแก้ไข Universal Resource Scheduling

การกําหนดค่าการจัดวางตัวกรองของผู้ช่วยกําหนดเวลา เช่นเดียวกับการจัดวางตัวกรองบอร์ดกําหนดเวลา จะกําหนดรูปแบบของคอนโทรลในแผงกรอง เนื่องจากผู้ช่วยกําหนดเวลาใช้ตัวกรองมากกว่ากระดานกําหนดเวลา เช่น เวลาเริ่มต้น เวลาสิ้นสุด และระยะเวลา จึงใช้รูปแบบที่แตกต่างกัน

หมายเหตุ

สําหรับแบบฝึกหัดนี้ ให้ใช้เฉพาะตัวกรองเริ่มต้นบางส่วนที่มาพร้อมกับ Universal Resource Scheduling จากการกําหนดค่าการจัดวางตัวกรองของผู้ช่วยกําหนดเวลา และเพิ่มเมนูแบบเลื่อนลง Languages เป็นตัวกรองเดียวที่ใช้งานได้

ตัวกรองที่คุณเพิ่มในเลย์เอาต์จะเหมือนกับตัวกรองในหัวข้อ กําหนดค่าการจัดวางตัวกรองบอร์ดกําหนดเวลา คุณต้องใช้คอนโทรลอื่น ๆ เพื่อแก้ไขพารามิเตอร์การค้นหาของผู้ช่วยกําหนดเวลา

เค้าโครงตัวกรองผู้ช่วยกําหนดเวลาทั้งหมด

<?xml version="1.0" encoding="utf-8" ?>
<filter>
  <controls>
    <control type="twocolumn">
      <control type="combo" source="optionset" key="Requirement/msdyn_worklocation" label-id="ScheduleAssistant.West.settingsform.WorkLocation" entity="msdyn_resourcerequirement" attribute="msdyn_worklocation">
        <bind property="disabled" to="Requirement/InitialWorkLocation" operator="eq" value="690970002" />
        <data>
          <value id="690970000" />
          <value id="690970001" />
          <value id="690970002" />
        </data>
      </control>
      <control type="duration" key="Requirement/msdyn_remainingduration" label-id="ScheduleAssistant.West.settingsform.AvailableDuration" />
    </control>
    <control type="distance" key="Requirement/Radius" label-id="ScheduleAssistant.West.settingsform.Radius" min="1">
      <bind property="disabled" to="Requirement/msdyn_worklocation" operator="eq" value="690970002" />
    </control>
    <control type="datetime" key="Requirement/msdyn_fromdate" label-id="ScheduleAssistant.West.settingsform.StartDay">
      <bind property="disabled" to="Requirement/RealTimeMode" operator="eq" value="true" />
      <bind property="max" to="Requirement/msdyn_todate" operator="eq" />
    </control>
    <control type="datetime" key="Requirement/msdyn_todate" label-id="ScheduleAssistant.West.settingsform.EndDay">
      <bind property="min" to="Requirement/msdyn_fromdate" operator="eq" />
    </control>
    <control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
  </controls>
</filter>

อัปเดตรูปแบบตัวกรองผู้ช่วยกําหนดเวลา

  1. บนกระดานกําหนดเวลา ให้เลือกจุดไข่ปลา (...) ที่มุมขวาบนและการตั้งค่าตัวจัดตารางเวลา
  2. เลือก การตั้งค่าบอร์ดทั้งหมด ที่ด้านล่างของบานหน้าต่าง
  3. เลื่อนไปที่ชนิดกําหนดการ และเลือกไม่มี
  4. เลือก แก้ไขค่าเริ่มต้น อยู่ที่ด้านล่าง
  5. ค้นหาช่อง เค้าโครงตัวกรองผู้ช่วยกําหนดเวลา และเลือกไอคอนดินสอเพื่อเปิดตัวแก้ไข
  6. ป้อนโครงร่างตัวกรองตัวช่วยสร้างตารางภาษาในฟิลด์ ชื่อ
  7. อัปเดตฟิลด์เค้าโครงตัวกรองผู้ช่วยกําหนดเวลาด้วยโค้ดและเลือก บันทึกเป็นใหม่ การดําเนินการนี้จะสร้างระเบียนการกําหนดค่าใหม่ที่เชื่อมโยงบอร์ดกําหนดเวลานี้กับระเบียน
  8. ที่ด้านล่างของกล่องโต้ตอบการตั้งค่าบอร์ด ให้เลือก บันทึก

บอร์ดจะโหลดอีกครั้ง เปลี่ยน Retrieve Constraints Query ให้รวมภาษาที่ตั้งค่าไว้ใน Requirement ในการค้นหาของตัวช่วยจัดกำหนดการ

กําหนดค่าคิวรีเรียกข้อจํากัด

สำหรับขั้นตอนต่อไปนี้ ใช้ตัวแก้ไขข้อความที่สนับสนุนไวยากรณ์ XML ที่เน้นการทำการเปลี่ยนแปลงของคุณ และจากนั้น วางการเปลี่ยนแปลงของคุณกลับไปยังตัวแก้ไข Universal Resource Scheduling

การกําหนดค่า Retrieve Constraints Query เป็น แบบสอบถาม UFX ที่ใช้โดย Retrieve Requirement Constraints API ใช้รหัสของเรกคอร์ดความต้องการ (ที่เลือกใน UI) เป็นอินพุต และส่งคืนเรกคอร์ดความต้องการและเรกคอร์ดย่อยทั้งหมด

หมายเหตุ

คิวรี Retrieve Constraints เริ่มต้นที่จัดส่งพร้อมกับ Universal Resource Scheduling เป็นคิวรีขนาดใหญ่ที่สนับสนุนข้อจํากัดความต้องการทั้งหมดที่รวมอยู่ใน Universal Resource Scheduling สําหรับแบบฝึกหัดนี้ ให้ใช้เฉพาะชุดย่อยของคําสั่งเริ่มต้นและเพิ่ม ภาษา เป็นตัวกรองเดียว

<Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />

การสืบค้น UFX ได้รับการประมวลผลตามลําดับ แบบสอบถาม Retrieve Constraints ใช้ FetchXML ในการดึงข้อมูลของเอนทิตี Requirement (msdyn_resourcerequirement) และจัดเก็บผลลัพธ์เป็นเรกคอร์ดความต้องการไว้ในคุณสมบัติ Requirement เรากำลังเพิ่มไปยังที่เก็บคุณสมบัติข้อจำกัด Languages ของคุณสมบัติใหม่ที่รวมทั้งแอตทริบิวต์ ภาษาหลักและภาษารอง ลงในเอนทิตี (EntityCollection) รายการเดียว คุณสมบัตินี้จําเป็นเนื่องจากเรากําลังแสดงตัวควบคุมภาษาในแผงตัวกรองเป็นรายการของระเบียน อีกทางเลือกหนึ่งคือการสร้างตัวควบคุมสองตัวควบคุมแยกกันในแผงตัวกรองสําหรับแอตทริบิวต์ทั้งสอง

คําอธิบายของแต่ละ element และ attribute:

ชื่อ คำอธิบาย
Languages สร้างคุณสมบัติใหม่ในถุงคุณสมบัติข้อจํากัดผลลัพธ์ที่ชื่อ Languages
ufx:select กําหนดผลลัพธ์ของนิพจน์ XPath ในแอตทริบิวต์นี้ให้กับ Languages คุณสมบัติ lang_primarylanguageคุณสมบัติ and lang_secondarylanguage ที่ดึงมาก่อนหน้านี้ในแบบสอบถามและพร้อมใช้งานในRequirementคุณสมบัติจะถูกส่งผ่านไปยังlookup-to-listฟังก์ชัน XPath ซึ่งจะแปลงคุณสมบัติหลายรายการlookupเป็นคุณสมบัติเดียวlist (EntityCollection)

เรียกคืนการสอบถามข้อจำกัด

<?xml version="1.0" encoding="utf-8" ?>
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
  <Requirement ufx:source="fetch" ufx:select="bag[1]">
    <fetch top="1">
      <entity name="msdyn_resourcerequirement">
        <all-attributes />
        
        <filter>
          <condition attribute="statecode" operator="eq" value="0" />
          <condition attribute="msdyn_resourcerequirementid" operator="eq">
            <ufx:value select="$input/@ufx-id" attribute="value" />
          </condition>
        </filter>
      </entity>
    </fetch>

    <bag>
      <InitialWorkLocation ufx:select="msdyn_worklocation" />
    </bag>
  </Requirement>
  
  <Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />
</bag>

อัปเดตคิวรีสำหรับข้อจำกัดการดึงข้อมูล

  1. บนกระดานกําหนดเวลา ให้เลือกจุดไข่ปลา (...) ที่มุมขวาบนและการตั้งค่าตัวจัดตารางเวลา
  2. เลือก การตั้งค่าบอร์ดทั้งหมด ที่ด้านล่างของบานหน้าต่าง
  3. เลื่อนไปที่ชนิดกําหนดการ และเลือกไม่มี
  4. เลือกแก้ไขค่าเริ่มต้น
  5. ค้นหาฟิลด์ คิวรีข้อจำกัดของระบบจัดการกำหนดการ และเลือกไอคอนดินสอเพื่อเปิดตัวแก้ไข
  6. ใส่ "คิวรีข้อจํากัดของภาษา" ในเขตข้อมูล ชื่อ
  7. ปรับปรุงตัวช่วยสร้างกําหนดการดึงข้อมูลข้อจํากัดของเขตข้อมูลคิวรีด้วยโค้ดคิวรี Retrieve Constraints และเลือกบันทึกเป็นรายการใหม่
  8. เลือก บันทึก จะมีการสร้างระเบียนการกําหนดค่าใหม่ซึ่งเชื่อมโยงบอร์ดกําหนดเวลานี้กับระเบียนนั้น
  9. ค้นหาช่อง ค้นหาทรัพยากรของผู้ช่วยกําหนดเวลา และเลือกคําสั่งค้นหาทรัพยากรภาษาที่คุณสร้างสําหรับการปรับแต่งบอร์ดกําหนดเวลา
  10. ที่ด้านล่างของกล่องโต้ตอบ เลือกบันทึก

บอร์ดจะโหลดอีกครั้งด้วยการกำหนดค่าที่ปรับปรุงแล้ว การกรองผู้ช่วยกําหนดเวลาทํางานได้ผล หากคุณสร้างระเบียนภาษาและเชื่อมโยงกับระเบียนความต้องการ คุณสามารถเลือกระเบียนความต้องการที่ด้านล่างของตารางเวลา เลือก ค้นหาความพร้อมใช้งาน เพื่อดูเฉพาะทรัพยากรที่ตรงกับภาษาที่บันทึกไว้ในความต้องการ

กําหนดค่าเทมเพลตเซลล์ทรัพยากร

สำหรับขั้นตอนต่อไปนี้ ใช้ตัวแก้ไขข้อความที่สนับสนุนไวยากรณ์ HTML ที่เน้นการทำการเปลี่ยนแปลงของคุณ และจากนั้น วางการเปลี่ยนแปลงของคุณกลับไปยังตัวแก้ไข Universal Resource Scheduling

การตั้งค่าคอนฟิกเทมเพลตเซลล์ทรัพยากรเป็นเทมเพลต แฮนด์บาร์ที่ใช้ใน การแสดงเนื้อหาในเซลล์ทรัพยากร ผลลัพธ์จากแบบสอบถามดึงทรัพยากรพร้อมใช้งานสําหรับเทมเพลต

แก้ไขเทมเพลตทรัพยากรเริ่มต้นให้แสดงตัวบ่งชี้ ✱ สีเขียว✔หากทรัพยากรตรงกับภาษาหลักและภาษารอง, ตัวบ่งชี้สีเขียว✔หากทรัพยากรตรงกับเฉพาะภาษาหลัก และตัวบ่งชี้สีเหลือง✔หากทรัพยากรตรงกับเฉพาะภาษารอง

{{#if lang_primary}}
<span style='color:green;'>&#10004;{{#if lang_secondary}} &#10033;{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>&#10004;</span>
{{/if}} 

lang_primaryค่า และlang_secondaryคุณสมบัติจะคืนมาจากคําสั่ง Retrieve Resources Query ที่เราตั้งค่าเอง เยี่ยมชมเว็บไซต์ Handlebars สำหรับเอกสารเกี่ยวกับการใช้ไวยากรณ์เทมเพลต

เทมเพลตเซลล์ทรัพยากร:

<div class='resource-card-wrapper {{iif ResourceCellSelected "resource-cell-selected" ""}} {{iif ResourceUnavailable "resource-unavailable" ""}} {{iif IsMatchingAvailability "availability-match" ""}}'>
  {{#if imagepath}}
  <img class='resource-image' src='{{client-url}}{{imagepath}}' />
  {{else}}
  <div class='resource-image unknown-resource'></div>
  {{/if}}
  <div class='resource-info'>
    <div class='resource-name primary-text ellipsis' title='{{name}}'>{{name}}</div>
    <div class='secondary-text ellipsis'>
      {{#if (eq (is-sa-grid-view) false) }}
      <div class='booked-duration'>{{BookedDuration}}</div>
      <div class='booked-percentage'>
        {{BookedPercentage}}%
        
        {{#if lang_primary}}
        <span style='color:green;'>&#10004;{{#if lang_secondary}} &#10033;{{/if}}</span>
        {{else if lang_secondary}}
        <span style='color:#ffe700;'>&#10004;</span>
        {{/if}}            
      </div>
      {{/if}}
    </div>
    {{#if (eq (is-sa-grid-view) false) }}
    <div class='matching-indicator'></div>
    {{/if}}
  </div>
  {{#if (eq (is-sa-grid-view) false) }}
  {{> resource-map-pin-template this }}
  {{/if}}
</div>

อัปเดตเทมเพลตเซลล์ทรัพยากร

  1. บนกระดานกําหนดเวลา ให้เลือกจุดไข่ปลา (...) ที่มุมขวาบนและการตั้งค่าตัวจัดตารางเวลา
  2. เลือก การตั้งค่าบอร์ดทั้งหมด ที่ด้านล่างของบานหน้าต่าง
  3. เลื่อนไปที่ชนิดกําหนดการ และเลือกไม่มี
  4. เลือกแก้ไขค่าเริ่มต้น
  5. ค้นหาเขตข้อมูล Schedule Assistant Resource Cell Template และเลือกไอคอนดินสอเพื่อเปิดตัวแก้ไข
  6. ใส่ "เทมเพลตเซลล์ทรัพยากรภาษา" ในเขตข้อมูล ชื่อ
  7. อัปเดตเขตข้อมูล เทมเพลตเซลล์ทรัพยากร ด้วยรหัส เทมเพลตเซลล์ของทรัพยากร และเลือก บันทึกเป็นรายการใหม่
  8. เลือก บันทึก จะมีการสร้างระเบียนการกําหนดค่าใหม่ซึ่งเชื่อมโยงบอร์ดกําหนดเวลานี้กับระเบียนนั้น
  9. ค้นหาช่อง ค้นหาทรัพยากรของผู้ช่วยกําหนดเวลา และเลือกคําสั่งค้นหาทรัพยากรภาษาที่คุณสร้างสําหรับการปรับแต่งบอร์ดกําหนดเวลา
  10. ที่ด้านล่างของกล่องโต้ตอบ เลือกบันทึก

บอร์ดจะโหลดอีกครั้งด้วยการกำหนดค่าที่ปรับปรุงแล้ว เซลล์ทรัพยากรจะแสดงวิธีการที่ทรัพยากรจับคู่กับข้อจำกัดของภาษาในแผงตัวกรอง

แหล่งข้อมูลเพิ่มเติม

Fetch XML สากล