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
V Dynamics 365 ve skupinovém rámečku Vlastní nastavení vytvořte nového vydavatele
Vyplňte formulář Nový vydavatel následujícími podrobnostmi:
Pole Value Zobrazovaný název Language Jméno jazyk Předpona lang Klikněte na tlačítko Uložit a zavřít.
Vytvoření nového řešení
V Dynamics 365 ve skupinovém rámečku Vlastní nastavení vytvořte nové řešení
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 Klikněte na Uložit.
Vytvoření entity Jazyk
V řešení Jazyk vytvořte novou entitu.
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í)Klikněte na Uložit.
Vytvoření vztahu n n z entity Zdroj do entity Jazyk
V entitě Jazyk vytvořte nový vztah n:n
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 Klikněte na tlačítko Uložit a zavřít.
Zavřete formulář entity Jazyk
Vytvoření vztahů z entity Požadavek do entity Jazyk
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)
V entitě Požadavek na zdroj vytvořte nové pole
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 Klikněte na tlačítko Uložit a zavřít.
V entitě Požadavek na zdroj vytvořte nové pole
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 Klikněte na tlačítko Uložit a zavřít.
Aktualizovat hlavní formulář požadavku
- 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)
- 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ů.
- Klikněte na Uložit.
- Klikněte na Publikovat.
- 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.
- V Dynamics 365 přejděte na horním navigačním panelu na plánování zdrojů > Plánovací vývěska
- Vpravo nahoře kliknutím na znak + vytvořte novou vývěsku
- Pojmenujte novou vývěsku Jazyk
- 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ší:
- Vpravo nahoře poklikejte na kartu jazyk
- Posuňte zobrazení na Obecné nastavení > Další nastavení
- Vyhledejte pole rozložení filtru, a kliknutím na tlačítko napravo otevřete editor
- Aktualizujte pole Hodnota kódem rozložení filtru výše a klikněte na tlačítko Uložit jako.
- 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.
- 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
- Vpravo nahoře poklikejte na kartu jazyk
- Posuňte zobrazení na Obecné nastavení > Další nastavení
- Vyhledejte pole Dotaz na načtení zdrojů a kliknutím na tlačítko napravo otevřete editor
- Aktualizujte pole Hodnota kódem Dotaz na načtení zdrojů a klikněte na tlačítko Uložit jako.
- 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.
- 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í
- Vpravo nahoře poklikejte na kartu jazyk
- Vpravo nahoře klikněte na tlačítko Otevřít výchozí nastavení
- Přejděte do části Typy plánu a vyberte možnost žádný v seznamu vlevo
- Vyhledejte pole rozložení filtru pomocníka při plánování a kliknutím na tlačítko napravo otevřete editor.
- 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.
- 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.
- 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í
- Vpravo nahoře poklikejte na kartu jazyk
- Vpravo nahoře klikněte na tlačítko Otevřít výchozí nastavení
- Přejděte do části Typy plánu a vyberte možnost žádný v seznamu vlevo
- Vyhledejte pole dotaz na načtení omezení a kliknutím na tlačítko napravo otevřete editor.
- Aktualizujte pole Hodnota kódem Dotaz na načtení zdrojů a klikněte na tlačítko Uložit jako.
- 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.
- 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
- 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;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</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;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</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
- Vpravo nahoře poklikejte na kartu jazyk
- Vpravo nahoře klikněte na tlačítko Otevřít výchozí nastavení
- Přejděte do části Typy plánu a vyberte možnost žádný v seznamu vlevo
- Vyhledejte pole šablony buňky zdroje pomocníka pro plánování a kliknutím na tlačítko napravo otevřete editor.
- Aktualizujte pole Hodnota kódem šablony buňky zdroje uvedeným výše a klikněte na tlačítko Uložit jako.
- 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.
- 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.