แชร์ผ่าน


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

คำแนะนำทีละขั้นตอนนี้จะมีให้พร้อมกับ การทำความเข้าใจและการกำหนดการจับคู่ทรัพยากรใน Universal Resource Scheduling

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

การสร้างเอนทิตีและความสัมพันธ์ใหม่

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

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

  1. ใน Dynamics 365 ภายใต้การกำหนดเอง สร้างผู้เผยแพร่ใหม่

  2. กรอกฟอร์ม New Publisher ด้วยรายละเอียดด้านล่าง:

    ฟิลด์ Value
    ชื่อที่แสดง Language
    ชื่อ ภาษา
    คำนำหน้า ภาษา
  3. คลิกบันทึกและปิด

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

  1. ใน Dynamics 365 ภายใต้การกำหนดเอง สร้างโซลูชันใหม่

  2. กรอกฟอร์มผู้เผยแพร่ใหม่ด้วยรายละเอียดด้านล่าง:

    ฟิลด์ Value
    ชื่อที่แสดง Language
    ชื่อ Language
    ผู้เผยแพร่ Language
    รุ่น 1.0.0.0
  3. คลิก บันทึก

สร้างเอนทิตีภาษา

  1. ในโซลูชันภาษา สร้างเอนทิตีใหม่

  2. กรอกฟอร์มเอนทิตีใหม่ด้วยรายละเอียดด้านล่าง:

    ฟิลด์ Value
    ชื่อที่แสดง Language
    ชื่อที่เป็นรูปพหูพจน์ ภาษา
    ชื่อ lang_language (คำนำหน้า lang_ จะถูกเติมโดยอัตโนมัติ และเป็นแบบอ่านอย่างเดียว)
  3. คลิก บันทึก

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

  1. ในเอนทิตีภาษา สร้างความสัมพันธ์แบบกลุ่มต่อกลุ่มใหม่

  2. กรอกฟอร์มความสัมพันธ์ใหม่ด้วยรายละเอียดด้านล่าง:

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

  4. ปิดแบบฟอร์มเอนทิตีของภาษา

สร้างความสัมพันธ์จากเอนทิตีความต้องการไปยังเอนทิตีภาษา

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

  2. ในเอนทิตีความต้องการทรัพยากร สร้างฟิลด์ใหม่

  3. กรอกฟอร์มฟิลด์ใหม่ด้วยรายละเอียดด้านล่าง:

    ฟิลด์ Value
    ชื่อที่แสดง ภาษาหลัก
    ชนิดข้อมูล ค้นหา
    ชนิดของเรกคอร์ด เป้าหมาย Language
  4. คลิกบันทึกและปิด

  5. ในเอนทิตีความต้องการทรัพยากร สร้างฟิลด์ใหม่

  6. กรอกฟอร์มฟิลด์ใหม่ด้วยรายละเอียดด้านล่าง:

    ฟิลด์ Value
    ชื่อที่แสดง ภาษารอง
    ชนิดข้อมูล ค้นหา
    ชนิดของเรกคอร์ด เป้าหมาย Language
  7. คลิกบันทึกและปิด

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

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

สรุป

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

การเพิ่มข้อมูล

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

การกำหนดค่าบอร์ดกำหนดการ

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

การตั้งค่าคอนฟิกเค้าโครงตัวกรอง

เคล็ดลับ

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

ปรับปรุงเค้าโครงตัวกรองของบอร์ดการจัดการกำหนดการ

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

  1. ที่ด้านบนขวา ให้คลิกสองครั้งที่แท็บภาษา
  2. เลื่อนลงไปยังการตั้งค่าทั่วไป > การตั้งค่าอื่นๆ
  3. ค้นหาฟิลด์โครงร่างตัวกรอง คลิกปุ่มทางด้านขวาเพื่อเปิดโปรแกรมแก้ไข
  4. ปรับปรุงค่าฟิลด์ด้วยรหัสเค้าโครงตัวกรองด้านบน และคลิก บันทึกเป็น
  5. ป้อน "เค้าโครงตัวกรองภาษา" ในฟิลด์ชื่อ และคลิกบันทึก รายการนี้สร้างเรกคอร์ดการตั้งค่าคอนฟิกใหม่และเชื่อมโยงบอร์ดกำหนดการนี้กับเรกคอร์ด
  6. ที่ด้านล่างของกล่องโต้ตอบ ให้คลิก นำไปใช้

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

การตั้งค่าคอนฟิกการสอบถามในการเรียกข้อมูลทรัพยากร

เคล็ดลับ

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

การตั้งค่าคอนฟิกการเรียกข้อมูลการสอบถามของทรัพยากร คือ แบบสอบถาม 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>

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

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

นี่คือคำอธิบายของ 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 ที่เรียกข้อมูลก่อนหน้านี้ในแบบสอบถาม ถูกใช้ร่วมกับฟังก์ชัน iif XPath เพื่อกำหนดใบสั่งที่ตรงกันของทรัพยากร

การเรียงลำดับผลลัพธ์

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

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

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

ชื่อ รายละเอียด
Resources มอบหมายคุณสมบัติ Resources อีกครั้ง
ufx:select มอบหมายผลลัพธ์ของนิพจน์ XPath ในแอตทริบิวต์นี้ไปยังคุณสมบัติ Resources ฟังก์ชัน order XPath ถูกใช้เรียงลำดับรายการ 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. ป้อน "การสอบถามทรัพยากรภาษา" ในฟิลด์ชื่อ และคลิกบันทึก รายการนี้สร้างเรกคอร์ดการตั้งค่าคอนฟิกใหม่และเชื่อมโยงบอร์ดกำหนดการนี้กับเรกคอร์ด
  6. ที่ด้านล่างของกล่องโต้ตอบ ให้คลิก นำไปใช้

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

สรุป

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

การกำหนดค่าผู้ช่วยจัดกำหนดการ

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

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

การตั้งค่าคอนฟิกเค้าโครงตัวกรองของผู้ช่วยจัดกำหนดการ

เคล็ดลับ

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

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

การตั้งค่าคอนฟิกการสอบถามเรียกข้อมูลข้อจำกัด

เคล็ดลับ

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

การตั้งค่าคอนฟิกการสอบถามการเรียกข้อมูลข้อจำกัด คือ แบบสอบถาม UFX ซึ่งใช้โดย API ข้อจำกัดในการเรียกข้อมูลความต้องการ ซึ่งใช้เป็นข้อมูลป้อนเข้ารหัสของเรกคอร์ดความต้องการ (ที่เลือกไว้ใน UI) และส่งกลับเรกคอร์ดความต้องการและเรกคอร์ดรองทั้งหมด

หมายเหตุ

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

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

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

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

ชื่อ คำอธิบาย
Languages สร้างคุณสมบัติใหม่ในที่เก็บคุณสมบัติของข้อจำกัดผลลัพธ์ที่มีชื่อว่า Languages
ufx:select มอบหมายผลลัพธ์ของนิพจน์ XPath ในแอตทริบิวต์นี้ไปยังคุณสมบัติ Languages คุณสมบัติ lang_primarylanguage และ lang_secondarylanguage ที่เรียกใช้ก่อนหน้านี้ในแบบสอบถาม และพร้อมใช้งานในคุณสมบัติ Requirement ถูกส่งผ่านไปยังฟังก์ชัน XPath lookup-to-list ซึ่งแปลงคุณสมบัติ 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. ค้นหาฟิลด์การสอบถามการเรียกข้อมูลของผู้ช่วยจัดการกำหนดการ และเลือกการสอบถามทรัพยากรภาษาที่เราได้สร้างไว้ก่อนหน้านี้สำหรับการกำหนดค่าบอร์ดกำหนดการ
  8. ที่ด้านล่างของกล่องโต้ตอบ ให้คลิก นำไปใช้

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

การตั้งค่าคอนฟิกเท็มเพลตเซลล์ทรัพยากร

เคล็ดลับ

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

การตั้งค่าคอนฟิกเท็มเพลตเซลล์ทรัพยากรคือ เท็มเพลต Handlebars ที่ใช้ในการแสดงเนื้อหาในเซลล์ทรัพยากร เอาต์พุตจากแบบสอบถามการเรียกข้อมูลทรัพยากรจะพร้อมใช้งานสำหรับเท็มเพลต

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

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

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

สรุป

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

ดูเพิ่มเติม

Fetch XML สากล

Universal Resource Scheduling บันทึกย่อประจำรุ่นของความสามารถในการเพิ่ม