Del via


Eksempel: Udvide Universal Resource Scheduling med en brugerdefineret sprogbegrænsning

Denne trinvise vejledning er en ledsager til at forstå og tilpasse ressourcematchning i Universal Resource Scheduling

I denne trinvise vejledning udvider vi Universal Resource Scheduling-ressourcer med en Language begrænsning. Overvej en organisation, der ønsker at filtrere ressourcer efter de sprog, de taler. De ønsker også at registrere Requirement det sprog, der kræves til jobbet. Denne begrænsning følger et lignende mønster som den indbyggede Territory begrænsning. Et nyt hovedobjekt Language gemmer de forskellige sprog, som en ressource kan tale. En Resource post kan derefter knyttes til mange Languages via et mange til mange-relationsobjekt. På objektet Requirement modellerer vi dette ved at oprette to nye opslagsattributter: Primary Language og Secondary Language. Når systemet søger efter tilgængelige ressourcer til et krav, vises kun ressourcer, der er knyttet til enten Primary Language eller Secondary Language.

Oprettelse af de nye enheder og relationer

I dette afsnit opretter vi det nye skema for hovedobjektet Language og opdaterer objekterne Resource og Requirement med de tilsvarende relationer til det nye Language objekt.

Opret en ny udgiver

  1. I Dynamics 365 skal du under Tilpasninger oprette en ny udgiver.

  2. Udfyld formularen Ny udgiver med nedenstående oplysninger:

    Felt Værdi
    Vist navn Sprog
    Navn sprog
    Præfiks lang
  3. Vælg Gem og luk.

Opret en ny løsning

  1. I Dynamics 365 skal du under Tilpasninger oprette en ny løsning.

  2. Udfyld formularen Ny løsning med nedenstående oplysninger:

    Felt Værdi
    Vist navn Sprog
    Navn Sprog
    Udgiver Sprog
    Version 1.0.0.0
  3. Vælg Gem.

Oprette objektet Sprog

  1. Opret et nyt objekt i sprogløsningen.

  2. Udfyld formularen Ny enhed med nedenstående oplysninger:

    Felt Værdi
    Vist navn Sprog
    Flertal navn Sprog
    Navn lang_language (lang_-præfikset bliver automatisk udfyldt og skrivebeskyttet)
  3. Vælg Gem.

Oprette mange til mange-relationen fra objektet Ressource til objektet Sprog

  1. Opret en ny Mange til mange-relation i objektet Sprog.

  2. Udfyld formularen Nyt forhold med nedenstående oplysninger:

    Felt Værdi
    Nuværende enhed
    Mulighed for visning Brug flertalsnavn
    Andet objekt
    Objektnavn Reserverbar ressource
  3. Vælg Gem og luk.

  4. Luk sprogenhedens formular.

Oprette relationerne fra objektet Krav til objektet Sprog

  1. I sprogløsningen skal du føje det eksisterende objekt Ressourcekrav til løsningen. Hvis dialogboksen Manglende påkrævede komponenter vises, skal du vælge Nej, medtag ikke påkrævede komponenter.

  2. Opret et nyt felt i objektet Ressourcekrav.

  3. Udfyld formularen Nyt felt med nedenstående oplysninger:

    Felt Værdi
    Vist navn Primært sprog
    Datatype Søg
    Målposttype Sprog
  4. Vælg Gem og luk.

  5. Opret et nyt felt i objektet Ressourcekrav.

  6. Udfyld formularen Nyt felt med nedenstående oplysninger:

    Felt Værdi
    Vist navn Sekundært sprog
    Datatype Søg
    Målposttype Sprog
  7. Vælg Gem og luk.

Opdater Krav hovedformularen

  1. I objektet Ressourcekrav skal du føje den eksisterende oplysningsformular til objektets underkomponenter. Hvis dialogboksen Manglende påkrævede komponenter vises, skal du vælge Nej, medtag ikke påkrævede komponenter.
  2. I formularen Oplysninger skal du bruge Feltoversigt til at føje de to nye attributter, primært sprog og sekundært sprog til formularen, så brugerne kan angive disse oplysninger, når de opretter krav.
  3. Vælg Gem.
  4. Vælg Udgiv.

Resumé

I ovenstående trin har vi oprettet det nye sprogobjekt. Derefter tilføjede vi nye relationer med objekterne Ressource og Krav. Ressourcer kan relateres til flere sprog, da vi har tilføjet en mange-til-mange-relation mellem sprog og ressource. Krav kan relateres til to sprog, da vi har tilføjet to opslagsattributter i objektet Krav, der peger på det nye objektet Sprog.

Tilføjelse af 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 ressourcepost og navigere til sprogrelationen på navigationslinjen. For kravsposter kan du udfylde de nye felter Primært sprog og Sekundært sprog i formularen Krav.

Tilpasning af planlægningstavlen

Hvis du vil filtrere ressourcer i planlægningsområdet med den nye sprogbegrænsning, opdaterer vi konfigurationsposterne Forespørgslen Hent ressourcer og Filterlayout.

Seddel

Disse tilpasninger af planlægningsområdet gælder ensartet for alle faner og kan ikke angives individuelt pr. fane. Dette gælder for Planlægningsassistent Filterlayout, "Planlægningsassistent Hent ressourcer,Planlægningsassistent Ressourcecelleskabelon og Planlægningsassistent Hent begrænsninger Forespørgsel.

Konfiguration af filterlayout

Tips

I nedenstående trin er det nyttigt at bruge et tekstredigeringsprogram, der understøtter XML-syntaksfremhævning, til at foretage ændringerne og derefter indsætte ændringerne igen i Universal Resource Scheduling-editoren.

Konfigurationen af filterlayout er en XML-layoutdefinition til tilpasning af filterpanelets layout.

Seddel

I denne øvelse fjerner vi alle standardfiltre, der følger 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" />

Elementet control føjer et nyt kontrolelement til filterpanelet. Her er beskrivelsen af hver attribut:

Navn Beskrivelse
type Typen af filterkontrol. Et combo kontrolelement gengiver en rulleliste med værdier, du kan vælge imellem
source Kilden til værdierne for rullelistekontrolelementet. En entity kilde viser objektposter på rullelisten
key Den nøgle, der skal bruges til at gemme de valgte værdier i egenskabsgruppen med begrænsninger
inactive-state Den inaktive statecode for dette objekt. Dette bruges til at udelukke inaktive poster fra rullelisten
label-id Den lokaliserede etiket, der skal bruges til dette kontrolelement
entity Denne entitets oplysninger vises i rullelisten
multi Konfigurerer rullemenuen, så den tillader valg af en enkelt post eller flere poster

Filter Layout:

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

Opret en ny sprogtavle

For at holde disse ændringer isolerede opretter vi et helt nyt separat planlægningsområde og implementerer ændringerne, men du kan altid foretage disse ændringer i standardplanlægningsområdet, så andre planlægningsområder automatisk kan arve disse ændringer.

  1. I Dynamics 365 skal du gå tilPlanlægningsområde for ressourceplanlægning> på den øverste navigationslinje.
  2. Øverst til højre skal du vælge + tegnet for at oprette en ny tavle.
  3. Navngiv det nye bestyrelsessprog.
  4. Nederst i dialogboksen skal du vælge Tilføj. Den nye bestyrelse vil blive oprettet.

Opdatere filterlayoutet i planlægningsområdet

Derefter opretter vi en ny konfigurationspost, som gemmer filterlayout og forespørgsler, der bruges af planlægningsområdet, og derefter knytter vi det nyoprettede planlægningsområde til den nye konfigurationspost. Der er flere måder at gøre dette på, men her er den hurtigste:

  1. Vælg fanen Sprog .
  2. Rul ned til Generelle indstillinger>Andre indstillinger.
  3. Find feltet Filterlayout , vælg knappen til højre for at åbne editoren
  4. Opdater feltet Værdi med filterlayoutkoden ovenfor, og vælg Gem som.
  5. Indtast "Sprogfilterlayout" i feltet Navn, og vælg Gem. Dette opretter en ny konfigurationspost og knytter dette planlægningsområde til posten.
  6. Nederst i dialogboksen skal du vælge Anvend

Tavlen genindlæses, og du ser filterpanelet til venstre med det nye layout; Kun filteret Sprog vil være tilgængeligt. Filtrering fungerer ikke endnu, da vi skal opdatere forespørgslen Hent ressourcer for at drage fordel af det nye filter.

Hent konfiguration af ressourceforespørgsel

Tips

I nedenstående trin er det nyttigt at bruge et tekstredigeringsprogram, der understøtter XML-syntaksfremhævning, til at foretage ændringerne og derefter indsætte ændringerne igen i Universal Resource Scheduling-editoren.

Konfigurationen Hent ressourceforespørgsel er en UFX-forespørgsel , der bruges af Resource Matching-API'en. Den tager de værdier, der er indtastet i filterpanelet, som input og konstruerer dynamisk den korrekte FetchXML for at finde matchende ressourcer.

Nedenfor er de nye uddrag, der er føjet til forespørgslen Hent ressourcer for at matche og sortere 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 markeret i panelet Filter, overføres som input til forespørgslen og er tilgængelige i variablen XPath $input

Forespørgslen Hent ressourcer bruger FetchXML til at forespørge objektet Resource (bookableresource) . Vi bruger elementet FetchXML link-entity til kun at returnere ressourcer, der er knyttet til de sprogposter, der er valgt i panelet Filter. For at understøtte visning af de matchede sprog og sortering efter primært eller sekundært sprog, der er beskrevet senere i afsnittet Ressourcecelleskabelon, bruger vi flere link-entity joinforbindelser.

Her er beskrivelsen af hver element og attribute:

Navn Beskrivelse
link-entity Opret en join-forbindelse til mange-til-mange-relationen mellem objekterne Ressource og Sprog
ufx:if Udsend kun dette FetchXML-element (link-entity), hvis XPath-udtrykket i denne attribut returnerer en værdi
attribute Returner det primære eller sekundære sprog, der matcher
filter og condition Filtrer mange-til-mange-relationsregistre, så det kun er dem, der matcher de angivne sprogid'er.
ufx:value og select Udsender resultatet af XPath-udtrykket i attributten select
ufx:apply og select Sende de underordnede FetchXML-elementer for hvert resultat, der returneres fra XPath-udtrykket i attributten select
value Indeholder ID'et for en sprogposten

Bestemmelse af en ressources sorteringsrækkefølge

Når vi har hentet de matchende ressourcer, baseret på hver ressources tildelte sprog, tildeler vi en ny lang_order egenskab for at bestemme dens sorteringsrækkefølge.

<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 hver element og attribute:

Navn Beskrivelse
lang_order Opret en ny egenskab i hver ressource, der returneres fra FetchXML-forespørgslen med navnet lang_order
ufx:select Tildel resultatet af XPath-udtrykket i denne attribut til egenskaben lang_order . Egenskaberne lang_primary og lang_secondary , der er hentet tidligere i forespørgslen, bruges sammen med funktionen XPath iif til at bestemme rækkefølgen for ressourcematchning.

Bestilling af resultaterne

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

UFX-forespørgsler behandles i sekventiel rækkefølge. Når ressourcerne er hentet via FetchXML, tildeles resultaterne til egenskaben Resources . Vi sorterer resultaterne baseret på den egenskab, der lang_order blev tilføjet tidligere, og tildeler de sorterede resultater til Resources ejendommen igen.

Her er beskrivelsen af hver element og attribute:

Navn Beskrivelse
Resources Tildel Resources ejendommen igen
ufx:select Tildel resultatet af XPath-udtrykket i denne attribut til egenskaben Resources . XPath-funktionen order bruges til at sortere Resources listen på dens lang_order ejendom.

Seddel

Standardforespørgslen Hent ressourcer, der leveres med Universal Resource Scheduling, er en stor forespørgsel, der understøtter alle de ressourcebegrænsninger, der er inkluderet i Universal Resource Scheduling. Til 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

  1. Dobbeltklik på fanen Sprog øverst til højre
  2. Rul ned til Generelle indstillinger > Andre indstillinger
  3. Find feltet Hent ressourceforespørgsel, vælg knappen til højre for at åbne editoren
  4. Opdater feltet Værdi med forespørgselskoden Hent ressourcer ovenfor, og vælg Gem som
  5. Indtast "Forespørgsel om sprogressourcer" i feltet Navn, og vælg Gem. Dette opretter en ny konfigurationspost og knytter dette planlægningsområde til posten.
  6. Nederst i dialogboksen skal du vælge Anvend

Kortet genindlæses med den opdaterede konfiguration. Filtrering vil nu fungere. Hvis du har oprettet sprogposter og knyttet dem til ressourceposter, kan du nu filtrere ressourcer efter deres tilknyttede sprog.

Resumé

I ovenstående trin har vi ændret panelet Filter for at vise et filterkontrolelement for objektet Sprog. Vi har også ændret forespørgslen Hent ressourcer, så den matcher ressourcer, der er knyttet til de valgte sprogposter. Når en bruger vælger værdier i filterkontrolelementet og vælger Søg, overføres værdierne til forespørgslen, og FetchXML-forespørgslen returnerer kun matchende ressourcer.

Tilpasning af planlægningsassistenten

Vi er nødt til at tilpasse konfigurationerne Planlægningsassistent Filterlayout og Hent begrænsninger for at bruge de nye sprogbegrænsninger i planlægningsassistenten.

I modsætning til tilpasningerne i planlægningsområdet, hvor hver oversigt kan tilpasses individuelt, påvirker tilpasningerne i planlægningsassistenten alle tavler, hvor planlægningsassistenten bruges. Tilpasningerne i planlægningsassistenten kan være specifikke for en type, der kan planlægges, eller for alle typer. I dette eksempel tilpasser vi planlægningsassistenten til alle typer.

Konfiguration af filterlayout i planlægningsassistent

Tips

I nedenstående trin er det nyttigt at bruge et tekstredigeringsprogram, der understøtter XML-syntaksfremhævning, til at foretage ændringerne og derefter indsætte ændringerne igen i Universal Resource Scheduling-editoren.

Konfigurationen af filterlayoutet i planlægningsassistenten, f.eks. filterlayoutet i planlægningsområdet, definerer layoutet af kontrolelementerne i panelet Filter. Da planlægningsassistenten bruger flere filtre end planlægningsområdet, f.eks. Starttidspunkt, Sluttidspunkt, Varighed osv., bruges et andet layout.

Seddel

I denne øvelse genbruger vi kun et undersæt af de standardfiltre, der er leveret i Universal Resource Scheduling fra konfigurationen Filterlayout i planlægningsassistenten, og tilføjer rullelisten Sprog som det eneste tilgængelige filter.

Det filter, vi føjer til layoutet, er det samme som ovenfor i Konfiguration af filterlayout. De andre kontrolelementer er nødvendige for at ændre søgeparametrene i Planlægningsassistent.

Det komplette filterlayout i 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>

Opdater filterlayoutet i planlægningsassistenten

  1. Dobbeltklik på fanen Sprog øverst til højre
  2. Øverst til højre skal du vælge Åbn standardindstillinger
  3. Rul til sektionen Planlægningstyper, og vælg Ingen på listen til venstre
  4. Find feltet Filterlayout for planlægningsassistent, vælg knappen til højre for at åbne editoren
  5. Opdater feltet Værdi med koden Filterlayout for planlægningsassistent ovenfor, og vælg Gem som
  6. Indtast "Filterlayout for Language Schedule Assistant" i feltet Navn, og vælg Gem. Dette opretter en ny konfigurationspost og knytter dette planlægningsområde til posten.
  7. Nederst i dialogboksen skal du vælge Anvend

Brættet genindlæses. Dernæst skal vi ændre forespørgslen Hent begrænsninger, før vi kan bruge planlægningsassistenten med vores nye sprogbegrænsninger, så de sprog, der er angivet i kravet, er en del af søgningen i planlægningsassistenten.

Hent forespørgselskonfiguration af begrænsninger

Tips

I nedenstående trin er det nyttigt at bruge et tekstredigeringsprogram, der understøtter XML-syntaksfremhævning, til at foretage ændringerne og derefter indsætte ændringerne igen i Universal Resource Scheduling-editoren.

Konfigurationen Hent begrænsningsforespørgsel er en UFX-forespørgsel , der bruges af API'en Hent kravsbegrænsninger. Den tager som input id'et for en kravspost (valgt i brugergrænsefladen) og returnerer kravsposten og alle dens underordnede poster.

Seddel

Standardforespørgslen Hent begrænsninger, der leveres med Universal Resource Scheduling, er en stor forespørgsel, der understøtter alle de kravsbegrænsninger, der er inkluderet i Universal Resource Scheduling. Til 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. Forespørgslen Hent begrænsninger bruger FetchXML til at forespørge objektet Requirement (msdyn_resourcerequirement) og tildeler resultatet, en kravspost, til egenskaben Requirement . Vi føjer en ny egenskab Languages til egenskabsposen begrænsninger, der kombinerer begge attributter, det primære sprog og det sekundære sprog, til en enkelt liste over objekter (EntityCollection). Dette er påkrævet, da vi viser kontrolelementet Sprog i panelet Filter som en liste over poster. Et alternativ ville være at oprette to separate kontrolelementer i filterpanelet for de to attributter.

Her er beskrivelsen af hver element og attribute:

Navn Beskrivelse
Languages Oprette en ny egenskab i egenskabsgruppen med resultatbegrænsninger med navnet Languages
ufx:select Tildel resultatet af XPath-udtrykket i denne attribut til egenskaben Languages . Egenskaberne lang_primarylanguage og lang_secondarylanguage , der hentes tidligere i forespørgslen og er tilgængelige i egenskaben Requirement , overføres til lookup-to-list funktionen XPath, som konverterer flere lookup egenskaber til en enkelt list (EntityCollection)

Hent forespørgsel om 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>

Opdater forespørgslen Hent begrænsninger

  1. Dobbeltklik på fanen Sprog øverst til højre
  2. Øverst til højre skal du vælge Åbn standardindstillinger
  3. Rul til sektionen Planlægningstyper, og vælg Ingen på listen til venstre
  4. Find feltet Forespørgsel om hentning af begrænsninger i planlægningsassistenten, og vælg knappen til højre for at åbne editoren
  5. Opdater feltet Værdi med forespørgselskoden Hent ressourcer ovenfor, og vælg Gem som
  6. Indtast "Forespørgsel om sprogbegrænsninger" i feltet Navn, og vælg Gem. Dette opretter en ny konfigurationspost og knytter dette planlægningsområde til posten.
  7. Find feltet Hent ressourceforespørgsel i planlægningsassistenten, og vælg den forespørgsel om sprogressourcer, som vi oprettede tidligere for tilpasningerne i planlægningsområdet
  8. Nederst i dialogboksen skal du vælge Anvend

Kortet genindlæses med den opdaterede konfiguration. Planlægningsassistent-filtrering fungerer nu. Hvis du har oprettet sprogposter og knyttet dem til kravsposter, kan du nu vælge en kravspost nederst i planlægningsområdet, vælge Find tilgængelighed for at starte planlægningsassistenten og kun se ressourcer, der svarer til de sprog, der er gemt i kravet.

Konfiguration af ressourcecelleskabelon

Tips

I nedenstående trin er det nyttigt at bruge en teksteditor, der understøtter HTML-syntaksfremhævning, til at foretage ændringerne og derefter indsætte ændringerne igen i Universal Resource Scheduling-editoren.

Konfigurationen af ressourcecelleskabelonen er en Handlebars-skabelon, der bruges til at gengive indhold i ressourcecellen. Outputtet fra forespørgslen Hent ressourcer er tilgængeligt for skabelonen.

Vi ændrer standardressourceskabelonen til at vise en grøn ✔ ✱-indikator, hvis ressourcen matchede det primære og sekundære sprog, en grøn ✔ indikator, hvis ressourcen kun matchede det primære sprog, og en gul ✔ indikator, hvis ressourcen kun matchede det sekundære sprog.

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

Egenskaberne lang_primary og lang_secondary returneres fra vores brugerdefinerede forespørgsel om hent ressourcer , som vi konfigurerede ovenfor. Se på Handlebars-webstedet for yderligere information om skabelonsyntaksen.

Ressourcecelle skabelon:

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

Opdatere ressourcecelleskabelonen

  1. Dobbeltklik på fanen Sprog øverst til højre
  2. Øverst til højre skal du vælge Åbn standardindstillinger
  3. Rul til sektionen Planlægningstyper, og vælg Ingen på listen til venstre
  4. Find feltet Ressourcecelleskabelon for planlægningsassistent, vælg knappen til højre for at åbne editoren
  5. Opdater feltet Værdi med koden Ressourcecelleskabelon ovenfor, og vælg Gem som
  6. Angiv "Skabelon til sprogressourcecelle" i feltet Navn, og vælg Gem. Dette opretter en ny konfigurationspost og knytter dette planlægningsområde til posten.
  7. Nederst i dialogboksen skal du vælge Anvend

Kortet genindlæses med den opdaterede konfiguration. Ressourcecellen angiver nu, hvordan en ressource matchede sprogbegrænsningen i panelet Filter.

Resumé

I ovenstående trin har vi ændret panelet Filter i planlægningsassistenten for at vise et filterkontrolelement for objektet Sprog. Vi har også ændret forespørgslen Hent begrænsninger for at forespørge på de nye sprogattributter, der er relateret til objektet Krav, og forme dem til en liste. Når en bruger vælger at finde tilgængelighed for en kravspost, viser panelet Filter de registrerede sprogbegrænsninger. Værdierne fra panelet Filter overføres til forespørgslen Hent ressourcer, og FetchXML-forespørgslen returnerer kun matchende ressourcer.

Se også

Universal Fetch XML

Produktbemærkninger til udvidelsesmuligheder i Universal Resource Scheduling