Споделяне чрез


Пример: Разширяване на 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. Попълнете формуляра за нов публикуващ с данните по-долу:

    Поле 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. Можете да затворите редактора на формуляри

Резюме

В стъпките по-горе ние създадохме новия обект „Език”. След това добавихме нова релация с обектите „Ресурс” и „Изискване”. Ресурси могат да бъдат свързани с множество езици, тъй като ние добавяме релация „много към много” между език и ресурс. Изискванията могат да бъдат свързани с два езика, тъй като ние добавихме два справочни атрибута на обекта „Изискване”, сочещи към новия обект „Език”.

Добавяне на данни

Използвайте разширено търсене, за да добавите нови записи към обекта „Език”. След това можете да свържете записи на ресурс към записите на новия език чрез отваряне на запис на ресурс и навигиране до релацията „Език” в лентата за навигация. За записи на изискване можете да попълните полетата за нов основен и вторичен език във формуляра на изискването.

Персонализиране на таблото на графика

За да филтрираме ресурси в таблото на графика с ограничение за новия език, ние ще актуализираме заявката за извличане на ресурси и записите на конфигурация на оформлението на филтър.

Конфигурация на оформление на филтър

Tipp

За стъпките по-долу е полезно да използвате текстов редактор, който поддържа маркиране на XML синтаксис, за да направите промените си, след което да поставите промените си обратно в редактора на Universal Resource Scheduling.

Конфигурацията на оформление на филтър е дефиниция на XML оформлението за персонализиране на оформлението на панела на филтъра.

Hinweis

За това упражнение ще премахнем всички филтри по подразбиране, предоставени с 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. В долната част на диалоговия прозорец щракнете върху „Прилагане”.

Съвет ще се презареди и вие ще видите панела на филтъра вляво с новото оформление; само филтърът „Езици” ще бъде наличен. Филтрирането няма да работи все още, тъй като ние трябва да актуализираме заявката за извличане на ресурси да се възползва от новия филтър.

Конфигурация на заявка за извличане на ресурси

Tipp

За стъпките по-долу е полезно да използвате текстов редактор, който поддържа маркиране на 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>

Стойностите, избрани в панела на филтъра, се подават като входни данни за заявката и са на разположение в променливата XPath $input

Заявката за извличане на ресурси използва FetchXML за търсене на обекта Resource (bookableresource). Ние използваме FetchXML link-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, извлечени по-рано от тази заявка, се използват заедно с функцията 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.

Hinweis

Заявката за извличане на по подразбиране, предоставена с 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 заявката връща само съответстващи ресурси.

Персонализиране на асистента на графика

Трябва да персонализираме оформлението на филтъра на асистента на графика и конфигурациите на заявката за извличане на ограничения, за да използваме новите ограничения на език в асистента на графика.

За разлика от персонализациите на таблото на графика, където всяко табло може да бъде персонализирано индивидуално, персонализациите на асистента на графика се отразяват на всички табла, където се използва асистентът на графика. Персонализациите на асистента на графика могат да бъдат специфични за планируем тип или за всички типове. В този пример ще персонализирате асистента на графика за всички типове.

Конфигурация на оформлението на филтъра на асистента на графика

Tipp

За стъпките по-долу е полезно да използвате текстов редактор, който поддържа маркиране на XML синтаксис, за да направите промените си, след което да поставите промените си обратно в редактора на Universal Resource Scheduling.

Конфигурацията на оформлението на филтъра на асистента на графика подобно на оформлението на филтъра на таблото на графика определя оформлението на контролите в панела на филтъра. Тъй като асистентът на графика използва повече филтри отколкото таблото на графика, като начален час, краен час, продължителност и др., се използва различно оформление.

Hinweis

За това упражнение ще използваме повторно само подмножество от филтрите по подразбиране, предоставени в 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. В долната част на диалоговия прозорец щракнете върху „Прилагане”.

Таблото ще се зареди повторно. На следващо място трябва да променим заявката за ограничения на извличане, преди да можем да използваме асистента на графика с нашите нови ограничения за език, така че езиците, зададени в изискването, да са част от търсенето на асистента на графика.

Конфигурация на заявка за извличане на ограничения

Tipp

За стъпките по-долу е полезно да използвате текстов редактор, който поддържа маркиране на XML синтаксис, за да направите промените си, след което да поставите промените си обратно в редактора на Universal Resource Scheduling.

Конфигурацията на заявката за извличане на ограничения е UFX заявка, използвана от API за извличане на ограничения за изискване. Тя взема като входни данни ИД на записа на изискване (избран в потребителския интерфейс) и връща записа на изискването и всички негови дъщерни записи.

Hinweis

Заявката за извличане на ограничения по подразбиране, предоставена с 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, се подават към 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. В долната част на диалоговия прозорец щракнете върху „Прилагане”.

Таблото ще се зареди повторно с актуализираната конфигурация. Филтрирането на асистента на графика вече ще работи. Ако сте създали записи на език и сте ги свързани със записи на изискване, вече ще можете да изберете запис за изискване в долната част на таблото на графика, щракнете върху „Търсене на наличност”, за да стартирате асистента на график и да виждате само ресурси, съответстващи на езиците, записани в изискването.

Конфигурация на шаблон на клетка на ресурс

Tipp

За стъпките по-долу е полезно да използвате текстов редактор, който поддържа маркиране на 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

Hinweis

Можете ли да ни споделите повече за езиковите си предпочитания за документацията? Попълнете кратко проучване. (имайте предвид, че това проучване е на английски език)

Проучването ще отнеме около седем минути. Не се събират лични данни (декларация за поверителност).