Sdílet prostřednictvím


Ukázka: Rozšíření Universal Resource Scheduling s vlastním omezením jazyka

Tento podrobný průvodce doprovází téma Princip a přizpůsobení párování zdrojů v Universal Resource Scheduling

V tomto podrobném průvodci rozšíříme zdroje Universal Resource Scheduling pomocí omezení Language. Představte si organizaci, která chce filtrovat zdroje podle jazyků, jimiž hovoří. Chtějí také zachytit na záznam Requirement jazyk potřebný pro úlohu. Toto omezení následuje podobný vzorec jako vestavěné omezení Territory. Nová hlavní entita Language bude mít uložené různé jazyky, jimiž může zdroj mluvit. Záznam Resource pak může být přidružen k mnoha Languages prostřednictvím entity vztahu n: n. V entitě Requirement to budeme modelovat vytvořením dvou nových vyhledávacích atributů: Primary Language a Secondary Language. Při hledání dostupných zdrojů pro požadavek se budou zobrazovat pouze zdroje přidružené buď Primary Language nebo Secondary Language.

Vytváření nových entit a vztahů

V této části vytvoříme nové schéma pro hlavní entitu Language a aktualizovat entity Resource a Requirement entity o odpovídající vztahy s novou entitou Language.

Vytvoření nového vydavatele

  1. V Dynamics 365 ve skupinovém rámečku Vlastní nastavení vytvořte nového vydavatele

  2. Vyplňte formulář Nový vydavatel následujícími podrobnostmi:

    Pole Value
    Zobrazovaný název Language
    Jméno jazyk
    Předpona lang
  3. Klikněte na tlačítko Uložit a zavřít.

Vytvoření nového řešení

  1. V Dynamics 365 ve skupinovém rámečku Vlastní nastavení vytvořte nové řešení

  2. Vyplňte formulář Nové řešení následujícími podrobnostmi:

    Pole Value
    Zobrazovaný název Language
    Jméno Language
    Vydavatel Language
    Verze 1.0.0.0
  3. Klikněte na Uložit.

Vytvoření entity Jazyk

  1. V řešení Jazyk vytvořte novou entitu.

  2. Vyplňte formulář Nová entita následujícími podrobnostmi:

    Pole Value
    Zobrazovaný název Language
    Plurální název Jazyky
    Jméno lang_language (předpona lang_ bude automaticky vyplněná a je jenom ke čtení)
  3. Klikněte na Uložit.

Vytvoření vztahu n n z entity Zdroj do entity Jazyk

  1. V entitě Jazyk vytvořte nový vztah n:n

  2. Vyplňte formulář Nový vztah následujícími podrobnostmi:

    Pole Value
    Aktuální entita
    Možnost zobrazení Použít plurální název
    Jiná entita
    Název entity Rezervovatelný zdroj
  3. Klikněte na tlačítko Uložit a zavřít.

  4. Zavřete formulář entity Jazyk

Vytvoření vztahů z entity Požadavek do entity Jazyk

  1. V řešení Jazyk přidejte existující entitu Požadavek na jazyk do řešení (v případě, že je prezentována v dialogovém okně Požadované součástí, vyberte možnost Ne, nezahrnovat požadované komponenty)

  2. V entitě Požadavek na zdroj vytvořte nové pole

  3. Vyplňte formulář Nové pole následujícími podrobnostmi:

    Pole Value
    Zobrazovaný název Primární jazyk
    Datový typ Vyhledávání
    Typ cílového záznamu Language
  4. Klikněte na tlačítko Uložit a zavřít.

  5. V entitě Požadavek na zdroj vytvořte nové pole

  6. Vyplňte formulář Nové pole následujícími podrobnostmi:

    Pole Value
    Zobrazovaný název Sekundární jazyk
    Datový typ Vyhledávání
    Typ cílového záznamu Language
  7. Klikněte na tlačítko Uložit a zavřít.

Aktualizovat hlavní formulář požadavku

  1. V entitě Požadavek na zdroj přidejte existující formulář Informace do dílčích komponent entity (v případě, že je prezentována v dialogovém okně Požadované součástí, vyberte možnost Ne, nezahrnovat požadované komponenty)
  2. Ve formuláři Informace pomocí Průzkumníka polí přidejte do formuláře dva nové atributy, Primární jazyk a Sekundární jazyk, aby uživatelé mohli tyto informace zadávat při vytváření požadavků.
  3. Klikněte na Uložit.
  4. Klikněte na Publikovat.
  5. Můžete zavřít editor formulářů.

Souhrn

Ve výše uvedených krocích jsme vytvořili novou entitu Jazyk. Potom jsme přidali nové vztahy s entitami Zdroj a Požadavek. Zdroje mohou souviset s více jazyky, protože jsme přidali vztah n: n mezi entitu Jazyk a Zdroj. Požadavky mohou souviset se dva jazyky, protože jsme přidali dva vyhledávací atributy entity požadavku odkazující na novou entitu jazyk.

Přidání dat

Chcete-li přidat nové záznamy do entity Jazyk, použijte rozšířené hledání. Potom můžete spojit záznamy Zdroje s novými záznamy Jazyk otevřením záznamu Prostředek a přechodem na vztah Jazyk na navigačním panelu. Pro záznamy požadavku můžete vyplnit nová pole Primární jazyk a Sekundární jazyk pole ve formuláři Požadavek.

Vlastní nastavení plánovací vývěsky

Abychom mohli filtrovat zdroje na plánovací vývěsce s omezením nového jazyka, budeme aktualizovat dotaz Načíst zdroje a záznamy konfigurace rozložení filtru.

Konfigurace rozložení filtru

Zpropitné

Pro níže uvedené kroky je užitečné použít textový editor, který podporuje zvýraznění syntaxe XML, aby bylo možné provést požadované změny, a potom vložte změny zpět do editoru Universal Resource Scheduling.

Konfigurace rozložení filtru je definice rozložení XML pro vlastní nastavení rozložení panelu Filtr.

Poznámka:

Pro toto cvičení odebereme všechny dodané výchozí filtry s Universal Resource Scheduling z panelu Filtr a přidáme jazyky jako jediný dostupný filtr.

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

Element control přidá nový ovládací prvek na panel Filtr. Zde je popis jednotlivých atributů:

Jméno Popis
type Typ ovládacího prvku filtru. Ovládací prvek combo vykreslí rozevírací seznam s hodnotami, z nichž můžete vybírat
source Zdroj hodnot pro ovládací prvek rozevíracího seznamu. Zdroj entity zobrazuje záznamy entity v rozevíracím seznamu
key Klíč používaný k uložení vybraných hodnot v balíku vlastností omezení
inactive-state Neaktivní statecode pro tuto entitu. Tato možnost slouží k vyloučení neaktivních záznamů z rozevíracího seznamu
label-id Lokalizovaný popisek pro tento ovládací prvek
entity V rozevíracím seznamu budou zobrazeny záznamy pro tuto entitu
multi Konfiguruje rozevírací seznam, aby z něho bylo možné vybrat jeden záznam nebo více záznamů

Rozložení filtru:

<?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>

Vytvořit novou desku Jazyky

Aby bylo možné tyto změny uchovávat izolovaně, vytvoříme zcela novou samostatnou plánovací vývěsku a budeme implementovat změny, máte však kdykoli možnost tyto změny provést na výchozí plánovací desce, aby tyto změny mohly automaticky změnit ostatní plánovací vývěsky.

  1. V Dynamics 365 přejděte na horním navigačním panelu na plánování zdrojů > Plánovací vývěska
  2. Vpravo nahoře kliknutím na znak + vytvořte novou vývěsku
  3. Pojmenujte novou vývěsku Jazyk
  4. V dolní části dialogového okna klikněte na tlačítko Přidat. Bude vytvořena nová vývěska.

Aktualizace rozložení filtru vývěsky

Dále vytvoříme nový konfigurační záznam, který ukládá rozložení filtru a dotazy používané plánovací vývěskou. následně propojíme nově vytvořenou vývěsku s novým konfiguračním záznamem. To lze provést několika způsoby, ale zde je nejrychlejší:

  1. Vpravo nahoře poklikejte na kartu jazyk
  2. Posuňte zobrazení na Obecné nastavení > Další nastavení
  3. Vyhledejte pole rozložení filtru, a kliknutím na tlačítko napravo otevřete editor
  4. Aktualizujte pole Hodnota kódem rozložení filtru výše a klikněte na tlačítko Uložit jako.
  5. Do pole Název zadejte "Filtr rozložení jazyka" a klikněte na Uložit. Tím se vytvoří nový záznam konfigurace a odkazuje tuto plánovací vývěsku na záznam.
  6. V dolní části dialogového okna klikněte na tlačítko Použít.

Vývěska se znovu načte a nalevo se zobrazí panel filtru s novým rozložením; budou k dispozici pouze filtry jazyka. Filtrování nebude ještě funkční, protože musíme aktualizovat dotaz Načíst zdroje, abychom mohli využívat výhody nového filtru.

Konfigurace dotazu na načtení zdrojů

Zpropitné

Pro níže uvedené kroky je užitečné použít textový editor, který podporuje zvýraznění syntaxe XML, aby bylo možné provést požadované změny, a potom vložte změny zpět do editoru Universal Resource Scheduling.

Konfigurace Načíst dotaz na zdroje je Dotaz UFX používaný rozhraním API Párování zdrojů. Jako vstup bere hodnoty zadané na panelu Filtr a dynamicky sestavuje správný dotaz FetchXML k vyhledání odpovídajících zdrojů.

Níže jsou uvedeny nové fragmenty přidané do dotazu na načtení zdrojů pro porovnání a objednávku podle jazyků zdrojů.

Přidání spojení z bookableresource do 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>

Hodnoty vybrané v panelu Filtr jsou předány jako vstup do dotazu a jsou k dispozici v proměnné XPath $input

Dotaz na načtení zdrojů používá FetchXML k dotazování na entitu Resource (bookableresource). Používáme element jazyka FetchXML link-entity, pouze k vrácení zdrojů spojených s jazykovými záznamy vybranými na panelu Filtr. Pro podporu odpovídající jazyky zobrazení a řazení podle primárního nebo sekundárního jazyka popsáno dále v části buňky šablony zdrojů, používáme více link-entity spojení.

Zde je popis jednotlivých atributů element a attribute:

Jméno Popis
link-entity Vytvoření připojení ke vztahu n n mezi entitami Zdroj a Jazyk
ufx:if Tento element FetchXML (link-entity) vydat, pouze pokud výraz XPath v tomto atributu vrací hodnotu
attribute Vrátit primární nebo sekundární odpovídající jazyk
filter a condition Filtrovat záznamy vztahu n: n pouze na ty, které odpovídají zadaným ID jazyka
ufx:value a select Vypíše výsledek výrazu XPath v atributu select
ufx:apply a select Vydat podřízené elementy FetchXML pro každý výsledek vrácený z výrazu XPath v atributu select
value Obsahuje ID záznamu jazyka

Určení pořadí řazení zdroje

Poté, co získáme odpovídající prostředky, které jsou založené na jazycích přiřazené každému zdroji, přiřadíme novou vlastnost lang_order k určení jeho pořadí řazení.

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

Zde je popis jednotlivých atributů element a attribute:

Jméno Popis
lang_order Vytvoření nové vlastnosti každého zdroje vráceného z dotazu jazyka FetchXML s názvem lang_order
ufx:select Přiřadí výsledek výrazu XPath v tomto atributu vlastnosti lang_order. Vlastnosti lang_primary a lang_secondary načtené dříve v dotazu se používají spolu s funkcí XPath iif k určení odpovídajícího pořadí zdroje.

Seřazení výsledků

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

Dotazy UFX jsou zpracovávány v postupném pořadí. Po načtení zdrojů prostřednictvím jazyka FetchXML jsou výsledky přiřazeny vlastnosti Resources. Výsledky řadíme na základě vlastnosti lang_order přidané dříve a znovu přiřazujeme seřazené výsledky vlastnosti Resources.

Zde je popis jednotlivých atributů element a attribute:

Jméno Popis
Resources Opětovné přiřazení vlastnosti Resources
ufx:select Přiřadí výsledek výrazu XPath v tomto atributu vlastnosti Resources. Funkce XPath order slouží k uspořádání seznamu Resources ve vlastnosti lang_order.

Poznámka:

Výchozí hodnota Dotaz na načtení zdrojů dodaná s Universal Resource Scheduling je rozsáhlý dotaz, který podporuje všechna omezení zdrojů zahrnutá v Universal Resource Scheduling. Pro toto cvičení budeme používat pouze podmnožinu výchozího dotazu a jazyky přidáme jako jediný filtr.

<?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>

Aktualizace dotazu na načtení zdrojů plánovací vývěsky

  1. Vpravo nahoře poklikejte na kartu jazyk
  2. Posuňte zobrazení na Obecné nastavení > Další nastavení
  3. Vyhledejte pole Dotaz na načtení zdrojů a kliknutím na tlačítko napravo otevřete editor
  4. Aktualizujte pole Hodnota kódem Dotaz na načtení zdrojů a klikněte na tlačítko Uložit jako.
  5. Do pole Název zadejte "Dotaz na zdroje" a klikněte na Uložit. Tím se vytvoří nový záznam konfigurace a odkazuje tuto plánovací vývěsku na záznam.
  6. V dolní části dialogového okna klikněte na tlačítko Použít.

Vývěska znovu načte aktualizovanou konfiguraci. Filtrování bude nyní fungovat. Pokud jste vytvořili záznamy jazyka a spojili se se záznamy Zdroj, budete nyní moci filtrovat zdroje podle jejich přidružených jazyků.

Souhrn

Ve výše uvedených krocích jsme modifikovali panel Filtr tak, aby zobrazoval ovládací prvek filtru pro entitu jazyk. Upravili jsme také dotaz na načtení zdrojů tak, aby odpovídal zdrojům spojeným s vybranými záznamy jazyka. Když uživatel vybere hodnoty v ovládacím prvku Filtr a klikne na Vyhledat, hodnoty jsou předány do dotazu a dotaz jazyka FetchXmL vrátí pouze odpovídající zdroje.

Vlastní nastavení pomocníka při plánování

Musíme přizpůsobit rozložení filtru pomocníka při plánování a konfigurace příkazu načíst dotaz na omezení v Pomocníkovi pro plánování.

Na rozdíl od přizpůsobení plánovací vývěsky, kde lze jednotlivě přizpůsobit každou vývěsku, ovlivní přizpůsobení asistenta při plánování všechny vývěsky, kde se asistent používá. Přizpůsobení pomocníka pro plánování mohou být specifické pro plánovatelný typ nebo pro všechny typy. V tomto příkladu si ho přizpůsobíme pro všechny typy.

Konfigurace rozložení filtru pomocníka plánování

Zpropitné

Pro níže uvedené kroky je užitečné použít textový editor, který podporuje zvýraznění syntaxe XML, aby bylo možné provést požadované změny, a potom vložte změny zpět do editoru Universal Resource Scheduling.

Konfigurace rozložení filtru pomocníka při plánování, jako je rozložení filtru plánovací vývěsky, definuje rozložení ovládacích prvků na panelu Filtr. Vzhledem k tomu, že pomocník při plánování používá více filtrů než plánovací vývěska, jako je počáteční čas, koncový čas, doba trvání atd., použije se jiné rozložení.

Poznámka:

Pro toto cvičení budeme opakovaně používat pouze podmnožinu součástí Universal Resource Scheduling z konfigurace rozložení filtru pomocníka při plánování a přidáme si rozevírací seznam jazyky jako jediný dostupný filtr.

Filtr, který přidáváme do rozložení, je stejný jako výše v části Konfigurace rozložení filtru. Další ovládací prvky jsou potřeba ke změně parametrů vyhledávání pomocníka při plánování.

Úplné rozložení filtru pomocníka při plánování

<?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>

Aktualizace rozložení filtru pomocníka plánování

  1. Vpravo nahoře poklikejte na kartu jazyk
  2. Vpravo nahoře klikněte na tlačítko Otevřít výchozí nastavení
  3. Přejděte do části Typy plánu a vyberte možnost žádný v seznamu vlevo
  4. Vyhledejte pole rozložení filtru pomocníka při plánování a kliknutím na tlačítko napravo otevřete editor.
  5. Aktualizujte pole Hodnota kódem rozložení filtru pomocníka při plánování výše a klikněte na tlačítko Uložit jako.
  6. Do pole Název zadejte Rozložení filtru pomocníka při plánování jazyka a klikněte na Uložit. Tím se vytvoří nový záznam konfigurace a odkazuje tuto plánovací vývěsku na záznam.
  7. V dolní části dialogového okna klikněte na tlačítko Použít.

Vývěska se znovu načte. Dále je třeba změnit dotaz na omezení načítání předtím, než bude možné použít pomocníka při plánování s novými jazykovými omezeními, aby byly jazyky nastavené v požadavku součástí vyhledávání.

Konfigurace dotazu na načtení omezení

Zpropitné

Pro níže uvedené kroky je užitečné použít textový editor, který podporuje zvýraznění syntaxe XML, aby bylo možné provést požadované změny, a potom vložte změny zpět do editoru Universal Resource Scheduling.

Konfigurace dotazu na načtení omezení je Dotaz UFX používaný rozhraním API Omezení požadavku na načtení. Jako vstup přebírá ID záznamu požadavku (vybrané v UI) a vrací záznam požadavku a všechny jeho podřízené záznamy.

Poznámka:

Výchozí hodnota Dotaz na omezení načtení dodaná s Universal Resource Scheduling je rozsáhlý dotaz, který podporuje omezení na požadavek zahrnutý v Universal Resource Scheduling. Pro toto cvičení budeme používat pouze podmnožinu výchozího dotazu a jazyky přidáme jako jediný filtr.

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

Dotazy UFX jsou zpracovávány v postupném pořadí. Dotaz na omezení načtení používá FetchXML k dotazování entity Requirement (msdyn_resourcerequirement) a přiřazení výsledku, záznamu požadavku, k vlastnosti Requirement. Postupně přidáváme ke kontejneru vlastnosti omezení novou vlastnost Languages, která kombinuje oba atributy, primární jazyk a sekundární jazyk, do jednoho seznamu entit (EntityCollection). To je nutné, protože si ukazujeme ovládací prvek Jazyky na panelu Filtr jako seznam záznamů. Alternativou by bylo vytvořit dva oddělené ovládací prvky na panelu Filtr pro dva atributy.

Zde je popis jednotlivých atributů element a attribute:

Jméno Popis
Languages Vytvoření nové vlastnosti ve výsledném kontejneru vlastností omezení nazvaného Languages
ufx:select Přiřadí výsledek výrazu XPath v tomto atributu vlastnosti Languages. Vlastnosti lang_primarylanguage a lang_secondarylanguage načtené dříve v dotazu a dostupné ve vlastnosti Requirement jsou předány do funkce lookup-to-list XPath, která převede více vlastností lookup do jednélist (EntityCollection)

Dotaz na omezení načtení:

<?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>

Aktualizovat dotaz na načtení omezení

  1. Vpravo nahoře poklikejte na kartu jazyk
  2. Vpravo nahoře klikněte na tlačítko Otevřít výchozí nastavení
  3. Přejděte do části Typy plánu a vyberte možnost žádný v seznamu vlevo
  4. Vyhledejte pole dotaz na načtení omezení a kliknutím na tlačítko napravo otevřete editor.
  5. Aktualizujte pole Hodnota kódem Dotaz na načtení zdrojů a klikněte na tlačítko Uložit jako.
  6. Do pole Název zadejte "Dotaz na omezení jazyka" a klikněte na Uložit. Tím se vytvoří nový záznam konfigurace a odkazuje tuto plánovací vývěsku na záznam.
  7. Vyhledejte pole Dotaz na načtení zdrojů pomocníka pro plánování a vyberte dotaz na jazykové zdroje, které jsme vytvořili předtím pro přizpůsobení plánovací vývěsky
  8. V dolní části dialogového okna klikněte na tlačítko Použít.

Vývěska znovu načte aktualizovanou konfiguraci. Filtrování pomocníka pro plánování bude nyní fungovat. Pokud jste vytvořili záznamy jazyka a přidružené záznamy požadavku, nyní bude možné vybrat záznam požadavku v dolní části plánovací vývěsky, kliknutím na tlačítko najít dostupnost spustit pomocníka pro plánování a vybrat pouze zdroje odpovídající jazykům uloženým v požadavku.

Konfigurace šablony buňky zdroje

Zpropitné

Pro níže uvedené kroky je užitečné použít textový editor, který podporuje zvýraznění syntaxe HTML, aby bylo možné provést požadované změny, a potom vložte změny zpět do editoru Universal Resource Scheduling.

Konfigurace šablony buňky zdroje je šablona Handlebars používaná k vykreslení obsahu v buňce zdroje. Výstup dotazu na načtení zdroje je k dispozici pro šablonu.

Měníme výchozí šablonu zdroje tak, aby zobrazovala zelený indikátor ✔✱ v případě, že zdroj odpovídal primárnímu a sekundárnímu jazyku, zelený indikátor ✔ v případě, že zdroj odpovídal pouze primárnímu jazyku a žlutý indikátor ✔ v případě, že zdroj odpovídal pouze sekundárnímu jazyku.

{{#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}} 

Vlastnosti lang_primary a lang_secondary jsou vráceny z našeho vlastního dotazu na načtení zdrojů, který jsme nastavili výše. Na webu Handlebars najdete dokumentaci k syntaxi vytváření šablon.

Šablona buňky zdroje:

<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>

Aktualizovat šablonu buňky zdroje

  1. Vpravo nahoře poklikejte na kartu jazyk
  2. Vpravo nahoře klikněte na tlačítko Otevřít výchozí nastavení
  3. Přejděte do části Typy plánu a vyberte možnost žádný v seznamu vlevo
  4. Vyhledejte pole šablony buňky zdroje pomocníka pro plánování a kliknutím na tlačítko napravo otevřete editor.
  5. Aktualizujte pole Hodnota kódem šablony buňky zdroje uvedeným výše a klikněte na tlačítko Uložit jako.
  6. Do pole Název zadejte "Šablona buňky zdroje" a klikněte na Uložit. Tím se vytvoří nový záznam konfigurace a odkazuje tuto plánovací vývěsku na záznam.
  7. V dolní části dialogového okna klikněte na tlačítko Použít.

Vývěska znovu načte aktualizovanou konfiguraci. Buňka zdroje nyní indikuje, jak zdroj odpovídal omezení jazyka v panelu Filtr.

Souhrn

Ve výše uvedených krocích jsme modifikovali panel Filtr v pomocníkovi pro plánování tak, aby zobrazoval ovládací prvek filtru pro entitu jazyk. Změnili jsme také dotaz na omezení načtení tak, aby byly dotazovány nové atributy jazyka související s entitou požadavku, a formovali jsme je do seznamu. Když uživatel vybere možnost najít dostupnost pro záznam požadavku, na panelu Filtr se zobrazí zaznamenaná omezení jazyka. Hodnoty z panelu filtru jsou předány do dotazu na načtení zdrojů a dotaz FetchXML vrátí pouze odpovídající zdroje.

Viz také

Univerzální FetchXML

Poznámky k rozšiřitelnosti Universal Resource Scheduling