แชร์ผ่าน


ตัวอย่าง: ขยาย 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. เลือก บันทึกและเผยแพร่

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

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

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

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

หมายเหตุ

การกําหนดค่าบอร์ดกําหนดการเหล่านี้นําไปใช้กับแท็บทั้งหมดอย่างสม่ําเสมอและไม่สามารถตั้งค่าทีละแท็บได้ การกําหนดเองนี้จะนําไปใช้กับเค้าโครงตัวกรองตัวช่วยสร้างกําหนดการ"ตัวช่วยสร้างกําหนดการเรียกใช้แบบสอบถามทรัพยากรจัดกําหนดการตัวช่วยสร้างทรัพยากรแม่แบบเซลล์และตัวช่วยสร้างกําหนดการเรียกข้อ จํากัด แบบสอบถาม

กําหนดค่าเค้าโครงตัวกรอง

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

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

หมายเหตุ

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

<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. ใส่ "เค้าโครงตัวกรองภาษา" ในเขตข้อมูล ชื่อ และเพิ่มโค้ด เค้าโครงตัวกรอง และเลือก บันทึกเป็นใหม่
  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คุณสมบัติ and 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. ใส่ "คิวรีทรัพยากรภาษา" ในเขตข้อมูล ชื่อ เพิ่มรหัส คิวรีทรัพยากรเรียกข้อมูล และเลือก บันทึกเป็นรายการใหม่
  5. เลือก บันทึก เรกคอร์ดการกําหนดค่าใหม่จะถูกสร้างขึ้นซึ่งเชื่อมโยงบอร์ดกําหนดการนี้ไปยังบันทึก

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

กําหนดค่าตัวช่วยจัดกําหนดการ

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

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

กําหนดค่าเค้าโครงตัวกรองตัวช่วยสร้างกําหนดการ

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

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

หมายเหตุ

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

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

เค้าโครงตัวกรองผู้ช่วยกําหนดการที่สมบูรณ์

<?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. ที่ด้านล่างของกล่องโต้ตอบการตั้งค่าบอร์ด เลือกบันทึก

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

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

สำหรับขั้นตอนต่อไปนี้ ใช้ตัวแก้ไขข้อความที่สนับสนุนไวยากรณ์ 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 จะถูกส่งกลับจาก คิวรีทรัพยากรเรียกใช้ แบบกําหนดเองของเราที่เราตั้งค่า เยี่ยมชมเว็บไซต์ 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 สากล