Exempel: Utöka Universal Resource Scheduling med ett anpassat språkbegränsning

Den här steg-för-steg-guiden är ett tillägg till Förstå och anpassa resursmatchningen i Universal Resource Scheduling

I den här steg-för-steg-guiden kommer vi utöka Universal Resource Scheduling-resurser med en Language-begränsning. Tänk på en organisation som vill filtrera resurser efter de språk de talar. De vill också registrera det språk som krävs för att jobbet i Requirement-posten. Den här begränsningen följer ett liknande mönster för den inbyggda Territory-begränsningen. En ny överordnad entitet Language lagrar de olika språk som en resurs kan tala. En Resource post kan sedan kopplas till många Languages via en N:N-relationsentitet. På Requirement entiteten kan vi utforma detta genom att skapa två nya uppslagsattribut: Primary Language och Secondary Language. När du söker efter tillgängliga resurser för ett visst krav, visas endast resurser som är associerade med antingen Primary Language eller Secondary Language.

Skapa nya entiteter och relationer

I det här avsnittet ska du skapa det nya schemat för huvudentiteten Language och entiteterna Resource och Requirement med motsvarande relationer till den nya Language-entiteten.

Skapa en ny Utgivare

  1. I Dynamics 365, under Anpassningar, skapar du en ny utgivare

  2. Fyll i formuläret för Ny utgivare med informationen nedan:

    Fält Value
    Visningsnamn Language
    Namn språk
    Prefix språk
  3. Klicka på Spara och stäng.

Skapa en ny lösning

  1. I Dynamics 365, under Anpassningar, skapar du en ny lösning

  2. Fyll i formuläret för Ny lösning med informationen nedan:

    Fält Value
    Visningsnamn Language
    Namn Language
    Utgivare Language
    Version: 1.0.0.0
  3. Klicka på Spara.

Skapa en spårkentitet.

  1. Skapa en ny entitet i språklösningen.

  2. Fyll i formuläret för Ny entitet med informationen nedan:

    Fält Value
    Visningsnamn Language
    Pluralnamn Språk
    Namn lang_language (prefixet lang_ fylls i automatiskt och är skrivskyddat)
  3. Klicka på Spara.

Skapa en N till N-relation från entiteten Resurs till entiteten Språk

  1. I entiteten Språk skapar du en ny N till N-relation

  2. Fyll i formuläret för Ny relation med informationen nedan:

    Fält Value
    Aktuell entitet
    Visningsalternativ Använd pluralnamn
    Annan entitet
    Entitetsnamn Bokningsbar resurs
  3. Klicka på Spara och stäng.

  4. Stäng entitetsformuläret Språk

Skapa relationerna från entiteten Krav till entiteten Språk

  1. I språklösningen lägger du till den befintliga entiteten Resurskrav till lösningen (om det visas en dialogruta med Nödvändiga komponenter saknas väljer du Nej, inkludera inte nödvändiga komponenter.)

  2. Skapa ett nytt fält i entiteten Resurskrav

  3. Fyll i formuläret för Nytt fält med informationen nedan:

    Fält Value
    Visningsnamn Primärt språk
    Datatyp Slå upp
    Målposttyp Language
  4. Klicka på Spara och stäng.

  5. Skapa ett nytt fält i entiteten Resurskrav

  6. Fyll i formuläret för Nytt fält med informationen nedan:

    Fält Value
    Visningsnamn Sekundärt språk
    Datatyp Slå upp
    Målposttyp Language
  7. Klicka på Spara och stäng.

Uppdatera huvudformuläret Krav

  1. I entiteten Resurskrav lägger du till det befintliga formuläret Information till entitetens underkomponenter (om det visas en dialogruta med Nödvändiga komponenter saknas väljer du Nej, inkludera inte nödvändiga komponenter.)
  2. I formuläret Information använder du Tillgängliga fält för att lägga till två nya attribut, primärt språk och sekundärt språk i formuläret så att användarna kan ange den här informationen när de skapar krav
  3. Klicka på Spara.
  4. Klicka på Publicera
  5. Du kan stänga formulärredigeraren

Sammanfattning

I stegen ovan skapade vi entiteten Språk. Vi lade sedan till nya relationer med entiteterna Resurs och Krav. Resurser kan kopplas till flera språk, eftersom vi har lagt till N till N-relationer mellan språk och resurs. Krav kan relateras till två språk eftersom vi har lagt till två uppslagsattribut på entiteten Krav som pekar på den nya entiteten Språk.

Lägga till data

Använd Avancerad sökning för att lägga till nya poster i entiteten Språk. Därefter kan du associera resursposter till de nya språkposterna genom att öppna en resurspost och gå till relationen språk i navigeringsfältet. För kravposter kan du fylla i fälten för Primärt språk och Sekundärt språk på formuläret Krav.

Anpassa schemaläggningstavlan

Om du vill filtrera resurser i schemaläggningstavlan med den nya språkbegränsningen kommer uppdateringen i stället att uppdatera konfigurationsposterna Hämta resursfråga och Filterlayout.

Filtrera layoutkonfiguration

Dricks

För stegen nedan är det praktiskt att använda en textredigerare som har stöd för XML-syntaxmarkering för att göra ändringarna och sedan klistra in ändringarna i redigeraren för Universal Resource Scheduling.

Konfigurationen av filterlayout är en XML-layoutdefinition för att anpassa layouten på filterpanelen.

Kommentar

För den här övningen ska vi ta bort alla standardfilter som levereras med Universal Resource Scheduling från filterpanelen och lägga till språk som det enda tillgängliga filtret.

<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />

control-elementet lägger till en ny kontroll till filterpanelen. Här följer en beskrivning av varje attribut:

Namn Beskrivning
type Typ av filterkontroll. En combo-kontroll återger en listruta med värden att välja mellan
source Källan för värden för listrutekontrollen. En entity-källa visar entitetsposterna i listrutan
key Nyckeln som ska användas för att lagra de markerade värdena i egenskapssamling för begränsningar
inactive-state Det inaktiva statecode för entiteten. Den används för att utesluta inaktiva poster i listrutan
label-id Lokaliserad etikett som ska användas för den här kontrollen
entity Den här entitetens poster ska visas i listrutan
multi Konfigurerar listrutan för att tillåta att välja en enda post eller flera poster

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

Skapa ett nytt språkkort

För att hålla dessa ändringar isolerade skapar vi en helt ny schemaläggningstavla och genomför ändringarna, men du kan alltid göra dessa ändringar på standardschemaläggningstavlan så att andra schemaläggningstavlor automatiskt kan ärva dessa ändringar

  1. I Dynamics 365, längst upp på navigeringsfältet, gå till Resursschemaläggning > Schemaläggningstavla
  2. Längst upp till höger, klicka på + -tecknet för att skapa en ny tavla
  3. Namnge den nya tavlans språk
  4. Klicka på Lägg till längst ned i dialogrutan. Den nya tavlan kommer att skapas.

Uppdatera filterlayouten för schemaläggningstavlan

Sedan skapar vi en ny konfigurationspost som lagrar filterlayouter och frågor som används av schemaläggningstavlan och sedan kopplar vi nyligen skapade schemaläggningstavlan till den nya konfigurationsposten. Det finns flera sätt att göra detta, men här är snabbast:

  1. Längst upp till höger dubbelklickar du på fliken Språk
  2. Bläddra ned till Allmänna inställningar > Övriga inställningar
  3. Leta upp fältet Filterlayout och klicka på knappen till höger för att öppna redigeraren
  4. Uppdatera fältet Värde med Filterlayoutkoden ovan och klicka på Spara som.
  5. Ange ”språkfilterlayouten” i fältet Namn och klicka på Spara. Detta skapar en ny konfigurationspost och länkar den här schemaläggningstavlan till posten.
  6. Klicka på Tillämpa längst ned i dialogrutan.

Tavlan läses in igen och du ser filterpanelen till vänster med den nya layouten. Endast språkfilter är tillgängliga. Filtrering fungerar inte ännu eftersom vi måste uppdatera Hämta resursfråga för att kunna använda det nya filtret.

Konfigurera resursfrågan för hämtning

Dricks

För stegen nedan är det praktiskt att använda en textredigerare som har stöd för XML-syntaxmarkering för att göra ändringarna och sedan klistra in ändringarna i redigeraren för Universal Resource Scheduling.

Konfigurera resursfrågan för hämtning är en UFX-fråga som används av resursmatchnings-API. Det tar som indata värdena som har angetts på filterpanelen och tillverkar dynamiskt rätt FetchXML för att hitta matchande resurser.

Nedan läggs nya kodavsnitt till Hämta resursfråga för att matcha och sortera efter resursernas språk.

Lägga till kopplingar från bookableresource till 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ärden som väljs i filterpanelen skickas som indata för frågan och är tillgängliga i XPath $input variabel

Hämta resursfråga använder FetchXML för att frågan i Resource (bookableresource)-entiteten. Vi använder FetchXML link-entity-element för att endast returnera resurser som är associerade med de språkposter som har valts i filterpanelen. För att ge stöd för att visa matchande språk och sortering efter primärt eller sekundärt språk beskrivs senare i avsnittet Cellmall för resurs använder du flera link-entity-kopplingar.

Här följer en beskrivning av varje element och attribute:

Namn Beskrivning
link-entity Skapa en koppling till N till N-relationen mellan entiteterna Resurs och Språk
ufx:if Avge endast elementet FetchXML (link-entity) om XPath-uttrycket i det här attributet returnerar ett värde
attribute Returnera det matchande primära eller sekundära språket
filter och condition Filtrera endast N till N-posterna till de som matchar angivet språk-ID
ufx:value och select Utmatar resultatet av XPath-uttrycket i select-attributet
ufx:apply och select Avge underordnade FetchXML-element för varje resultat som returneras från XPath-uttrycket i select-attributet
value Innehåller ID för en språkpost

Bestämma en resurs sorteringsordning

När vi har hämtat de matchande resurserna tilldelar vi, baserat på varje resurs tilldelade språk, en ny lang_order-egenskap för att avgöra dess sorteringsordningen.

<bag>
  <lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
</bag>

Här följer en beskrivning av varje element och attribute:

Namn Beskrivning
lang_order Skapa en ny egenskap i varje resurs som returneras från FetchXML-fråga med namnet lang_order
ufx:select Tilldela resultatet av XPath-uttrycket i detta attribut till lang_order-egenskapen Egenskaperna lang_primary och lang_secondary som hämtas ovan i den här frågan används tillsammans med XPath-funktionen iif för att bestämma resursmatchningsordningen.

Sortera resultaten

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

UFX-frågor bearbetas i ordningsföljd. Efter att resurserna hämtats via FetchXML tilldelas resultaten egenskapen Resources. Vi sorterar resultatet baserat på den lang_order egenskap som lagts till tidigare och tilldelar om de sorterade resultaten till Resources egenskapen.

Här följer en beskrivning av varje element och attribute:

Namn Beskrivning
Resources Tilldela om Resources egenskapen
ufx:select Tilldela resultatet av XPath-uttrycket i detta attribut till Resources-egenskapen XPath-funktionen order används för att sortera Resources listan på dess lang_order egenskap.

Kommentar

Den vanliga hämta resursfråga som medföljer Universal Resource Scheduling är en stor fråga som stöder alla resursbegränsningar som medföljer Universal Resource Scheduling. I den här övningen ska vi bara använda en delmängd av standardfråga och lägga till språk som det enda filtret.

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

Uppdatera fråga för resurshämtning för schemaläggningstavlan

  1. Längst upp till höger dubbelklickar du på fliken Språk
  2. Bläddra ned till Allmänna inställningar > Övriga inställningar
  3. Leta upp fältet Hämta resursfråga och klicka på knappen till höger för att öppna redigeraren
  4. Uppdatera fältet Värde med koden för Hämta resursfråga ovan och klicka på Spara som.
  5. Ange ”språkresursfråga” i fältet Namn och klicka på Spara. Detta skapar en ny konfigurationspost och länkar den här schemaläggningstavlan till posten.
  6. Klicka på Tillämpa längst ned i dialogrutan.

tavlan läses in igen med den uppdaterade konfigurationen. Filtrering fungerar nu. Om du skapade poster för språk och kopplade dem till resursposter ska du nu kunna filtrera resurser efter deras associerade språk.

Sammanfattning

I stegen ovan ändrade vi filterpanelen för att visa en filterkontroll för entiteten språk. Vi kan också ändrade Hämta resursfråga så att den matchar resurser som är associerade med de markerade språkposterna. När en användare väljer värden i filterkontrollen och klickar på Sök skickas värdena till frågan och FetchXML-fråga returnerar endast matchande resurser.

Anpassa schemaläggningsassistenten

Vi behöver anpassa filterlayout för schemaläggningsassistent och konfigurationer för Hämta begränsningsfråga för att använda de nya språkbegränsningarna i schemaläggningsassistenten.

Till skillnad från schemaläggningstavlans anpassningar där varje tavla kan anpassas individuellt, påverkar schematläggningsassistentens anpassningar alla tavlor där schemaläggningsassistenten används. Schemaläggningsassistentens anpassningar kan vara begränsade till en typ av schemaläggningstyper, eller för alla. I det här exemplet ska vi anpassa schemaläggningsassistenten för alla typer.

Konfiguration av filterlayouten för schemaläggningsassistenten

Dricks

För stegen nedan är det praktiskt att använda en textredigerare som har stöd för XML-syntaxmarkering för att göra ändringarna och sedan klistra in ändringarna i redigeraren för Universal Resource Scheduling.

Konfiguration av filterlayouten för schemaläggningsassistenten, såsom filterlayouten för schemaläggningstavlan, definierar layouten på kontrollerna i filterpanelen. Eftersom schemaläggningsassistent använder fler filter än schemaläggningstavlan som starttid, sluttid, varaktighet osv för en annan layout.

Kommentar

I den här övningen återanvänder vi bara en del av standardfiltren som levererades i Universal Resource Scheduling från konfiguration av filterlayouten för schemaläggningsassistenten och lägger till listrutan med språk som endast tillgängliga filter.

Filtret vi lägger till i layouten är samma som ovan i konfiguration av filterlayout. Andra kontroller behövs för att ändra schemaläggningsassistentens sökparametrar.

Den kompletta filterlayouten för schemaläggningsassistenten

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

Uppdatera filterlayouten för schemaläggningsassistenten

  1. Längst upp till höger dubbelklickar du på fliken Språk
  2. I det övre högra hörnet klickar du på Öppna standardinställningar
  3. Bläddra till avsnittet schematyper och välj Ingen i den vänstra listan
  4. Leta upp fältet Filterlayout för schemaläggningsassistenten och klicka på knappen till höger för att öppna redigeraren
  5. Uppdatera fältet Värde med Filterlayout för schemaläggningsassistenten ovan och klicka på Spara som.
  6. Ange "Språkfilterlayout för schemaläggningsassistenten" i fältet Namn och klicka på Spara. Detta skapar en ny konfigurationspost och länkar den här schemaläggningstavlan till posten.
  7. Klicka på Tillämpa längst ned i dialogrutan.

Tavlan läses in igen. Sedan måste vi ändra Hämta begränsningsfråga innan vi kan använda schemaläggningsassistenten med våra nya språkbegränsningar så att de språk som anges på kravet är en del av schemaläggningsassistentens sökning.

Konfiguration av hämtning för begränsningsfråga

Dricks

För stegen nedan är det praktiskt att använda en textredigerare som har stöd för XML-syntaxmarkering för att göra ändringarna och sedan klistra in ändringarna i redigeraren för Universal Resource Scheduling.

Konfigurera Hämta begränsningsfråga är en UFX-fråga som används av Hämta kravbegränsnings-API. Den tar som indata ID för kravposten (väljs i användargränssnittet) och returnerar kravposten och alla dess underordnade poster.

Kommentar

Den vanliga Hämta begränsningsfråga som medföljer Universal Resource Scheduling är en stor fråga som stöder alla kravbegränsningar som medföljer Universal Resource Scheduling. I den här övningen ska vi bara använda en delmängd av standardfråga och lägga till språk som det enda filtret.

<Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />

UFX-frågor bearbetas i ordningsföljd. Hämta begränsningsfråga använder FetchXML för att fråga Requirement (msdyn_resourcerequirement)-entiteten och tilldela resultatet, en kravpost, till Requirement-egenskapen. Vi lägger till en ny Languages-egenskap i egenskapssamling för begränsningar som kombinerar båda attributen, primärt språk och sekundärt språk till en enda lista över entiteter (EntityCollection). Detta krävs eftersom vi visar språkkontrollen i filterpanelen som en lista med poster. Ett alternativ är att skapa två separata kontroller på filterpanelen för två attribut.

Här följer en beskrivning av varje element och attribute:

Namn Beskrivning
Languages Skapa en ny egenskap i resultatets egenskapssamling för begränsningar med namnet Languages
ufx:select Tilldela resultatet av XPath-uttrycket i detta attribut till Languages-egenskapen Egenskaperna lang_primarylanguage och lang_secondarylanguage hämtas tidigare i frågan och är tillgängliga i egenskapen Requirement, skickas till lookup-to-list XPath-funktionen som konverterar flera lookup egenskaper till en enda list (EntityCollection)

Hämta begränsningsfråga:

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

Uppdatera Hämta begränsningsfråga

  1. Längst upp till höger dubbelklickar du på fliken Språk
  2. I det övre högra hörnet klickar du på Öppna standardinställningar
  3. Bläddra till avsnittet schematyper och välj Ingen i den vänstra listan
  4. Leta upp fältet Fråga för begränsningshämtning för schemaläggningsassistenten och klicka på knappen till höger för att öppna redigeraren
  5. Uppdatera fältet Värde med koden för Hämta resursfråga ovan och klicka på Spara som.
  6. Ange ”språkbegränsningsfråga” i fältet Namn och klicka på Spara. Detta skapar en ny konfigurationspost och länkar den här schemaläggningstavlan till posten.
  7. Leta upp fältet Fråga för resurshämtning för schemaläggningsassistenten och välj den språkresursfråga som vi skapade tidigare för schemaläggningsassistentens anpassningar
  8. Klicka på Tillämpa längst ned i dialogrutan.

tavlan läses in igen med den uppdaterade konfigurationen. Schemaläggningsassistentens filtrering fungerar nu. Om du skapade språkposter och associerade dem med kravposter kan du nu välja en kravpost längst ned i schemaläggningstavlan och klicka på Sök efter tillgänglighet för att öppna schemaläggningsassistenten och endast se resurser som matchar de språk som sparades på kravet.

Konfiguration av resursens cellmall

Dricks

För stegen nedan är det praktiskt att använda en textredigerare som har stöd för HTML-syntaxmarkering för att göra ändringarna och sedan klistra in ändringarna i redigeraren för Universal Resource Scheduling.

Konfiguration av resursens cellmall är en Handlebars-mall som används för att återge innehållet i resurscellen. Utdata från Hämta resursfråga är tillgänglig för mallen.

Vi ändrar standardmall för resursen om du vill visa en grön ✔✱ symbol om resursen matchar de primära och sekundära språken, en grön ✔ symbol om resursen bara matchar det primära språket och en gul ✔ symbol om resursen endast matchar det sekundära språket.

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

lang_primary och lang_secondary-egenskaper returneras från våra anpassade Hämta resursfråga som angetts ovan. Se webbplats för Handlebars för dokumentation om mallens syntax.

Cellmall för resurs:

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

Uppdatera cellmallen för resurs

  1. Längst upp till höger dubbelklickar du på fliken Språk
  2. I det övre högra hörnet klickar du på Öppna standardinställningar
  3. Bläddra till avsnittet schematyper och välj Ingen i den vänstra listan
  4. Leta upp fältet Cellmall för resurs för schemaläggningsassistenten och klicka på knappen till höger för att öppna redigeraren
  5. Uppdatera fältet Värde med koden för Cellmall för resurs ovan och klicka på Spara som.
  6. Ange ”Cellmall för språkresurs” i fältet Namn och klicka på Spara. Detta skapar en ny konfigurationspost och länkar den här schemaläggningstavlan till posten.
  7. Klicka på Tillämpa längst ned i dialogrutan.

tavlan läses in igen med den uppdaterade konfigurationen. Resurscellen visar nu hur en resurs matchas med språkbegränsningen i filterpanelen.

Sammanfattning

I stegen ovan ändrade vi filterpanelen i schemaläggningsassistenten för att visa en filterkontroll för entiteten språk. Vi ändrade också Hämta begränsningsfråga till att ställa frågor om de nya språkattributen som är relaterade till kraventiteten och utforma dem i en lista. När en användare väljer att söka efter tillgänglighet för en kravpost visar filterpanelen de hämtade språkbegränsningarna. Värdena från filterpanelen överförs till Hämta resursfråga och FetchXML-frågan returnerar endast matchande resurser.

Se även

Universal Fetch XML

Universal Resource Scheduling utökningsbarhet - Viktig information