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

Denne artikel er en ledsager til forståelse og tilpasning af ressourcematch i Universel ressourceplanlægning.

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.

Tips

Et objekt kaldes også en tabel.

Opret de nye tabeller og relationer

Opret det nye skema for hovedtabellen Language , og opdater tabellerne Resource og Requirement med de tilsvarende relationer til den nye Language tabel.

Opret en ny udgiver

  1. Gå til Power Platform-miljøindstillinger-appen. Vælg Tilpasninger udgivere>, og opret en ny udgiver. Få mere at vide i Opret en udgiver.

  2. Angiv følgende oplysninger:

    Felt Værdi
    Vist navn Sprog
    Name Sprog
    Præfiks lang
  3. Vælg Gem.

Opret en ny løsning

  1. Vælg Tilpasninger Løsninger,> og opret en ny løsning. Få mere at vide i Opret en løsning.

  2. Angiv følgende oplysninger:

    Felt Værdi
    Vis navn Sprog
    Name Sprog
    Udgiver Sprog
    Version 1.0.0.0
  3. Vælg Opret.

Opret sprogtabellen

  1. Åbn sprogløsningen, og vælg Ny>tabeltabel>(avancerede egenskaber). Lær mere i Opret nye tabeller.

  2. Angiv følgende oplysninger:

    Felt Værdi
    Vis navn Sprog
    Flertal navn Sprog

    Skemanavnet under Avancerede indstillinger udfyldes automatisk| lang_Language. Præfikset lang_ er skrivebeskyttet.

  3. Vælg Gem.

Opret mange til mange-relationen fra tabellen Ressource til tabellen Language

  1. Åbn Sprog-tabellen og vælg Nyt>Forhold>Mange-til-mange. Lær mere i Opret mange-til-mange bordrelationer.
  2. I tabellen Relateret (mange) skal du vælge Reserverbar ressource.
  3. Vælg Udført.
  4. Luk sprog-tabellen.

Opret relationerne fra den eksisterende kravtabel til tabellen Language

  1. Åbn sprogløsningen, og vælg Tilføj eksisterende>tabelressourcekrav>.

  2. Hvis dialogboksen Manglende påkrævede komponenter vises, skal du vælge Nej og ikke inkludere påkrævede komponenter.

  3. Vælg Tilføj.

  4. Opret en ny kolonne i tabellen Ressourcekrav.

  5. Angiv følgende oplysninger:

    Felt Værdi
    Vist navn Primært sprog
    Datatype Søg
    Relateret tabel Sprog
  6. Vælg Gem.

  7. I tabellen Ressourcekrav skal du oprette en ny kolonne.

  8. Angiv følgende oplysninger:

    Felt Værdi
    Vist navn Sekundært sprog
    Datatype Søg
    Relateret tabel Sprog
  9. Vælg Gem.

Opdater Krav hovedformularen

  1. Vælg Formularer i tabellen Ressourcekrav.
  2. Vælg Tilføj eksisterende formularinformation> og Tilføj dem. Hvis dialogboksen Manglende påkrævede komponenter vises, skal du vælge Nej og ikke inkludere påkrævede komponenter.
  3. Åbn Informationsformularen og tilføj de to nye kolonner, primært sprog og sekundært sprog, til formularen, så brugerne kan indtaste disse oplysninger, efterhånden som de opretter krav. Få mere at vide i Føj kolonner til en formular.
  4. Vælg Gem og publicer.

Føj sprogdata til ressourcer og krav

Føj nye poster til tabellen Language. Du kan derefter knytte ressourceposter til de nye sprogposter ved at åbne en ressourcepost og navigere til sprogrelationen på navigationslinjen. I forbindelse med kravsposter kan du udfylde de nye felter Primært sprog og Sekundært sprog i formularen Krav.

Tilpasse planlægningstavlet

For at filtrere ressourcer i planlægningsbrættet ved at bruge den nye sprogbegrænsning, opdater du konfigurationsposterne Retrieve Resources Query og Filter Layout .

Bemærk

Disse tilpasninger af skematavlen gælder ensartet for alle faner og kan ikke sættes individuelt pr. fane. Denne tilpasning gælder for Schedule Assistant Filter Layout, Schedule Assistant Retrieve Resources Query, Schedule Assistant Resource Cell Template og Schedule Assistant Retrieve Constraints Query.

Konfigurér filterlayoutet

I følgende trin skal du bruge en teksteditor, der understøtter fremhævning af XML-syntaks, for at foretage dine ændringer og derefter indsætte ændringerne i Universal Resource Scheduling-editoren igen.

Filterlayout-konfigurationen er en XML-layoutdefinition til at tilpasse layoutet af filterpanelet.

Bemærk

Fjern alle standardfiltre, som Universal Resource Scheduling følger med, fra filterpanelet, og tilføj 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:

Name Description
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 Inaktiv for statecode dette objekt, som bruges til at udelade 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

Layout for filter:

<?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, lav et separat skemaboard og implementer ændringerne. Du kan altid lave disse ændringer på standardplanlisten, så andre planskemaer automatisk kan overtage dem.

  1. Gå til appen Ressourceplanlægning, og vælg Planlæg tavle.
  2. Vælg fortegnet + for at oprette en ny tavle.
  3. Navngiv det nye bestyrelsessprog.
  4. Nederst i dialogboksen skal du vælge Tilføj. Den nye bestyrelse oprettes.

Konfigurer planlægningstavlens filterlayout

Dernæst opretter du en ny konfigurationspost, der gemmer filterlayouts og forespørgsler, som bruges af skematavlen. Derefter linker du det nyoprettede skemaboard til den nye konfigurationspost. Der er flere måder at gøre dette på, men her er den hurtigste metode:

  1. På planlægningstavlen skal du vælge ellipserne (...) øverst til højre og Scheduler-indstillingerne.
  2. Vælg Alle indstillinger for tavle nederst i ruden. Vælg derefter Andet.
  3. Find feltet Filterlayout , og vælg blyantsikonet for at åbne editoren.
  4. Indtast "Language Filter Layout" i Navn-feltet, tilføj filterlayout-koden og vælg Gem som ny.
  5. Vælg Gem. En ny konfigurationspost oprettes, som forbinder denne tidsplantavle med posten.
  6. Vælg Filtre. Panelet Filter vises med det nye layout. Det er kun filteret Sprog, der er tilgængeligt. Filtrering fungerer ikke, før du opdaterer forespørgslen Hent ressourcer.

Opdater forespørgslen Hent ressourcer

I følgende trin skal du bruge en teksteditor, der understøtter fremhævning af XML-syntaks, for at foretage dine ændringer og derefter indsætte ændringerne i Universal Resource Scheduling-editoren igen.

Konfigurationen Af forespørgsel om hentning af ressourcer er en UFXML-forespørgsel (Universal FetchXML), der bruges af API'en til matchning af ressourcer. Den tager de værdier, der er indtastet i filterpanelet, som input og konstruerer dynamisk den korrekte FetchXML for at finde matchende ressourcer.

Bemærk

Føj disse kodestykker til forespørgslen Hent ressourcer for at matche og sortere efter ressourcernes sprog.

Føj joinforbindelserne 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>

Bemærk

De værdier, der vælges i filterpanelet, sendes som input til forespørgslen og er tilgængelige i XPath-variablen $input .

Forespørgslen Hent ressourcer bruger FetchXML til at forespørge objektet Resource (bookableresource) . Vi har valgt elementet FetchXML link-entity for kun at returnere ressourcer, der er knyttet til de sprogposter, der er valgt i panelet Filter. Brug flere link-entity joinforbindelser til at vise de tilsvarende sprog og rækkefølge efter primært eller sekundært sprog, som beskrevet i afsnittet Ressourcecelleskabelon.

Her er beskrivelsen af hver element og attribute:

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

Bestem enhedens sorteringsrækkefølge

Når du har hentet de tilsvarende ressourcer, der er baseret på hver ressources tildelte sprog, skal du tildele en ny lang_order egenskab for at bestemme 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>

Beskrivelsen af hver element og attribute:

Name Description
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 . Og-egenskaberne lang_primarylang_secondary , hentet tidligere i forespørgslen, bruges sammen med XPath-funktionen iif til at bestemme rækkefølgen af ressourcematchning.

Bestil 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 . Sortér resultaterne baseret på den egenskab, der lang_order er tilføjet tidligere, og tildel de sorterede resultater til egenskaben Resources igen.

Beskrivelsen af hver element og attribute:

Name Description
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.

Bemærk

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 skal kun bruges et delmængde af standardforespørgslen og tilføjes Languages 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>

Opdater forespørgslen om at hente ressourcer på skematavlen

  1. På planlægningstavlen skal du vælge ellipserne (...) øverst til højre og Scheduler-indstillingerne.
  2. Vælg Alle indstillinger for tavle nederst i ruden. Vælg derefter Andet.
  3. Find feltet Hent ressourceforespørgsel , og vælg blyantsikonet for at åbne editoren.
  4. Indtast Language Resources Query i navnefeltet, tilføj koden Hent Ressourcer, og vælg Gem som ny.
  5. Vælg Gem. En ny konfigurationspost oprettes, som forbinder denne tidsplantavle med posten.

Tavlen genindlæses med den opdaterede konfiguration. Filtrering fungerer. Hvis du opretter sprogposter og knytter dem til ressourceposter, kan du filtrere ressourcer efter deres tilknyttede sprog.

Tilpas tidsplanassistenten

Tilpas planlægningsassistentens filterlayout og Hent begrænsninger-forespørgselskonfigurationerne for at bruge de nye sprogbegrænsninger i tidsplanassistenten.

I modsætning til tilpasningerne af skematavlerne, hvor du kan tilpasse hvert bord individuelt, påvirker tilpasningerne af tidsplanassistenten alle tavler, hvor tidsplanassistenten bruges. Du kan tilpasse tidsplanassistenten specifikt til en planlæggelig type eller til alle typer. I dette eksempel skal du tilpasse planlægningsassistenten til alle typer.

Konfigurer filterlayoutet for planlægningsassistenten

I følgende trin skal du bruge en teksteditor, der understøtter fremhævning af XML-syntaks, for at foretage dine ændringer og derefter indsætte ændringerne i Universal Resource Scheduling-editoren igen.

Planlægningsassistentens filterlayoutkonfiguration, ligesom skematavlens filterlayout, definerer layoutet af kontrollerne i filterpanelet. Da planlægningsassistenten bruger flere filtre end skematavlen, som Starttid, Sluttid og Varighed, bruger den et andet layout.

Bemærk

Til denne øvelse genbruges kun et delmængde af standardfiltrene, der leveres i Universal Resource Scheduling fra planlægningsassistentens filterlayoutkonfiguration, og tilføj Sprog-dropdownen som det eneste tilgængelige filter.

Filteret, du tilføjer til layoutet, er det samme som i Configure schedule board-filterlayoutet. Du har brug for de andre kontroller til at ændre søgeparametrene for schedule assistant.

Det komplette layout for filteret til 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 planlægningsassistentens filterlayout

  1. På planlægningstavlen skal du vælge ellipserne (...) øverst til højre og Scheduler-indstillingerne.
  2. Vælg Alle indstillinger for tavle nederst i ruden.
  3. Rul til Tidsplantyper, og vælg Ingen.
  4. Vælg Rediger standarder, der er placeret nederst.
  5. Find filterlayoutfeltet for Schedule assistant , og vælg blyantikonet for at åbne editoren.
  6. Angiv Filterlayout for Sprogplanlægningsassistent i feltet Navn .
  7. Opdater Schedule assistant-filterlayoutfeltet med koden og vælg Gem som ny. Denne handling opretter en ny konfigurationspost, der forbinder denne skematavle med posten.
  8. Nederst i dialogen til tastaturindstillinger skal du vælge Gem.

Tavlen genindlæses. Ændr Retrieve Constraints-forespørgslen , så den inkluderer de sprog, der er sat på Kravet i planlægningsassistentens søgning.

Konfigurer forespørgslen Hent begrænsninger

I følgende trin skal du bruge en teksteditor, der understøtter fremhævning af XML-syntaks, for at foretage dine ændringer og derefter indsætte ændringerne i Universal Resource Scheduling-editoren igen.

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.

Bemærk

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 skal kun bruges et delmængde af standardforespørgslen og tilføjes Languages 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 egenskabsbeholderen for begrænsninger, der kombinerer begge attributter, primært sprog og sekundært sprog, til en enkelt liste over objekter (EntityCollection). Denne egenskab 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.

Beskrivelsen af hver element og attribute:

Name Description
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. På planlægningstavlen skal du vælge ellipserne (...) øverst til højre og Scheduler-indstillingerne.
  2. Vælg Alle indstillinger for tavle nederst i ruden.
  3. Rul til Tidsplantyper, og vælg Ingen.
  4. Vælg Rediger standarder.
  5. Find forespørgselsfeltet Hent begrænsninger i Planlægningsassistent , og vælg blyantsikonet for at åbne editoren.
  6. Angiv "Forespørgsel om sprogbegrænsninger" i feltet Navn .
  7. Opdater forespørgselsfeltet Hent begrænsninger i Planlægningsassistent med forespørgselskoden Hent begrænsninger, og vælg Gem som ny.
  8. Vælg Gem. En ny konfigurationspost oprettes, som forbinder denne tidsplantavle med posten.
  9. Find feltet Schedule assistant hent ressourcer og vælg Languages Resources Query, du har oprettet til tilpasninger af skematavlen.
  10. Vælg Gem nederst i dialogboksen.

Tavlen genindlæses med den opdaterede konfiguration. Planlægningsassistentens filtrering virker. Hvis du opretter sprogposter og knytter dem til kravposter, kan du vælge en kravpost nederst på skematavlen, vælge Find tilgængelighed for kun at se ressourcer, der matcher de sprog, der er gemt på kravet.

Konfigurer Ressourcecelle-skabelon

I følgende trin skal du bruge en teksteditor, der understøtter fremhævning af HTML-syntaks, for at foretage dine ændringer og derefter indsætte ændringerne i Universal Resource Scheduling-editoren igen.

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.

Ændr standard-ressourceskabelonen til at vise en grøn ✔ ✱-indikator, hvis ressourcen matcher primær- og sekundærsproget, en grøn ✔ indikator, hvis ressourcen kun matcher primærsproget, og en gul ✔ indikator, hvis ressourcen kun matcher sekundærsproget.

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

Og lang_secondary egenskaberne lang_primary returneres fra vores tilpassede Retrieve Resources Query, som vi har opsat. 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. På planlægningstavlen skal du vælge ellipserne (...) øverst til højre og Scheduler-indstillingerne.
  2. Vælg Alle indstillinger for tavle nederst i ruden.
  3. Rul til Tidsplantyper, og vælg Ingen.
  4. Vælg Rediger standarder.
  5. Find feltet Planlæg assistents ressourcecelleskabelon , og vælg blyantsikonet for at åbne editoren.
  6. Angiv "Skabelon til sprogressourcecelle" i feltet Navn .
  7. Opdater feltet Ressourcecelleskabelon med koden Ressourcecelleskabelon, og vælg Gem som ny.
  8. Vælg Gem. En ny konfigurationspost oprettes, som forbinder denne tidsplantavle med posten.
  9. Find feltet Schedule assistant retrieve resources query, og vælg den Languages Resources Query, du oprettede til tilpasningerne for planlægningstavlen.
  10. Vælg Gem nederst i dialogboksen.

Tavlen genindlæses med den opdaterede konfiguration. Ressourcecellen viser, hvordan en ressource svarer til sprogbegrænsningen i panelet Filter.

Yderligere ressourcer

Universel Fetch XML