Eksempel: Udvide Universal Resource Scheduling med en brugerdefineret sprogbegrænsning
Denne trinvise vejledning er et supplement til Forståelse og tilpasning af ressourcematchning i Universal Resource Scheduling
I denne trinvise vejledning udvider vi Universal Resource Scheduling-ressourcer med en Language
-begrænsning. En organisation ønsker at filtrere ressourcer efter de sprog, de taler. De vil også til at gerne kunne hente det sprog, der kræves til et job, i posten Requirement
. Denne begrænsning følger et lignende mønster i den indbyggede Territory
-begrænsning. Et nyt overordnet objekt Language
gemmer de forskellige sprog, som en ressource kan tale. En Resource
-post kan derefter knyttes til mange Languages
via et relationsobjekt af typen mange-til-mange. I Requirement
-objektet modellerer vi dette ved at oprette to nye opslagsattributter: Primary Language
og Secondary Language
. Når der findes tilgængelige ressourcer for et krav, vises kun ressourcer, der er knyttet til enten Primary Language
eller Secondary Language
.
Oprettelse af nye objekter og relationer
I dette afsnit opretter vi det nye skema for masterobjektet Language
og opdaterer Resource
- og Requirement
-objekter med de tilsvarende relationer til det nye Language
-objekt.
Oprette en ny udgiver
I Dynamics 365 skal du under Tilpasninger oprette en ny udgiver
Udfyld formularen Ny udgiver med detaljerne nedenfor:
Felt Value Vist navn Language Navn sprog Præfiks lang Klik på Gem og Luk.
Oprette en ny løsning
I Dynamics 365 skal du under Tilpasninger oprette en ny løsning
Udfyld formularen Ny løsning med detaljerne nedenfor:
Felt Value Vist navn Language Navn Language Udgiver Language Version 1.0.0.0 Klik på Gem.
Oprette objektet Sprog
Opret et nyt Objekt i Sprog-løsningen.
Udfyld formularen Nyt objekt med detaljerne nedenfor:
Felt Value Vist navn Language Flertalsnavn Sprog Navn lang_language ( lang_
-præfikset bliver automatisk udfyldt og skrivebeskyttet)Klik på Gem.
Oprette mange-til-mange-relationen fra objektet Ressource til objektet Sprog
I objektet Sprog kan du oprette en ny mange-til-mange-relation
Udfyld formularen Ny relation med detaljerne nedenfor:
Felt Value Aktuelt objekt Visningsindstilling Brug flertalsnavn Andet objekt Objektnavn Reserverbar ressource Klik på Gem og Luk.
Luk objektformularen Sprog.
Oprette relationerne fra objektet Krav til objektet Sprog
I løsningen Sprog skal du føje det eksisterende Ressourcekrav-objekt til løsningen (hvis dialogen Mangler påkrævede komponenter vises, skal du vælge Nej, inkluder ikke påkrævede komponenter).
I objektet Ressourcekrav skal du oprette et nyt felt
Udfyld formularen Nyt felt med detaljerne nedenfor:
Felt Value Vist navn Primært sprog Datatype Opslag Målposttype Language Klik på Gem og Luk.
I objektet Ressourcekrav skal du oprette et nyt felt
Udfyld formularen Nyt felt med detaljerne nedenfor:
Felt Value Vist navn Sekundært sprog Datatype Opslag Målposttype Language Klik på Gem og Luk.
Opdatere Krav-hovedformularen
- I objektet Ressourcekrav skal du føje den eksisterende oplysningsformular til objektets underkomponenter (hvis dialogen Mangler påkrævede komponenter vises, skal du vælge Nej, inkluder ikke påkrævede komponenter).
- I oplysningsformularen skal du bruge Feltoversigt til at tilføje de to nye attributter, Primært sprog og Sekundært sprog, i formularen, så brugere kan angive disse oplysninger, når de opretter krav.
- Klik på Gem.
- Klik på Publicer.
- Du kan lukke formulareditoren.
Oversigt
I ovenstående trin har vi oprettet for det nye Sprog-objekt. Derefter tilføjede vi nye relationer med objekterne Ressource og Krav. Ressourcer kan være relateret til flere sprog – vi har tilføjet en mange til mange-relation mellem sprog og ressource. Krav kan være relateret til to sprog – vi har tilføjet to opslagsattributter for Krav-objektet, der henviser til det nye Sprog-objekt.
Tilføje data
Brug Avanceret søgning til at føje nye poster til objektet Sprog. Du kan derefter knytte ressourceposter til de nye sprogposter ved at åbne en Ressource-post og gå til Sprog-relationen på navigationslinjen. I forbindelse med Krav-poster kan du udfylde de nye felter Primært sprog og Sekundært sprog i formularen Krav.
Tilpasning af planlægningsområdet
For at filtrere ressourcer i planlægningsområdet med den nye Sprog-begrænsning opdaterer vi forespørgslen Hent ressourcer og Filterlayout-konfigurationsposterne.
Filterlayoutkonfiguration
Tip
For de nedenstående trin er det nyttigt at bruge en teksteditor, der understøtter fremhævning af XML-syntaksen, for at foretage ændringerne og derefter indsætte ændringerne tilbage i Universal Resource Scheduling-editoren.
Konfigurationen af Filterlayout er en definition af XML-layout med henblik på at tilpasse layoutet i panelet Filter.
Bemærk
I denne øvelse fjerner vi alle standardfiltre, der leveres sammen med Universal Resource Scheduling, fra panelet Filter og tilføjer Sprog som det eneste tilgængelige filter.
<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
control
-elementet føjer et nyt kontrolelement til panelet Filter. Her er beskrivelsen af hver attribut:
Navn | Beskrivelse |
---|---|
type |
Typen af filterkontrolelement. Et combo -kontrolelement gengiver en rulleliste med værdier, du kan vælge mellem |
source |
Kilden til værdierne for rullelistekontrolelementet. En entity -kilde viser objektposter på rullelisten |
key |
Nøglen, der skal bruges til at gemme de valgte værdier i egenskabsposten for begrænsninger |
inactive-state |
Den inaktive statecode for dette objekt. Koden er beregnet til at udelukke inaktive poster på rullelisten |
label-id |
Den oversatte etiket, der skal bruges til dette objekt |
entity |
Poster for dette objekt vises på rullelisten |
multi |
Konfigurerer rullelisten for at tillade, at der vælges en enkelt post eller flere poster |
Filterlayout:
<?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>
Oprette et nyt planlægningsområde til sprog
Med henblik på at holde disse ændringer isoleret vil vi oprette et helt nyt separat planlægningsområde og implementere ændringerne, men du kan altid foretage disse ændringer i standardplanlægningsområdet, så andre planlægningsområder automatisk kan arve disse ændringer.
- I Dynamics 365 skal du på den øverste navigationslinje gå til Ressourceplanlægning > Planlægningsområde
- Klik i øverste højre hjørne på +-tegnet for at oprette et nyt planlægningsområde
- Giv planlægningsområdet navnet Sprog
- Klik på Tilføj nederst i dialogen. Det nye planlægningsområde oprettes.
Opdatere filterlayout for planlægningsområdet
Derefter skal du oprette en ny konfigurationspost, som opbevarer filtrerlayout og forespørgsler, der bruges i Planlægningsområde, og derefter sammenkæder vi det nyoprettede planlægningsområde med den nye konfigurationspost. Der er flere måder at gøre dette på, men her er den hurtigste:
- I øverste højre hjørne skal du dobbeltklikke på fanen Sprog.
- Rul ned til Generelle indstillinger > Andre indstillinger
- Find feltet Filterlayout, klik på knappen til højre for at åbne editoren.
- Opdater feltet Værdi med koden Filterlayout ovenfor, og klik på Gem som.
- Angiv "Filterlayout for sprog" i feltet Navn, og klik på Gem. Der oprettes en ny konfigurationspost, og som kæder dette planlægningsområde sammen med posten.
- Klik på Anvend nederst i dialogen.
Området genindlæses, og du kan se Filterpanelet til venstre med det nye layout. Kun filteret Sprog er tilgængeligt. Filtrering fungerer ikke endnu, fordi vi skal opdatere Hent ressourcer-forespørgslen for at kunne udnytte det nye filter.
Konfiguration af forespørgslen Hent ressourcer
Tip
For de nedenstående trin er det nyttigt at bruge en teksteditor, der understøtter fremhævning af XML-syntaksen, for at foretage ændringerne og derefter indsætte ændringerne tilbage i Universal Resource Scheduling-editoren.
Konfiguration af Hent ressourcer-forespørgslen er en UFX-forespørgsel, der bruges af Ressourcematchnings-API'en. Som input tager den værdierne, der er angivet i panelet Filter og bygger dynamisk den korrekte FetchXML for at finde matchende ressourcer.
Nedenfor føjes nye kodestykker til forespørgslen Hent ressourcer, for at matche og arrangere dem efter ressourcernes sprog.
Tilføjelse af joinforbindelser fra bookableresource
til 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 værdier, der er valgt i panelet Filter, overføres som input til forespørgslen og er tilgængelige i XPath
$input
-variablen.
Hent ressourcer-forespørgslen bruger FetchXML til at sende anmodninger til Resource (bookableresource)
-objektet. Vi bruger FetchXML link-entity
-element til kun at returnere ressourcer, der er knyttet til de Sprog-poster, der er valgt i panelet Filter. For at understøtte visning af de sprog, der matchet og arrangeret efter primært eller sekundært sprog, der beskrives senere i afsnittet Ressourcecelleskabelon, bruger vi flere link-entity
-joinforbindelser.
Her er beskrivelsen af hvert element
og attribute
:
Navn | Beskrivelse |
---|---|
link-entity |
Opretter en joinforbindelse til mange-til-mange-relationen mellem objekterne Ressource og Sprog |
ufx:if |
Medtager kun dette FetchXML-element (link-entity ), hvis XPath-udtrykket i denne attribut returnerer en værdi |
attribute |
Returnerer det primære eller sekundære sprog, der sammenlignes med |
filter og condition |
Filtrerer mange-til-mange-relationsposterne til kun dem, der svarer til de angivne sprog-id'er |
ufx:value og select |
Viser resultatet af XPath-udtrykket i select -attributten |
ufx:apply og select |
Medtager FetchXML underelementer for hvert resultat, der returneres fra XPath-udtrykket i select attributten |
value |
Indeholder id'et for en Sprog-post |
Fastlæggelse af en ressources sorteringsrækkefølge
Når vi har hentet de matchende ressourcer ud fra de enkelte ressources tildelte sprog, tildeler vi en ny lang_order
-egenskab for at afgøre sorteringsrækkefølgen.
<bag>
<lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
</bag>
Her er beskrivelsen af hvert element
og attribute
:
Navn | Beskrivelse |
---|---|
lang_order |
Opretter en ny egenskab i hver ressource, der returneres fra FetchXML-forespørgslen lang_order |
ufx:select |
Tildeler resultatet af XPath-udtrykket i denne attribut til lang_order -egenskaben. lang_primary og lang_secondary -egenskaberne, der blev hentet tidligere i forespørgslen, bruges sammen med XPath iif -funktionen til at bestemme rækkefølgen for ressourcematchning. |
Arrangere rækkefølgen af resultaterne
<Resources ufx:select="order(Resources, 'lang_order')" />
UFX-forespørgsler behandles i sekventiel rækkefølge. Når ressourcerne hentes via FetchXML, tildeles resultaterne til Resources
-egenskaben. Vi sorterer resultaterne baseret på lang_order
-egenskaben, der tidligere blev tilføjet, og tildeler igen de sorterede resultater til Resources
-egenskaben.
Her er beskrivelsen af hvert element
og attribute
:
Navn | Beskrivelse |
---|---|
Resources |
Tildele Resources -egenskaben igen |
ufx:select |
Tildeler resultatet af XPath-udtrykket i denne attribut til Resources -egenskaben. XPath order -funktionen bruges til at arrangere rækkefølgen af Resources -listen ud fra dens lang_order -egenskab. |
Bemærk
Den Hent ressourcer-forespørgsel, der som standard leveres sammen med Universal Resource Scheduling, er en stor forespørgsel, der understøtter alle ressourcebegrænsninger, der indgår i Universal Resource Scheduling. I denne øvelse bruger vi kun et undersæt af standardforespørgslen og tilføjer Sprog som det eneste filter.
<?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>
Opdatere planlægningsområdets Hent ressourcer-forespørgsel
- I øverste højre hjørne skal du dobbeltklikke på fanen Sprog.
- Rul ned til Generelle indstillinger > Andre indstillinger
- Find feltet Forespørgslen Hent ressourcer, klik på knappen til højre for at åbne editoren.
- Opdater feltet Værdi med koden Forespørgslen Hent ressourcer ovenfor, og klik på Gem som.
- Angiv "Forespørgsel om sprogressourcer" i feltet Navn, og klik på Gem. Der oprettes en ny konfigurationspost, og som kæder dette planlægningsområde sammen med posten.
- Klik på Anvend nederst i dialogen.
Området genindlæses med den opdaterede konfiguration. Filtrering fungerer nu. Hvis du har oprettet Sprog-poster og knyttet dem til Ressource-poster, kan du nu filtrere ressourcer efter deres tilknyttede sprog.
Opsamling
I ovenstående trin har vi ændret panelet Filter for at få vist et filterkontrolelement for objektet Sprog. Vi ændrede også Hent ressourcer-forespørgslen, så den matcher ressourcer, der er knyttet til de valgte Sprog-poster. Når en bruger vælger værdier i filterkontrolelementet og klikker på Søg, sendes værdierne til forespørgslen, og FetchXML-forespørgslen returnerer kun matchende ressourcer.
Tilpasning af planlægningsassistenten
Det er nødvendigt, at vi tilpasser Layout for Planlægningsassistentfilter og Hent begrænsninger-forespørgslens konfigurationer, når vi skal bruge de nye Sprog-begrænsninger i planlægningsassistenten.
I modsætning til tilpasningerne af planlægningsområdet, hvor det enkelte planlægningsområde individuelt kan tilpasses, påvirker tilpasningerne af Planlægningsassistent alle områder, hvor Planlægningsassistent bruges. Tilpasningerne af Planlægningsassistent kan være specifikke for en type, der kan planlægges, eller for alle typer. I dette eksempel vil vi tilpasse Planlægningsassistent for alle typer.
Konfiguration af filterlayout for planlægningsassistent
Tip
For de nedenstående trin er det nyttigt at bruge en teksteditor, der understøtter fremhævning af XML-syntaksen, for at foretage ændringerne og derefter indsætte ændringerne tilbage i Universal Resource Scheduling-editoren.
Konfigurationen af filterlayout for planlægningsassistent, f.eks. planlægningsområdets filterlayout, definerer layoutet for kontrolelementerne i panelet Filter. Eftersom Planlægningsassistent bruger flere filtre end planlægningsområdet, f.eks. Starttidspunkt, Sluttidspunkt, Varighed etc., bruges et andet layout.
Bemærk
I denne øvelse skal vi kun genbruge et undersæt af standardfiltrene, der leveres i Universal Resource Scheduling, fra konfigurationen af Layout for Planlægningsassistentfilter og tilføje rullemenuen Sprog som det eneste tilgængelige filter.
Det filter, vi tilføjer til layoutet, er det samme som ovenfor i Filterlayoutkonfiguration. De andre kontrolelementer kræves for at redigere planlægningsassistentens søgeparametrene.
Det komplette filterlayout for planlægningsassistenten
<?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>
Opdatere filterlayout for planlægningsassistenten
- I øverste højre hjørne skal du dobbeltklikke på fanen Sprog.
- Klik på Åbn standardindstillinger i øverste højre hjørne,
- Rul ned til sektionen Planlægningstyper, og vælg Ingen i listen til venstre
- Find feltet Layout for Planlægningsassistentfilter, og klik på knappen til højre for at åbne editoren.
- Opdater feltet Værdi med Layout for Planlægningsassistentfilter-koden ovenfor, og klik på Gem som.
- Angiv "Layout for Planlægningsassistentfilter for sprog" i feltet Navn, og klik på Gem. Der oprettes en ny konfigurationspost, og som kæder dette planlægningsområde sammen med posten.
- Klik på Anvend nederst i dialogen.
Området genindlæses. Derefter skal du ændre forespørgslen Hent begrænsninger, før vi kan bruge Planlægningsassistent med vores nye Sprog-begrænsninger, så de sprog, der er angivet i kravet, er en del af Planlægningsassistent-søgningen.
Konfiguration af forespørgslen Hent begrænsninger
Tip
For de nedenstående trin er det nyttigt at bruge en teksteditor, der understøtter fremhævning af XML-syntaksen, for at foretage ændringerne og derefter indsætte ændringerne tilbage i Universal Resource Scheduling-editoren.
Konfiguration af forespørgslen Hent begrænsninger er en UFX-forespørgsel, der bruges af Hent kravsbegrænsnings-API'en. Den tager som input id'et for en kravspost (som er valgt i brugergrænsefladen) og returnerer kravsposten og alle de underordnede poster.
Bemærk
Den Hent begrænsninger-forespørgsel, der som standard leveres sammen med Universal Resource Scheduling, er en stor forespørgsel, der understøtter alle kravsbegrænsninger, der indgår i Universal Resource Scheduling. I denne øvelse bruger vi kun et undersæt af standardforespørgslen og tilføjer Sprog som det eneste filter.
<Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />
UFX-forespørgsler behandles i sekventiel rækkefølge. Hent begrænsninger-forespørgslen bruger FetchXML til sende anmodninger til Requirement (msdyn_resourcerequirement)
-objektet og tildeler resultatet, en kravspost, til Requirement
-egenskaben. Vi vil føje en ny egenskab Languages
til egenskabsbeholderen for begrænsninger, der samler begge attributter, det primære sprog og det sekundære sprog, i én samlet liste over objekter (EntityCollection). Dette er nødvendigt, fordi vi viser kontrolelementet Sprog i panelet Filter som en liste over poster. Et alternativ er at oprette to separate kontrolelementer i panelet Filter for de to attributter.
Her er beskrivelsen af hvert element
og attribute
:
Navn | Beskrivelse |
---|---|
Languages |
Opretter en ny egenskab i resultatbegrænsningens egenskabsbeholder med navnet Languages |
ufx:select |
Tildeler resultatet af XPath-udtrykket i denne attribut til Languages -egenskaben. Egenskaberne lang_primarylanguage og lang_secondarylanguage , der blev hentet tidligere i forespørgslen, og som er tilgængelige i Requirement -egenskaben, overføres til XPath-funktionen lookup-to-list , der konverterer flere lookup -egenskaber til en enkelt list (EntityCollection) |
Forespørgslen Hent begrænsninger:
<?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>
Opdatere forespørgslen Hent begrænsninger
- I øverste højre hjørne skal du dobbeltklikke på fanen Sprog.
- Klik på Åbn standardindstillinger i øverste højre hjørne,
- Rul ned til sektionen Planlægningstyper, og vælg Ingen i listen til venstre
- Find feltet Forespørgslen Hent begrænsninger til Planlægningsassistent, og klik på knappen til højre for at åbne editoren.
- Opdater feltet Værdi med koden Forespørgslen Hent ressourcer ovenfor, og klik på Gem som.
- Angiv "Forespørgsel om sprogbegrænsninger" i feltet Navn, og klik på Gem. Der oprettes en ny konfigurationspost, og som kæder dette planlægningsområde sammen med posten.
- Find feltet Forespørgslen Hent ressourcer til Planlægningsassistent, og vælg Forespørgsel om sprogressourcer, som vi oprettede tidligere for Tilpasninger af planlægningsområdet
- Klik på Anvend nederst i dialogen.
Området genindlæses med den opdaterede konfiguration. Filtrering fungerer nu i Planlægningsassistenten. Hvis du har oprettet sprogposter og tilknyttet til kravsposter, kan du nu vælge en kravspost nederst i planlægningsområdet, klikke på Find tilgængelighed for at starte Planlægningsassistent og kun se de ressourcer, der svarer til det sprog, der er gemt i kravet.
Konfiguration af ressourcecelleskabelon
Tip
For de nedenstående trin er det nyttigt at bruge en teksteditor, der understøtter fremhævning af HTML-syntaksen, for at foretage ændringerne og derefter indsætte ændringerne tilbage i Universal Resource Scheduling-editoren.
Konfigurationen af Ressourcecelleskabelon er en Handlebars-skabelon, der bruges til at gengive indhold i ressourcecellen. Outputtet fra Forespørgslen Hent ressourcer er tilgængelig for skabelonen.
Vi er ved at redigere standardressourceskabelonen, så der vises en grøn ✔✱ indikator, hvis ressourcen sammenlignes med de primære og sekundære sprog, en grøn ✔ indikator, hvis ressourcen sammenholdes kun med det primære sprog, og en gul indikator ✔, hvis ressourcen sammenlignes med kun det sekundær sprog.
{{#if lang_primary}}
<span style='color:green;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</span>
{{/if}}
lang_primary
og lang_secondary
egenskaberne returneres fra vores brugerdefinerede Hent ressourcer-forespørgsel, som vi oprettede ovenfor. Se Handlebars-webstedet for at få dokumentation om skabelonsyntaksen.
Ressourcecelleskabelon:
<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>
Opdatere ressourcecelleskabelonen
- I øverste højre hjørne skal du dobbeltklikke på fanen Sprog.
- Klik på Åbn standardindstillinger i øverste højre hjørne,
- Rul ned til sektionen Planlægningstyper, og vælg Ingen i listen til venstre
- Find feltet Ressourcecelleskabelon for Planlægningsassistent, og klik på knappen til højre for at åbne editoren.
- Opdater feltet Værdi med Ressourcecelleskabelon-koden ovenfor, og klik på Gem som.
- Angiv "Ressourcecelleskabelon for sprog" i feltet Navn, og klik på Gem. Der oprettes en ny konfigurationspost, og som kæder dette planlægningsområde sammen med posten.
- Klik på Anvend nederst i dialogen.
Området genindlæses med den opdaterede konfiguration. Ressourcecellen angiver nu, hvordan en ressource har matchet sprogbegrænsningen i panelet Filter.
Opsamling
I ovenstående trin har vi ændret panelet Filter i Planlægningsassistent for at få vist et filterkontrolelement for objektet Sprog. Vi har også ændret forespørgslen Hent begrænsninger for at anmode de nye sprogattributter, der er relateret til kravsobjektet, og lave en liste ud dem. Når en bruger foretager valg for at finde tilgængelighed for en post, viser panelet Filter de hentede sprogbegrænsninger. Værdierne fra panelet Filter overføres til Hent ressourcer-forespørgslen, og FetchXML-forespørgslen returnerer kun matchende ressourcer.
Se også
Produktbemærkninger til Mulighed for udvidelse af Universal Resource Scheduling