共用方式為


示例:透過自訂語言限制以擴展 Universal Resource Scheduling 功能

本分步指南是 瞭解和自定義 Universal Resource Scheduling 中的資源匹配的配套指南

在此逐步指南中,我們將會使用 Language 限制式來擴充通用資源排程資源。 考慮一個希望根據語言來篩選資源的組織。 他們還希望在Requirement記錄中註明工作所需的語言。 此約束遵循與內置 Territory 約束類似的模式。 新的主實體 Language 存儲資源可以使用的不同語言。 Resource 記錄接著可以透過多對多關聯實體來與許多 Languages 建立關聯。 在實體上 Requirement ,我們通過創建兩個新的查找屬性來對此進行建模: Primary LanguageSecondary Language。 當系統查找要求的可用資源時,只會顯示與 Primary LanguageSecondary Language 相關聯的資源。

創建新實體和關係

在本節中,我們將為主Language實體創建新的綱要,並更新ResourceRequirement實體,使其與新的Language實體有相應關係。

創建新的 Publisher

  1. 在 Dynamics 365 中的 Customizations 下,創建一個新的 Publisher。

  2. 填寫 New Publisher 表單,其中包含以下詳細資訊:

    領域 價值觀
    顯示名稱 語言
    名稱 語言
    前綴
  3. 選取儲存後關閉

創建新解決方案

  1. 在 Dynamics 365 的 自定義項 下,創建新解決方案。

  2. 填寫 New Solution 表單,其中包含以下詳細資訊:

    領域 價值觀
    顯示名稱 語言
    名稱 語言
    發行人 語言
    版本 1.0.0.0
  3. 選取 [儲存]。

創建語言實體

  1. 在語言解決方案中,建立一個新實體。

  2. 填寫 New Entity 表單,其中包含以下詳細資訊:

    領域 價值觀
    顯示名稱 語言
    複數名稱 語言
    名稱 lang_language ( lang_ 前置綴將自動填充且為唯讀)
  3. 選取 [儲存]。

建立從資源實體到語言實體的多對多關聯

  1. 在語言實體中,創建新的多對多關係。

  2. 填寫 New Relationship 表單,其中包含以下詳細資訊:

    領域 價值觀
    當前實體
    顯示選項 使用複數名稱
    其他實體
    實體名稱 可預約資源
  3. 選取儲存後關閉

  4. 關閉 [語言] 實體表單。

建立從需求實體到語言實體的關聯

  1. 在語言解決方案中,將現有的資源需求實體新增至解決方案。 如果出現 [遺失必要元件] 對話方塊,請選取 [否,不包括必要元件]。

  2. 在 Resource Requirement (資源要求) 實體中,創建一個新欄位。

  3. 填寫 New Field 表單,其中包含以下詳細資訊:

    領域 價值觀
    顯示名稱 主要語言
    數據類型 查詢
    目標記錄類型 語言
  4. 選取儲存後關閉

  5. 在 Resource Requirement (資源要求) 實體中,創建一個新欄位。

  6. 填寫 New Field 表單,其中包含以下詳細資訊:

    領域 價值觀
    顯示名稱 第二語言
    數據類型 查詢
    目標記錄類型 語言
  7. 選取儲存後關閉

更新需求主表單

  1. 在 Resource Requirement 實體中,將現有資訊表單添加到實體的子元件中。 如果出現“缺少必要組件”對話框,請選擇“不,請勿包含必要組件”。
  2. Information (資訊 ) 表單中,使用 Field Explorer 將兩個新屬性(主要語言和輔助語言)添加到表單中,以便使用者可以在創建要求時輸入此資訊。
  3. 選取 [儲存]。
  4. 選取 [] 發佈 []。

總結

在上述步驟中,我們創建了新的 Language 實體。 接著會加入與資源及需求實體的新關聯。 資源可以與多種語言相關,因為我們在 Language 和 Resource 之間添加了多對多關係。 要求可以與兩種語言相關,因為我們在 Requirement 實體上添加了兩個指向新 Language 實體的查找屬性。

添加數據

使用 Advanced Find 將新記錄新增到 Language 實體。 然後,您可以打開資源記錄,並在導航欄中找到語言關係,將資源記錄關聯到新的語言記錄。 對於需求記錄,您也可以填入 [需求] 表單上新的 [主要語言] 及 [次要語言] 欄位。

自訂日程安排板

要使用新的語言約束篩選日程安排板中的資源,我們更新了 Retrieve Resources Query 和 Filter Layout 配置記錄。

備註

這些日程安排板自定義將統一應用於所有選項卡,不能按選項卡單獨設置。這適用於 日程安排助理篩選器佈局“日程安排助理檢索資源查詢”、“ 日程安排助理資源單元格範本”和 “日程安排助理檢索約束查詢”。

篩選器佈局配置

小提示

對於以下步驟,使用支援 XML 語法突出顯示的文字編輯器進行更改,然後將更改貼回「通用資源排程」編輯器中會很有幫助。

Filter Layout(過濾器佈局)配置是一個 XML 佈局定義,用於自定義 Filter(過濾器)面板的佈局。

備註

在本練習中,我們將從 Filter (篩選器) 面板中刪除 Universal Resource Scheduling 附帶的所有預設篩選器,並將 Languages (語言) 添加為唯一可用的篩選器。

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

control 元素將新控件添加到 Filter 面板。 以下是每個屬性的描述:

名稱 說明
type 篩選器控件的類型。 控件 combo 呈現一個下拉清單,其中包含可供選擇的值
source 下拉式控制項的值來源。 entity 來源會在下拉式清單中顯示實體記錄
key 用於將所選值存儲在 constraints 屬性包中的鍵
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 的頂部導航欄中,轉到 Resource Scheduling>日程安排板
  2. 在右上角,選擇 + 標誌以創建新板。
  3. 為新的面板語言命名。
  4. 在對話框底部,選擇 Add. 將會建立新的面板。

更新日程安排板篩選器佈局

接下來,我們創建一個新的配置記錄,其中存儲日程安排板使用的篩選器佈局和查詢,然後將新創建的日程安排板連結到新的配置記錄。 有多種方法可以做到這一點,但這是最快的:

  1. 選擇 Language (語言 ) 選項卡。
  2. 向下滾動到 常規設置>其他設置
  3. 找到 Filter Layout 字段,選擇右側的按鈕以打開編輯器
  4. 使用上面的 Filter Layout 代碼更新 Value 字段,然後選擇 Save As。
  5. 在 Name 欄位中輸入 「Language Filter Layout」 ,然後選擇 Save 。 這將創建一個新的配置記錄,並將此日程安排板連結到該記錄。
  6. 在對話框底部,選擇Apply

控制面板將重新載入,您會在左側看到篩選器面板的新佈局;只有語言篩選器可用。 篩選還不起作用,因為我們需要更新 Retrieve Resources Query (檢索資源查詢) 以利用新的篩選條件。

檢索資源查詢配置

小提示

對於以下步驟,使用支援 XML 語法突出顯示的文字編輯器進行更改,然後將更改貼回「通用資源排程」編輯器中會很有幫助。

[擷取資源查詢] 設定是資源比對 API 所使用的 UFX 查詢。 它將在 Filter (過濾器) 面板中輸入的值作為輸入,並動態構建正確的 FetchXML 以查找匹配的資源。

以下是添加到 Retrieve Resources Query 的新代碼段,用於按資源的語言進行匹配和排序。

將聯接從 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>

在 Filter (過濾器) 面板中選擇的值將作為輸入傳遞給查詢,並在 XPath $input 變數中可用

Retrieve Resources Query 使用 FetchXML 查詢 Resource (bookableresource) 實體。 我們使用 FetchXML link-entity 元素僅返回與在 Filter (篩選) 面板中選擇的 Language records (語言) 記錄關聯的資源。 為了支持顯示匹配的語言並按主要或輔助語言排序(稍後在 資源儲存格範本部分介紹),我們使用了多個 link-entity 聯接。

以下是每個 elementattribute的描述:

名稱 說明
link-entity 建立資源實體與語言實體之間多對多關聯的聯結
ufx:if 僅當此屬性中的 XPath 運算式返回值時,才發出此 FetchXML 元素 ()link-entity
attribute 返回匹配的主要或輔助語言
filtercondition 將多對多關係記錄篩選為僅與指定語言 ID 匹配的記錄
ufx:valueselect select 屬性中輸出 XPath 運算式的結果
ufx:applyselect 對每個從 select 屬性中 XPath 運算式傳回的結果發出下層 FetchXML 元素
value 包含語言記錄的識別碼

確定 Resource 的排序順序

檢索到匹配的資源后,根據每個資源的分配語言,我們分配一個新 lang_order 屬性來確定其排序順序。

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

以下是每個 elementattribute的描述:

名稱 說明
lang_order 在從 FetchXML 查詢返回的每個 Resource 中創建一個名為 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

以下是每個 elementattribute的描述:

名稱 說明
Resources 重新分配 Resources 屬性
ufx:select 將此特性中 XPath 運算式的結果分配給屬性 Resources 。 XPath order 函數用於根據其lang_order屬性對Resources清單進行排序。

備註

Universal Resource Scheduling 附帶的默認檢索資源查詢是一個大型查詢,它支援 Universal Resource Scheduling 中包含的所有資源約束。 在本練習中,我們將僅使用預設查詢的子集,並將 Languages 添加為唯一的篩選器。

<?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. 找到 Retrieve Resources Query 字段,選擇右側的按鈕以打開編輯器
  4. 使用上面的 Retrieve Resources Query 代碼更新 Value 欄位,然後選擇 Save As
  5. 在 Name 欄位中輸入 「Language Resources Query」,然後選擇 Save 。 這將創建一個新的配置記錄,並將此日程安排板連結到該記錄。
  6. 在對話框底部,選擇Apply

面板會載入已更新的設定。 篩選現在可以正常工作。 如果您創建了語言記錄並將其與 Resource records(資源記錄)關聯,則現在可以按資源的關聯語言篩選資源。

總結

在上述步驟中,我們修改了 Filter 面板以顯示 Language 實體的篩選器控件。 我們還修改了 Retrieve Resources Query(檢索資源查詢)以匹配與所選 Language 記錄關聯的資源。 當使用者在篩選器控件中選擇值並選擇 Search 時,這些值將傳遞到查詢中,並且 FetchXML 查詢僅返回匹配的資源。

自定義日程安排助理

我們需要自定義 Schedule Assistant 篩選器佈局和 Retrieve Constraints 查詢配置,以使用日程安排助理中的新語言約束。

與日程安排板自定義不同,日程安排板的每個看板都可以單獨自定義,而日程安排助理的自定義會影響所有使用日程安排助理的看板。 日程安排助理的設定可針對特定的可排程類型或所有類型進行自定義。 在此示例中,我們將為所有類型的行程助理進行調整。

日程安排助手篩選器佈局配置

小提示

對於以下步驟,使用支援 XML 語法突出顯示的文字編輯器進行更改,然後將更改貼回「通用資源排程」編輯器中會很有幫助。

Schedule Assistant 篩選器佈局配置與 Schedule Board 篩選器佈局一樣,定義 Filter (篩選器) 面板中控件的佈局。 由於日程安排助理使用的篩選器比日程安排板多,例如開始時間、結束時間、持續時間等,因此使用了不同的佈局。

備註

在本練習中,我們將僅重複使用 Universal Resource Scheduling 中 Schedule Assistant 篩選器佈局配置中提供的預設篩選器的子集,並將 Languages 下拉列表添加為唯一可用的篩選器。

我們添加到佈局中的篩檢程式與上面 Filter Layout Configuration 中的篩檢程式相同。 需要其他控件來修改 Schedule Assistant 搜索參數。

完整的日程安排助理篩選器佈局

<?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. 在右上角,選擇 Open Default Settings (打開預設設定)
  3. 滾動到 Schedule Types 部分,然後在左側清單中選擇 None
  4. 找到 Schedule Assistant Filter Layout 字段,選擇右側的按鈕以打開編輯器
  5. 使用上面的日程安排助理篩選器布局代碼更新 Value 字段,然後選擇 Save As
  6. 在名稱欄位中輸入「語言日程安排助理篩選器佈局」 然後選擇保存。 這將創建一個新的配置記錄,並將此日程安排板連結到該記錄。
  7. 在對話框底部,選擇Apply

面板會重新載入。 接下來,我們需要先更改 Retrieve Constraints Query,然後才能將 Schedule Assistant 與新的語言約束一起使用,以便 Requirement 上設置的語言是 Schedule Assistant 搜索的一部分。

擷取限制查詢設定

小提示

對於以下步驟,使用支援 XML 語法突出顯示的文字編輯器進行更改,然後將更改貼回「通用資源排程」編輯器中會很有幫助。

[擷取限制查詢] 設定是 [擷取需求限制] API 所使用的 UFX 查詢。 它採用要求記錄的 ID(在 UI 中選擇)作為輸入,並返回要求記錄及其所有子記錄。

備註

Universal Resource Scheduling 附帶的默認檢索約束查詢是一個大型查詢,它支援 Universal Resource Scheduling 中包含的所有要求約束。 在本練習中,我們將僅使用預設查詢的子集,並將 Languages 添加為唯一的篩選器。

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

UFX 查詢按順序處理。 檢索約束查詢使用 FetchXML 查詢 Requirement (msdyn_resourcerequirement) 實體,並將結果(要求記錄 Requirement )分配給屬性。 我們正在向 constraints 屬性包中添加一個新屬性,該屬性 Languages 將 Primary Language 和 Secondary Language 這兩個屬性合併到一個實體清單 (EntityCollection) 中。 這是必需的,因為我們在 Filter (篩選) 面板中將 Languages (語言) 控制件顯示為記錄清單。 另一種方法是在 Filter (過濾器) 面板中為這兩個屬性創建兩個單獨的控制件。

以下是每個 elementattribute的描述:

名稱 說明
Languages 在結果約束屬性包中新增一個名為 Languages 的屬性。
ufx:select 將此特性中 XPath 運算式的結果分配給屬性 Languageslang_primarylanguagelang_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. 在右上角,選擇 Open Default Settings (打開預設設定)
  3. 滾動到 Schedule Types 部分,然後在左側清單中選擇 None
  4. 找到 Schedule Assistant Retrieve Constraints Query 欄位,選擇右側的按鈕以打開編輯器
  5. 使用上面的 Retrieve Resources Query 代碼更新 Value 欄位,然後選擇 Save As
  6. 在 Name 欄位中輸入 「Language Constraints Query」 並選擇 Save 。 這將創建一個新的配置記錄,並將此日程安排板連結到該記錄。
  7. 找到 Schedule Assistant Retrieve Resources Query 欄位,然後選擇我們之前為 Schedule Board 自定義創建的 Languages Resources Query
  8. 在對話框底部,選擇Apply

面板會載入已更新的設定。 Schedule Assistant 篩選現在可以正常工作。 如果您創建了語言記錄並將其與要求記錄關聯,您現在可以在日程安排板底部選擇要求記錄,選擇 查找可用性 以啟動日程安排助理,並僅查看與要求中保存的語言匹配的資源。

Resource Cell 範本配置

小提示

對於以下步驟,使用支援 HTML 語法突出顯示的文字編輯器進行更改,然後將變更重新貼上至 Universal Resource Scheduling 編輯器,這會很有幫助。

Resource Cell Template 配置是一個 Handlebars 範本,用於在資源單元格中呈現內容。 Retrieve Resources Query (檢索資源查詢) 的輸出可用於範本。

我們正在修改預設資源範本,如果資源與主要語言和輔助語言匹配,則顯示綠色 ✔ ✱ 指示符,如果資源僅與主要語言匹配,則顯示綠色✔指示符,如果資源僅與輔助語言匹配,則顯示黃色✔指示符。

{{#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_primarylang_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. 在右上角,選擇 Open Default Settings (打開預設設定)
  3. 滾動到 Schedule Types 部分,然後在左側清單中選擇 None
  4. 找到 Schedule Assistant Resource Cell Template 欄位,選擇右側的按鈕以打開編輯器
  5. 使用上面的 Resource Cell Template 代碼更新 Value 字段,然後選擇 Save As
  6. 在 Name 欄位中輸入 「Language Resource Cell Template」 ,然後選擇 Save 。 這將創建一個新的配置記錄,並將此日程安排板連結到該記錄。
  7. 在對話框底部,選擇Apply

面板會載入已更新的設定。 資源儲存格現在將指示資源如何與 Filter (過濾器) 面板中的語言約束匹配。

總結

在上述步驟中,我們修改了 Schedule Assistant 中的 Filter (篩選器) 面板,以顯示 Language (語言) 實體的篩選器控件。 我們還修改了 Retrieve Constraints Query 以查詢與 Requirement 實體相關的新 Language 屬性,並將它們調整為清單。 當使用者選擇查找需求記錄的可用性時,篩選面板將顯示捕獲的語言約束。 Filter (篩選) 面板中的值將傳遞到 Retrieve Resources (檢索資源) 查詢中,而 FetchXML 查詢僅返回匹配的資源。

另請參閱

Universal Fetch XML

通用資源排程擴充性版本資訊