共用方式為


範例:使用自訂語言限制式來擴充 Universal Resource Scheduling

本逐步指南隨附於了解和自訂 Universal Resource Scheduling 中的資源比對

在此逐步指南中,我們將會使用 Language 限制來擴充 Universal Resource Scheduling 資源。 請考慮想要依其所說語言篩選資源的組織。 他們還想要在 Requirement 記錄上擷取工作所需的語言。 此限制遵循內建 Territory 限制的小型模式。 新的主要實體 Language 會儲存資源所能說的不同語言。 Resource 記錄接著可以透過多對多關聯實體來與許多 Languages 建立關聯。 在 Requirement 實體上,我們會建立下列兩個新的查詢屬性來建立這樣的模型:Primary LanguageSecondary Language。 尋找需求的可用資源時,只會顯示與 Primary LanguageSecondary Language 有關聯的資源。

建立新的實體及關聯

本節將會為主要 Language 實體的建立新的結構描述,並以對應的關聯將 ResourceRequirement 實體更新至新的 Language 實體。

建立新的發行者

  1. 在 Dynamics 365 的 [自訂] 下方,建立新的發行者

  2. 將以下詳細資料填入 [新的發行者] 表單:

    欄位 Value
    顯示名稱 Language
    名字 語言
    首碼 lang
  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 版面配置定義。

Note

為了進行此練習,我們會從 [篩選] 面板移除 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 編輯器中,會很有幫助。

[擷取資源查詢] 設定是資源比對 API 所使用的 UFX 查詢。 它接受 [] 面板中輸入的值做為輸入,並動態執行正確的 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 聯結。

以下是每個 elementattribute 的描述:

名稱 描述
link-entity 建立資源實體與語言實體之間多對多關聯的聯結
ufx:if 如果此屬性中的 XPath 運算式傳回值,僅發出此 FetchXML 元素 (link-entity)
attribute 傳回相符的主要或次要語言
filtercondition 將多對多關聯記錄篩選成只有符合指定之語言識別碼的記錄
ufx:valueselect select 屬性中XPath 運算式結果的輸出
ufx:applyselect 對每個從 select 屬性中 XPath 運算式傳回的結果發出下層 FetchXML 元素
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>

以下是每個 elementattribute 的描述:

名字 描述
lang_order 在每個從 FetchXML 查詢傳回的資源中建立新的屬性,名為 lang_order
ufx:select 將此屬性 (Attribute) 中 XPath 運算式的結果指派給 lang_order 屬性 (Property)。 稍早在查詢中擷取的 lang_primarylang_secondary 屬性會與 XPath iif 函數一起用來判斷資源比對順序。

排序結果

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

UFX 查詢是依照循序順序來處理。 透過 FetchXML 擷取資源之後,會將結果指派給 Resources 屬性。 我們依據稍早所新增的 lang_order 屬性排序結果,再將排序的結果重新指派給 Resources 屬性。

以下是每個 elementattribute 的描述:

名字 描述
Resources 重新指派 Resources 屬性
ufx:select 將此屬性 (Attribute) 中 XPath 運算式的結果指派給 Resources 屬性 (Property)。 XPath order 函數會用來依據 lang_order 屬性排序 Resources 清單。

Note

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 編輯器中,會很有幫助。

[排程小幫手篩選版面配置] 設定如同 [排程面板篩選版面配置] 一樣,也會定義 [篩選] 面板中控制項的版面配置。 由於排程小幫手使用的篩選比排程面板使用的還要多 (例如 [開始時間]、[結束時間]、[期間] 等),因此會使用不同的版面配置。

Note

為進行在此練習,我們在 [排程小幫手篩選版面配置] 設定中僅重複使用 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 編輯器中,會很有幫助。

[擷取限制查詢] 設定是 [擷取需求限制] API 所使用的 UFX 查詢。 它接受 ID 需求記錄識別碼 (在使用者介面中所選取) 做為輸入,並傳回需求記錄及其所有下層記錄。

Note

Universal Resource Scheduling 隨附的預設擷取限制查詢是支援所有包含於 Universal Resource Scheduling 之需求限制的大型查詢。 為了進行此練習,我們僅使用預設查詢的子集,並新增 [語言] 做為唯一的篩選。

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

UFX 查詢是依照循序順序來處理。 [擷取限制查詢] 使用 FetchXML 來查詢 Requirement (msdyn_resourcerequirement) 實體,並將結果 (需求記錄) 指派給 Requirement 屬性。 我們會將結合 [主要語言] 和 [次要語言] 這兩個屬性 (Attribute) 成為實體單一清單 (EntityCollection) 的新屬性 (Property) Languages 新增至限制屬性包。 因為我們要在 [篩選] 面板中顯示 [語言] 控制項做為記錄清單,這樣做有其必要。 另外也可以在 [篩選] 面板中,為兩個屬性建立兩個不同的控制項。

以下是每個 elementattribute 的描述:

名字 描述
Languages 在結果限制屬性包中建立新的屬性,名為 Languages
ufx:select 將此屬性 (Attribute) 中 XPath 運算式的結果指派給 Languages 屬性 (Property)。 lang_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. 在右上方,按一下 [開啟預設設定]
  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_primarylang_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 擴充性版本資訊