Voorbeeld: Universal Resource Scheduling uitbreiden met een aangepaste taalbeperking
Deze stapsgewijze instructies horen bij Het vergelijken van resources in Universal Resource Scheduling begrijpen en aanpassen
In deze stapsgewijze instructies breiden we Universal Resource Scheduling-resources uit met de beperking Language
. Stel dat een organisatie resources wil filteren op de talen die binnen de organisatie worden gesproken. Daarnaast willen ze de vereiste taal voor de taak vastleggen in de record Requirement
. Deze beperking volgt ongeveer hetzelfde patroon als de ingebouwde beperking Territory
. In een nieuwe hoofdentiteit Language
worden de verschillende talen opgeslagen die een resource kan spreken. Vervolgens kan een record Resource
aan vele Languages
worden gekoppeld via een entiteit voor veel-op-veel-relaties. Voor de entiteit Requirement
geven we dit in een model weer door twee twee nieuwe opzoekkenmerken te maken: Primary Language
en Secondary Language
. Wanneer er beschikbare resources voor een vereiste worden gezocht, worden alleen resources weergegeven die zijn gekoppeld aan de Primary Language
of Secondary Language
.
De nieuwe entiteiten en relaties maken
In deze sectie maken we het nieuwe schema voor de hoofdentiteit Language
en werken we de entiteiten Requirement
en Resource
bij met de bijbehorende relaties voor de nieuwe entiteit Language
.
Een nieuwe uitgever maken
Maak in Dynamics 365 onder Aanpassingen een nieuwe uitgever.
Vul het formulier Nieuwe uitgever in op basis van de onderstaande gegevens:
Veld Value weergavenaam Language Naam taal Voorvoegsel lang Klik op Opslaan en sluiten.
Een nieuwe oplossing maken
Maak in Dynamics 365 onder Aanpassingen een nieuwe oplossing.
Vul het formulier Nieuwe oplossing in op basis van de onderstaande gegevens:
Veld Value weergavenaam Language Naam Language Uitgever Language Versie 1.0.0.0 Klik op Opslaan.
De entiteit Taal maken
Maak een nieuwe entiteit in de oplossing Taal.
Vul het formulier Nieuwe entiteit in op basis van de onderstaande gegevens:
Veld Value weergavenaam Language Meervoudsnaam Talen Meetcriterium lang_language (het voorvoegsel lang_
wordt automatisch ingevuld en is alleen-lezen)Klik op Opslaan.
De veel-op-veel-relatie vanuit de entiteit Resource met de entiteit Taal maken
Maak een nieuwe veel-op-veel-relatie in de entiteit Taal.
Vul het formulier Nieuwe relatie in op basis van de onderstaande gegevens:
Veld Value Huidige entiteit Weergaveoptie Meervoudsnaam gebruiken Andere entiteit Entiteitsnaam Boekbare resource Klik op Opslaan en sluiten.
Sluit het formulier voor de entiteit Taal
De relaties vanuit de entiteit Vereiste met de entiteit Taal maken
Voeg in de oplossing Taal de bestaande entiteit Resourcevereiste toe aan de oplossing (als het dialoogvenster Ontbrekende vereiste onderdelen wordt weergegeven, selecteert u Nee, vereiste onderdelen niet toevoegen).
Maak een nieuw veld in de entiteit Resourcevereiste.
Vul het formulier Nieuw veld in op basis van de onderstaande gegevens:
Veld Value weergavenaam Primaire taal Type gegevens Opzoekveld Doelrecordtype Language Klik op Opslaan en sluiten.
Maak een nieuw veld in de entiteit Resourcevereiste.
Vul het formulier Nieuw veld in op basis van de onderstaande gegevens:
Veld Value weergavenaam Secundaire taal Type gegevens Opzoekveld Doelrecordtype Language Klik op Opslaan en sluiten.
Het hoofdformulier Vereiste bijwerken
- Voeg in de entiteit Resourcevereiste het bestaande formulier Informatie toe aan de subcomponenten van de entiteit (als het dialoogvenster Ontbrekende vereiste onderdelen wordt weergegeven, selecteert u Nee, vereiste onderdelen niet toevoegen).
- Gebruik in het formulier Informatie de functie Veldverkenner om de twee nieuwe kenmerken, Primaire taal en Secundaire taal, aan het formulier toe te voegen zodat de gebruikers deze gegevens kunnen invoeren terwijl ze vereisten maken.
- Klik op Opslaan.
- Klik op Publiceren.
- U kunt de formuliereneditor sluiten.
Samenvatting
In de bovenstaande stappen hebben we de nieuwe entiteit Taal gemaakt. Vervolgens hebben we nieuwe relaties met de entiteiten Resource en Vereiste toegevoegd. Resources kunnen aan meerdere talen zijn gerelateerd, omdat we een veel-op-veel-relatie tussen Taal en Resource hebben toegevoegd. Vereisten kunnen aan twee talen gerelateerd zijn, aangezien we twee opzoekkenmerken voor de entiteit Vereiste hebben toegevoegd die verwijzen naar de nieuwe entiteit Taal.
Gegevens toevoegen
Gebruik Geavanceerd zoeken om nieuwe records toe te voegen aan de entiteit Taal. Vervolgens kunt u resourcerecords aan de nieuwe taalrecords koppelen door een resourcerecord te openen en naar de relatie Taal op de navigatiebalk te navigeren. Voor vereisterecords kunt u de nieuwe velden Primaire taal en Secundaire taal in het formulier Vereiste invullen.
Het planbord aanpassen
Om resources in het planbord te filteren op basis van de nieuwe beperking Taal, werken we de configuratierecords Query Resources ophalen en Filterindeling bij.
Configuratie Filterindeling
Fooi
Voor de onderstaande stappen is het nuttig om voor uw wijzigingen een teksteditor te gebruiken die XML-syntaxismarkeringen ondersteunt. Plak vervolgens uw wijzigingen terug in de Universal Resource Scheduling-editor.
De configuratie Filterindeling is een XML-indelingsdefinitie om de indeling van het deelvenster Filter aan te passen.
Notitie
Voor deze oefening verwijderen we alle standaardfilters uit het deelvenster Filter in Universal Resource Scheduling en voegen we Talen als enige beschikbare filter toe.
<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
Met het element control
wordt een nieuw besturingselement toegevoegd aan het deelvenster Filter. Hier volgt een beschrijving van elk kenmerk:
Naam | Beschrijving |
---|---|
type |
Het type filterbesturingselement. Een besturingselement combo genereert een vervolgkeuzelijst met waarden om uit te kiezen |
source |
De bron van de waarden voor het besturingselement vervolgkeuzelijst. Een bron entity toont entiteitsrecords in de vervolgkeuzelijst |
key |
De sleutel om de geselecteerde waarden in de eigenschappenverzameling voor beperkingen op te slaan |
inactive-state |
De inactieve statecode voor deze entiteit. Dit wordt gebruikt om inactieve records uit te sluiten van de vervolgkeuzelijst |
label-id |
Het gelokaliseerde label voor dit besturingselement |
entity |
De records voor deze entiteit worden in de vervolgkeuzelijst weergegeven |
multi |
Hiermee configureert u de vervolgkeuzelijst zo dat een of meer records kunnen worden geselecteerd |
Filterindeling:
<?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>
Een nieuw talenbord maken
Om deze wijzigingen geïsoleerd te houden, maken we een gloednieuw, apart planbord en implementeren we de wijzigingen, maar u kunt deze wijzigingen altijd doorvoeren in het standaardplanbord, zodat andere planborden deze wijzigingen automatisch kunnen overnemen.
- Ga in Dynamics 365 in de bovenste navigatiebalk naar Resourceplanning > Planbord.
- Klik in de rechterbovenhoek op het teken + om een nieuw bord te maken.
- Geef het nieuwe bord de naam Taal.
- Klik onder in het dialoogvenster op Toevoegen. Het nieuwe bord wordt gemaakt.
De filterindeling van het planbord bijwerken
Vervolgens maken we een nieuwe configuratierecord, waarin we de gebruikte filterindelingen en query's door het planbord opslaan en koppelen we het nieuwe planbord aan de nieuwe configuratierecord. U kunt dit op verschillende manieren doen, maar dit is de snelste:
- Dubbelklik in de rechter bovenhoek op het tabblad Taal.
- Blader omlaag naar Algemene instellingen > Overige instellingen.
- Klik op de knop rechts van het veld Filterindeling om de editor te openen.
- Werk het veld Waarde bij met de code van de filterindeling hierboven en klik op Opslaan als.
- Voer Taalfilterindeling in het veld Naam in en klik op Opslaan. Er wordt een nieuwe configuratierecord gemaakt en dit planbord wordt gekoppeld aan de record.
- Klik onder in het dialoogvenster op Toepassen.
Het bord wordt opnieuw worden geladen en u ziet het deelvenster Filter links met de nieuwe indeling. Alleen het filter Talen is beschikbaar. Filteren werkt nog niet, aangezien we de query Resources ophalen moeten bijwerken om te profiteren van het nieuwe filter.
Configuratie Query Resources ophalen
Fooi
Voor de onderstaande stappen is het nuttig om voor uw wijzigingen een teksteditor te gebruiken die XML-syntaxismarkeringen ondersteunt. Plak vervolgens uw wijzigingen terug in de Universal Resource Scheduling-editor.
De configuratie Query Resources ophalen is een UFX-query die wordt gebruikt door de API voor het vergelijken van resources. Als invoer worden de ingevoerde waarden in het deelvenster Filter gebruikt en vervolgens wordt dynamisch de correcte FetchXML geconstrueerd om overeenkomende resources te vinden.
De onderstaande nieuwe fragmenten worden aan de query Resources ophalen toegevoegd om te filteren en te sorteren op de talen van de resources.
De joins uit bookableresource
toevoegen aan 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>
De geselecteerde waarden in het deelvenster Filter worden doorgegeven als invoer voor de query en zijn beschikbaar in de XPath-variabele
$input
Met de query Resources ophalen wordt FetchXML gebruikt om de query uit te voeren op de entiteit Resource (bookableresource)
. We gebruiken het FetchXML-element link-entity
om alleen resources te retourneren die zijn gekoppeld aan de geselecteerde taalrecords in het deelvenster Filter. Ter ondersteuning van het weergeven van de overeenkomende talen en het sorteren op primaire en secundaire taal, zoals later wordt beschreven in de sectie Sjabloon resourcecel, gebruiken we meerdere link-entity
-joins.
Hier volgt een beschrijving van elk element
en attribute
:
Naam | Beschrijving |
---|---|
link-entity |
Een join met de veel-op-veel-relatie maken tussen de entiteiten Resource en Taal |
ufx:if |
Dit FetchXML-element (link-entity ) alleen uitgeven als de XPath-expressie in dit kenmerk een waarde retourneert |
attribute |
De overeenkomende primaire of secundaire taal retourneren |
filter en condition |
De records voor veel-op-veel-relaties filteren om alleen de relaties weer te geven die overeenkomen met de opgegeven taal-id's |
ufx:value en select |
Hiermee wordt het resultaat van de XPath-expressie in het kenmerk select uitgevoerd |
ufx:apply en select |
De onderliggende FetchXML-elementen voor elk geretourneerd resultaat uit de XPath-expressie in het kenmerk select uitgeven |
value |
Bevat de id van een taalrecord |
De sorteervolgorde van een resource bepalen
Nadat we de overeenkomende resources hebben opgehaald, wijzen we op basis van de toegewezen talen voor elke resource een nieuwe eigenschap lang_order
toe om de sorteervolgorde te definiëren.
<bag>
<lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
</bag>
Hier volgt een beschrijving van elk element
en attribute
:
Naam | Beschrijving |
---|---|
lang_order |
Een nieuwe eigenschap lang_order maken in elke resource die uit de FetchXML-query wordt geretourneerd |
ufx:select |
Wijs het resultaat van de XPath-expressie in dit kenmerk toe aan de eigenschap lang_order . De eigenschappen lang_primary en lang_secondary , eerder in de query opgehaald, worden gebruikt met de XPath-functie iif om de juiste volgorde voor het vergelijken van resources te definiëren. |
De resultaten sorteren
<Resources ufx:select="order(Resources, 'lang_order')" />
UFX-query's worden verwerkt in opeenvolgende volgorde. Als de resources via FetchXML zijn opgehaald, worden de resultaten toegewezen aan de eigenschap Resources
. We sorteren de resultaten op basis van de eerder toegevoegde eigenschap lang_order
en de gesorteerde resultaten worden opnieuw toegewezen aan de eigenschap Resources
.
Hier volgt een beschrijving van elk element
en attribute
:
Meetcriterium | Beschrijving |
---|---|
Resources |
De eigenschap Resources opnieuw toewijzen |
ufx:select |
Wijs het resultaat van de XPath-expressie in dit kenmerk toe aan de eigenschap Resources . De XPath-functie order wordt gebruikt om de lijst Resources te sorteren op basis van de eigenschap lang_order . |
Notitie
De standaardquery Resources ophalen in Universal Resource Scheduling is een grote query die alle resourcebeperkingen inbegrepen in Universal Resource Scheduling ondersteunt. In deze oefening gebruiken wij slechts een subset van de standaardquery en voegen Talen als het enige filter toe.
<?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>
De query Resources ophalen voor het planbord bijwerken
- Dubbelklik in de rechter bovenhoek op het tabblad Taal.
- Blader omlaag naar Algemene instellingen > Overige instellingen.
- Klik op de knop rechts van het veld Query Resources ophalen om de editor te openen.
- Werk het veld Waarde bij met de code van de query Resources ophalen hierboven en klik op Opslaan als.
- Voer Query taalresources in het veld Naam in en klik op Opslaan. Er wordt een nieuwe configuratierecord gemaakt en dit planbord wordt gekoppeld aan de record.
- Klik onder in het dialoogvenster op Toepassen.
Het bord wordt opnieuw geladen met de bijgewerkte configuratie. Filteren werkt nu. Als u taalrecords hebt gemaakt en deze aan resourcerecords hebt gekoppeld, kunt u resources nu filteren op hun gekoppelde talen.
Overzicht
In de bovenstaande stappen hebben we het deelvenster Filter gewijzigd om een filterbesturingselement voor de entiteit Taal weer te geven. Daarnaast hebben we de query Resources ophalen gewijzigd om gekoppelde resources te vergelijken met de geselecteerde taalrecords. Wanneer een gebruiker waarden in het filterbesturingselement selecteert en op Zoeken klikt, worden de waarden doorgegeven in de query en retourneert de FetchXML-query alleen overeenkomende resources.
Planningassistent aanpassen
We moeten de configuraties voor Filterindeling en Query Beperkingen ophalen voor de planningsassistent aanpassen om de nieuwe taalbeperkingen in de planningsassistent te gebruiken.
In tegenstelling tot bij de aanpassingen van het planbord, waarbij elk bord afzonderlijk kan worden aangepast, hebben aanpassingen in de planningsassistent invloed op alle borden waar Planningsassistent wordt gebruikt. De aanpassingen in de planningsassistent kunnen specifiek bij een planbaar type horen of voor alle typen gelden. In dit voorbeeld passen we de planningsassistent aan voor alle typen.
Configuratie Indelingsfilter van de planningsassistent
Fooi
Voor de onderstaande stappen is het nuttig om voor uw wijzigingen een teksteditor te gebruiken die XML-syntaxismarkeringen ondersteunt. Plak vervolgens uw wijzigingen terug in de Universal Resource Scheduling-editor.
Met de configuratie Indeling van planningsassistentfilter wordt net als in deze configuratie voor het planbord de indeling van de besturingselementen in het deelvenster Filter bepaald. Aangezien in de planningsassistent meer filters worden gebruikt dan in het planbord, zoals Begintijd, Eindtijd en Duur, wordt een andere indeling gebruikt.
Notitie
Voor deze oefening gebruiken we alleen een subset van de standaardfilters in Universal Resource Scheduling uit de configuratie Indeling van planningsassistentfilter en voegen we de vervolgkeuzelijst Talen toe als enige beschikbare filter.
Het filter dat we toevoegen, is hetzelfde filter als eerder in Configuratie Filterindeling. De andere besturingselementen zijn nodig om de zoekparameters voor de planningsassistent te wijzigen.
De volledige indeling van het planningsassistentfilter
<?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>
De indeling van het planningsassistentfilter bijwerken
- Dubbelklik in de rechter bovenhoek op het tabblad Taal.
- Klik rechtsboven op Standaardinstellingen openen.
- Ga naar de sectie Planningstypen en selecteer Geen in de linkerlijst.
- Klik op de knop rechts van het veld Indeling van planningsassistentfilter om de editor te openen.
- Werk het veld Waarde bij met de code van de indeling van het planningsassistentfilter hierboven en klik op Opslaan als.
- Voer Indeling van planningsassistentfilter Taal in het veld Naam in en klik op Opslaan. Er wordt een nieuwe configuratierecord gemaakt en dit planbord wordt gekoppeld aan de record.
- Klik onder in het dialoogvenster op Toepassen.
Het bord wordt opnieuw geladen. Vervolgens moeten we de query Beperkingen ophalen wijzigen voordat we de planningsassistent kunnen gebruiken met onze nieuwe taalbeperkingen, zodat de ingestelde talen voor de vereiste onderdeel zijn van de zoekopdracht in de planningsassistent.
Configuratie Query Beperkingen ophalen
Fooi
Voor de onderstaande stappen is het nuttig om voor uw wijzigingen een teksteditor te gebruiken die XML-syntaxismarkeringen ondersteunt. Plak vervolgens uw wijzigingen terug in de Universal Resource Scheduling-editor.
De configuratie Query Beperkingen ophalen is een UFX-query die wordt gebruikt door de API voor het ophalen van vereistebeperkingen. De API gebruikt als invoer de id van een vereisterecord (geselecteerd in de UI) en retourneert de vereisterecord alle onderliggende records.
Notitie
De standaardquery Beperking ophalen in Universal Resource Scheduling is een grote query die alle vereistebeperkingen inbegrepen in Universal Resource Scheduling ondersteunt. In deze oefening gebruiken wij slechts een subset van de standaardquery en voegen Talen als het enige filter toe.
<Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />
UFX-query's worden verwerkt in opeenvolgende volgorde. De query Beperkingen ophalen gebruikt FetchXML om een query op de entiteit Requirement (msdyn_resourcerequirement)
uit te voeren en wijst het resultaat, een vereisterecord, toe aan de eigenschap Requirement
. Wij voegen aan de eigenschappenverzameling voor beperkingen een nieuwe eigenschap Languages
toe waarin beide kenmerken, Primaire taal en Secundaire taal, in één lijst met entiteiten (EntityCollection) worden gecombineerd. Dit is vereist omdat wij het besturingselement Talen in het deelvenster Filter als een lijst met records weergeven. Als alternatief zouden we twee afzonderlijke besturingselementen voor de twee kenmerken moeten maken in het deelvenster Filter.
Hier volgt een beschrijving van elk element
en attribute
:
Naam | Beschrijving |
---|---|
Languages |
Een nieuwe eigenschap in de resulterende eigenschappenverzameling voor beperkingen Languages maken |
ufx:select |
Wijs het resultaat van de XPath-expressie in dit kenmerk toe aan de eigenschap Languages . De eigenschappen lang_primarylanguage en lang_secondarylanguage , die eerder zijn opgehaald in de query en beschikbaar zijn in de eigenschap Requirement , worden doorgegeven aan de XPath-functie lookup-to-list , waarmee meerdere eigenschappen van het type lookup worden geconverteerd naar één list (EntityCollection) . |
Query Beperkingen ophalen:
<?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>
De query Beperkingen ophalen bijwerken
- Dubbelklik in de rechter bovenhoek op het tabblad Taal.
- Klik rechtsboven op Standaardinstellingen openen.
- Ga naar de sectie Planningstypen en selecteer Geen in de linkerlijst.
- Klik op de knop rechts van het veld Query Beperkingen ophalen voor planningsassistent om de editor te openen.
- Werk het veld Waarde bij met de code van de query Resources ophalen hierboven en klik op Opslaan als.
- Voer Query taalbeperkingen in het veld Naam in en klik op Opslaan. Er wordt een nieuwe configuratierecord gemaakt en dit planbord wordt gekoppeld aan de record.
- Ga naar het veld Query Resources ophalen voor planningsassistent en selecteer de query voor taalresources die we eerder hebben gemaakt voor de planbordaanpassingen.
- Klik onder in het dialoogvenster op Toepassen.
Het bord wordt opnieuw geladen met de bijgewerkte configuratie. Het filteren van de planningsassistent werkt. Als u taalrecords hebt gemaakt en aan vereisterecords hebt gekoppeld, kunt u nu een vereisterecord selecteren onder in het planbord, op Beschikbaarheid klikken om de planningsassistent te openen en alleen resources weergeven die overeenkomen met de talen die zijn opgeslagen voor de vereiste.
Configuratie Sjabloon resourcecel
Fooi
Voor de onderstaande stappen is het nuttig om voor uw wijzigingen een teksteditor te gebruiken die HTML-syntaxismarkeringen ondersteunt. Plak vervolgens uw wijzigingen terug in de Universal Resource Scheduling-editor.
De configuratie Sjabloon resourcecel is een Handlebars-sjabloon die wordt gebruikt om informatie in de resourcecel weer te geven. De uitvoer van de query Resources ophalen is beschikbaar voor de sjabloon.
We wijzigen de standaardresourcesjabloon om een groene ✔✱ weer te geven als de resource overeenkomt met de primaire en secundaire talen, een groene ✔ als de resource alleen overeenkomt met de primaire taal en een gele ✔ als de resource alleen overeenkomt met de secundaire taal.
{{#if lang_primary}}
<span style='color:green;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</span>
{{/if}}
De eigenschappen lang_primary
en lang_secondary
worden geretourneerd vanuit onze query Resources ophalen die we eerder hebben ingesteld. Raadpleeg de website van Handlebars voor documentatie over de sjabloonsyntaxis.
Sjabloon resourcecel:
<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>
De resourcecelsjabloon bijwerken
- Dubbelklik in de rechter bovenhoek op het tabblad Taal.
- Klik rechtsboven op Standaardinstellingen openen.
- Ga naar de sectie Planningstypen en selecteer Geen in de linkerlijst.
- Klik op de knop rechts van het veld Resourcecelsjabloon voor planningsassistent om de editor te openen.
- Werk het veld Waarde bij met de code van de resourcecelsjabloon hierboven en klik op Opslaan als.
- Voer Taal van resourcecelsjabloon in het veld Naam in en klik op Opslaan. Er wordt een nieuwe configuratierecord gemaakt en dit planbord wordt gekoppeld aan de record.
- Klik onder in het dialoogvenster op Toepassen.
Het bord wordt opnieuw geladen met de bijgewerkte configuratie. In de resourcecel wordt nu aangegeven hoe een resource overeenkwam met de taalbeperking in het deelvenster Filter.
Overzicht
In de bovenstaande stappen hebben we het deelvenster Filter in de planningsassistent gewijzigd om een filterbesturingselement voor de entiteit Taal weer te geven. Daarnaast hebben we de query Beperkingen ophalen gewijzigd om de nieuwe taalkenmerken gerelateerd aan de entiteit Vereiste te zoeken en op te nemen in een lijst. Wanneer een gebruiker naar de beschikbaarheid voor een vereisterecord zoekt, worden in het deelvenster Filter de vastgelegde taalbeperkingen weergegeven. De waarden uit het deelvenster Filter worden doorgegeven aan de query Resources ophalen en de FetchXML-query retourneert alleen overeenkomende resources.
Zie ook
Releaseopmerkingen voor Universal Resource Scheduling-uitbreidbaarheid