Jaa


Esimerkki: Universal Resource Schedulingin laajentaminen mukautetun kielen rajoitteen avulla

Tämä vaiheittainen ohje täydentää kohtaa Resurssien vastaavuushaun ymmärtäminen ja mukauttaminen Universal Resource Schedulingissa

Näissä vaiheittaisissa ohjeissa laajennetaan Universal Resource Scheduling -resursseja Language-rajoituksen kanssa. Oletetaan, että organisaatio haluaa suodattaa resurssit resurssien käyttämän kielen perusteella. Lisäksi halutaan taltioida työpaikassa vaadittavan kielen Requirement-tietue. Tämä rajoitus on samankaltainen kuin sisäinen Territory-rajoitus. Uusi pääentiteetti, Language, tallentaa resurssin osaamat kielet. Resource-tietue voidaan sitten liittää useisiin Languages-tietueisiin monta moneen -suhde-entiteetin kautta. Requirement-entiteetissä mallinnus tapahtuu käyttämällä kahta uutta valintamääritettä: Primary Language ja Secondary Language. Kun tarvetta vastaavaa entiteettiä etsitään, vain resurssit, joihin on liitetty joko Primary Language tai Secondary Language, näytetään.

Uusien entiteettien ja suhteiden luominen

Tässä osassa luodaan uusi Language-pääentiteetin rakenne sekä päivitetään Resource- ja Requirement-entiteetit vastaavilla suhteilla uuteen Language-entiteettiin.

Uuden julkaisijan luominen

  1. Uuden julkaisijan luominen valitsemalla Dynamics 365:ssä Mukautukset

  2. Täytä Uusi julkaisija -lomakkeeseen seuraavat tiedot:

    Kenttä Value
    Näyttönimi Language
    Nimi language
    Etuliite lang
  3. Valitse Tallenna ja sulje.

Uuden ratkaisun luominen

  1. Uuden ratkaisun luominen valitsemalla Dynamics 365:ssä Mukautukset

  2. Täytä Uusi ratkaisu -lomakkeeseen seuraavat tiedot:

    Kenttä Value
    Näyttönimi Language
    Nimi Language
    Julkaisija Language
    Versio 1.0.0.0
  3. Valitse Tallenna.

Kielientiteetin luominen

  1. Luo uusi entiteetti kieliratkaisussa.

  2. Täytä Uusi entiteetti -lomakkeeseen seuraavat tiedot:

    Kenttä Value
    Näyttönimi Language
    Monikkonimi Kielivaihtoehdot
    Nimi lang_language (lang_-etuliite täytetään automaattisesti ja on vain luku -muotoinen)
  3. Valitse Tallenna.

Monta moneen -suhteen luominen resurssientiteetistä kielientiteettiin

  1. Luo uusi monta moneen -suhde kielientiteetissä.

  2. Täytä Uusi suhde -lomakkeeseen seuraavat tiedot:

    Kenttä Value
    Nykyinen kohde
    Näyttöasetus Käytä monikollista nimeä
    Muu kohde
    Kohteen nimi Varattava resurssi
  3. Valitse Tallenna ja sulje.

  4. Sulje kielientiteetin lomake.

Suhteiden luominen tarve-entiteetistä kielientiteettiin

  1. Lisää aiemmin luotu tarve-entiteetti ratkaisuun kieliratkaisussa. (Jos Pakollisia osia puuttuu -valintaikkuna avautuu, valitse Ei, älä lisää pakollisia osia.)

  2. Luo uusi kenttä resurssitarve-entiteetissä.

  3. Täytä Uusi kenttä -lomakkeeseen seuraavat tiedot:

    Kenttä Value
    Näyttönimi Primary Language
    Tietotyyppi Valinta
    Kohdetietuelaji Language
  4. Valitse Tallenna ja sulje.

  5. Luo uusi kenttä resurssitarve-entiteetissä.

  6. Täytä Uusi kenttä -lomakkeeseen seuraavat tiedot:

    Kenttä Value
    Näyttönimi Secondary Language
    Tietotyyppi Valinta
    Kohdetietuelaji Language
  7. Valitse Tallenna ja sulje.

Tarpeen päälomakkeen päivittäminen

  1. Lisää aiemmin luotu tietolomake entiteetin alikomponentteihin resurssitarve-entiteetissä. (Jos Pakollisia osia puuttuu -valintaikkuna avautuu, valitse Ei, älä lisää pakollisia osia.)
  2. Lisää tietolomakkeessa kaksi uutta määritettä, Primary Language ja Secondary Language, lomakkeeseen kenttien hallinnan avulla, jotta käyttäjät voivat antaa nämä tiedot tarpeiden luonnin yhteydessä.
  3. Valitse Tallenna.
  4. Valitse Julkaise.
  5. Voit sulkea lomake-editorin.

Yhteenveto

Edellä olevissa vaiheissa luotiin uusi kielientiteetti. Seuraavaksi lisättiin uusi suhde resurssi- ja tarve-entiteettien avulla. Resurssit voivat liittyä useisiin kieliin, sillä kielen ja resurssin välille lisättiin monta moneen -suhde. Tarpeet voivat liittyä kahteen kieleen, sillä tarve-entiteettiin lisättiin kaksi uuteen kielientiteettiin osoittavaa valintamääritettä.

Tietojen lisääminen

Lisää uusia tietueita kielientiteettiin erikoishaun avulla. Voit sitten liittää resurssitietueet uusiin kielitietueisiin avaamalla resurssitietueen ja siirtymällä siirtymispalkissa kielisuhteeseen. Voit täyttää tarvetietueissa tarvelomakkeen uudet Ensisijainen kieli- ja Toissijainen kieli -kentät.

Aikataulutaulukon mukauttaminen

Jotta uutta kielirajoitusta voisi käyttää resurssien suodattaminen aikataulutaulukossa, Resurssin noutokysely- ja Suodattimen asettelu -määritystietueet on päivitetty.

Suodattimen asettelu -määritys

Tippi

Seuraavissa vaiheissa muutosten tekemiseen kannattaa käyttää tekstieditoria, joka tukee XML-syntaksin korostusta, ja liittää sitten muutokset takaisin Universal Resource Scheduling -editoriin.

Suodattimen asettelu -määritys on XML-asettelumääritys, jolla voidaan mukauttaa suodatinpaneelin asettelua.

Muistiinpano

Tässä harjoituksessa suodatinpaneelista poistetaan kaikki Universal Resource Scheduling-ratkaisun mukana toimitetut oletussuodattimet ja kielet lisätään ainoaksi valittavaksi suodattimeksi.

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

control-elementti lisää uuden ohjausobjektin suodatinpaneeliin. Määritteiden kuvaukset:

Nimi Kuvaus
type Suodattimen ohjausobjektin tyyppi. combo-ohjausobjekti hahmontaa avattavan luettelon, josta arvot voidaan valita.
source Avattavan ohjausobjektiluettelon arvojen lähde. entity-lähde näyttää entiteettitietueet avattavassa luettelossa.
key Avain, jolla voidaan tallentaa valitut arvo rajoitusten ominaisuusvarantoon.
inactive-state Tämän entiteetin passiivinen statecode. Tällä määritteellä passiiviset tietueet jätetään pois avattavasta luettelosta.
label-id Tässä ohjausobjektissa käytettävä lokalisoitu selite.
entity Tämän entiteetin tietueet näytetään avattavassa luettelossa.
multi Määrittää avattavan luettelon, jolla voi valita yhden tietueen tai useita tietueita.

Suodattimen asettelu:

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

Uuden kielitaulukon luominen

Nämä muutokset voidaan pitää eristettyinä luomalla täysin uusi erillisen aikataulutaulukko ja toteuttamalla sitten muutokset. Nämä muutokset voidaan tehdä myös oletusaikataulutaulukossa, jolloin muut aikataulutaulukot perivät nämä muutokset automaattisesti.

  1. Valitse Dynamics 365:n yläsiirtymispalkissa Resurssin aikataulutus > Aikataulutaulukko
  2. Luo uusi taulukko valitsemalla oikeassa yläkulmassa +-merkki.
  3. Anna uudelle aikataulutaulukon kielelle nimi.
  4. Valitse valintaikkunan alaosassa Lisää. Uusi taulukko luodaan.

Aikataulutaulukon suodattimen asettelun päivittäminen

Seuraavaksi luodaan uusi määritystietue, johon aikataulutaulukon käyttämät suodattimen asettelut ja kyselyt tallennetaan. Tämän jälkeen juuri luotu aikataulutaulukko linkitetään uuteen määritystietueeseen. Se on mahdollista tehdä monella eri tavalla, mutta seuraava tapa on niistä nopein:

  1. Kaksoisnapsauta oikeassa yläkulmassa Kieli-välilehteä
  2. Vieritä alas ja valitse Yleiset asetukset > Muut asetukset.
  3. Paikanna Suodattimen asettelu -kenttä ja avaa editori oikealla olevaa painiketta napsauttamalla.
  4. Päivitä Arvo-kenttään edellä oleva Suodattimen asettelun -koodi ja valitse Tallenna nimellä.
  5. Kirjoita Nimi-kenttään Kielisuodattimen asettelu ja valitse Tallenna. Uusi määritystietue luodaan ja tämä aikataulutaulukko linkitetään tietueeseen.
  6. Valitse valintaikkunan alaosassa Käytä.

Taulukko latautuu uudelleen. Vasemmalla olevassa suodatinpaneelissa näkyy nyt uusi asettelu, jossa on kielten suodatin on käytettävissä. Suodatus ei toimi vielä, sillä myös resurssien noutokysely on päivitettävä, ennen kuin uutta suodatinta voi käyttää.

Resurssien noutokyselyn määritys

Tippi

Seuraavissa vaiheissa muutosten tekemiseen kannattaa käyttää tekstieditoria, joka tukee XML-syntaksin korostusta, ja liittää sitten muutokset takaisin Universal Resource Scheduling -editoriin.

Resurssien noutokyselyn määritys UFX-kysely, jota resurssien vastaavuushaun ohjelmointirajapinta käyttää. Se käyttää syötteenä suodatinpaneelissa annettuja arvoja ja etsii vastaavat resurssit muodostamalla dynaamisesti oikean FetchXML-kielen.

Jäljempänä on uusia resurssien noutokyselyyn lisättyjä koodikatkelmia. Resurssien kielet käyttävät näitä koodikatkelmia vastaavuuksien hakemiseen ja järjestämiseen.

Liitosmääritysten lisääminen bookableresource-arvosta lang_language-arvoon

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

Suodatinpaneelissa valitut arvot välitetään syötteenä kyselyyn, ja ne ovat käytettävissä XPath $input -muuttujina.

Resurssien noutokysely käyttää FetchXML-kieltä Resource (bookableresource)-entiteetin kyselyihin. FetchXML-kielen link-entity-elementtiä käytetään palauttamaan vain resurssit, jotka on liitetty suodatinpaneelissa valittuihin kielitietueisiin. Jotta kielten vastaavuuksien hakeminen ja niiden järjestäminen ensi- tai toissijaisen kielen mukaan myöhemmin kohdassa Resurssin solumalli kuvattavalla tavalla olisi mahdollista, käytössä on useita link-entity-liitosmäärityksiä.

element- ja attribute-kuvaukset:

Nimi Kuvaus
link-entity Luo monta moneen -suhde resurssi- ja kielientiteettien välistä liitosta varten.
ufx:if Lähetä tämä FetchXML-elementti (link-entity) vain, jos tämän määritteen XPath-lauseke palauttaa arvon.
attribute Palauta vastaava ensi- tai toissijainen kieli.
filter ja condition Suodata monta moneen -suhdetietueet vain tietueiksi, jotka vastaavat määritettyjä kielitunnuksia.
ufx:value ja select Tuloksena select-määritteen XPath-lausekkeen tulos.
ufx:apply ja select Lähettää kunkin select-määritteen XPath-elementistä palautetun tuloksen FetchXML-alielementit.
value Sisältää kielitietueen tunnuksen.

Resurssin lajittelujärjestyksen määrittäminen

Kun vastaavat resurssit on noudettu, uusi lang_order-ominaisuus määritetään kunkin resurssien määritettyjen kielten perusteella määrittämään lajittelujärjestys.

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

element- ja attribute-kuvaukset:

Nimi Kuvaus
lang_order Luo uusi ominaisuus kussakin lang_order-nimisestä FetchXML-kyselystä palautetussa resurssissa.
ufx:select Määritä tämän määritteen XPath-lausekkeen tulos lang_order-ominaisuuteen. Kyselyn aiemmin noudettuja lang_primary- ja lang_secondary-ominaisuuksia käytetään yhdessä XPathin iif-toiminnon kanssa määrittämään resurssin vastaavuusjärjestys.

Tulosten järjestäminen

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

UFX-kyselyt käsitellään järjestyksessä. Kun resurssit on noudettu FetchXML-kielen avulla, tulokset määritetään Resources-ominaisuuteen. Tulokset lajitellaan aiemmin lisätyn lang_order-ominaisuuden perusteella ja lajitellut tulokset määritetään uudelleen Resources-ominaisuuteen.

element- ja attribute-kuvaukset:

Nimi Kuvaus
Resources Järjestä Resources-ominaisuus uudelleen
ufx:select Määritä tämän määritteen XPath-lausekkeen tulos Resources-ominaisuuteen. XPathin order-funktiolla järjestetään Resources-luettelo lang_order-ominaisuudessa.

Muistiinpano

Universal Resource Schedulingiin sisältyvä resurssien oletusnoutokysely on suurikokoinen kysely, joka tukee kaikkia Universal Resource Schedulingiin sisältyviä resurssirajoituksia. Tässä harjoituksessa käytetään oletuskyselyn alijoukkoa. Lisäksi kielet lisätään ainoaksi suodattimeksi.

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

Aikataulutaulukon resurssien noutokyselyn päivittäminen

  1. Kaksoisnapsauta oikeassa yläkulmassa Kieli-välilehteä
  2. Vieritä alas ja valitse Yleiset asetukset > Muut asetukset.
  3. Paikanna Resurssien noutokysely -kenttä ja avaa editori oikealla olevaa painiketta napsauttamalla.
  4. Päivitä Arvo-kenttään edellä oleva Resurssien noutokysely -koodi ja valitse Tallenna nimellä.
  5. Kirjoita Nimi-kenttään Kielen resurssikysely ja valitse Tallenna. Uusi määritystietue luodaan ja tämä aikataulutaulukko linkitetään tietueeseen.
  6. Valitse valintaikkunan alaosassa Käytä.

Taulukko lataa päivitetyn määrityksen. Suodatusta voi nyt käyttää. Jos loit kielitietueita ja liitit ne resurssitietueisiin, voit nyt suodattaa tietoja liitettyjen kielten perusteella.

Yhteenveto

Suodatinpaneeli muokattiin edellä olevissa vaiheissa näyttämään kielientiteetin suodatuksen ohjausobjekti. Lisäksi resurssien noutokysely muokattiin vastaamaan valittuihin kielitietueisiin liitettyjä resursseja. Kun käyttäjä valitsee arvoja suodatuksen ohjausobjektissa ja valitsee Haku, arvot välitetään kyselyyn ja FetchXML-kysely palauttaa vain hakua vastaavat resurssit.

Ajoitusavustajan mukauttaminen

Ajoitusavustajan suodattimen asettelun ja rajoitusten noutokyselyn määritykset on mukautettava käyttämään ajoitusavustajan uusia kielirajoituksia.

Toisin kuin aikataulutaulukon mukautuksissa, joissa jokainen taulukko voidaan mukauttaa itsenäisesti, ajoitusavustajan mukautukset vaikuttavat kaikkiin ajoitusavustajaa käyttäviin taulukoihin. Ajoitusavustajan mukautukset voivat koskea tiettyä aikataulutettavaa tyyppiä tai kaikkia tyyppejä. Tässä esimerkissä mukautetaan kaikkien tyyppien ajoitusavustaja.

Ajoitusavustajan suodattimen asettelun määritys

Tippi

Seuraavissa vaiheissa muutosten tekemiseen kannattaa käyttää tekstieditoria, joka tukee XML-syntaksin korostusta, ja liittää sitten muutokset takaisin Universal Resource Scheduling -editoriin.

Ajoitusavustajan suodattimen asettelun määritys määrittää suodatinpaneelin ohjausobjektin asettelun samalla tavoin kuin aikataulutaulukon suodattimen asettelussa. Ajoitusavustaja käyttää enemmän suodattimia kuin aikataulutaulukko, joten käytössä on erilainen asettelu. Käytettäviä suodattimia ovat esimerkiksi aloitusaika, päättymisaika ja kesto.

Muistiinpano

Tässä harjoituksessa käytetään vain ajoitusavustajan suodattimen asettelun määrityksen Universal Resource Schedulingiin sisältyvien oletussuodattimien alijoukkoa. Lisäksi avattava kielivalikko lisätään ainoaksi käytössä olevaksi suodattimeksi.

Asetteluun lisättävä suodatin on sama, jota käytettiin edellä kohdassa Suodattimen asettelu -määritys. Muita ohjausobjekteja tarvitaan muokkaamaan ajoitusavustajan hakuparametreja.

Täydellinen ajoitusavustan suodattimen asettelu

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

Ajoitusavustajan suodattimen asettelun päivittäminen

  1. Kaksoisnapsauta oikeassa yläkulmassa Kieli-välilehteä
  2. Valitse oikeassa yläkulmassa Avaa oletusasetukset.
  3. Vieritä Aikataulutyypit-osaan ja valitse vasemmassa luettelossa Ei mitään.
  4. Paikanna Ajoitusavustimen suodattimen asettelu -kenttä ja avaa editori oikealla olevaa painiketta napsauttamalla.
  5. Päivitä Arvo-kenttään edellä oleva Ajoitusavustajan suodattimen asettelun -koodi ja valitse Tallenna nimellä.
  6. Kirjoita Nimi-kenttään Kielen ajoitusavustajan suodattimen asettelu ja valitse Tallenna. Uusi määritystietue luodaan ja tämä aikataulutaulukko linkitetään tietueeseen.
  7. Valitse valintaikkunan alaosassa Käytä.

Taulukko latautuu uudelleen. Seuraavaksi on muutettava rajoituskysely nouto, sillä uudet kielirajoitukset sisältävän ajoitusavustajan käyttö ei ole mahdollista ennen tätä. Tarve-osan kielijoukko tulee näin osaksi ajoitusavustajan hakua.

Rajoitekyselyn noudon määritys

Tippi

Seuraavissa vaiheissa muutosten tekemiseen kannattaa käyttää tekstieditoria, joka tukee XML-syntaksin korostusta, ja liittää sitten muutokset takaisin Universal Resource Scheduling -editoriin.

Rajoitusten noutokyselyn määritys UFX-kysely, jota tarverajoitusten noudon ohjelmointirajapinta käyttää. Se käyttää syötteenä (käyttöliittymässä valitun) tarvetietueen tunnusta ja palauttaa tarvetietueen kaikkine alitietueineen.

Muistiinpano

Universal Resource Schedulingiin sisältyvä rajoitusten oletusnoutokysely on suurikokoinen kysely, joka tukee kaikkia Universal Resource Schedulingiin sisältyviä tarverajoituksia. Tässä harjoituksessa käytetään oletuskyselyn alijoukkoa. Lisäksi kielet lisätään ainoaksi suodattimeksi.

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

UFX-kyselyt käsitellään järjestyksessä. Rajoitusten noutokysely käyttää FetchXML-kieltä Requirement (msdyn_resourcerequirement) -entiteetin kyselyssä ja määrittää tuloksen, tarvetietueen, Requirement-ominaisuuteen. Rajoitusten ominaisuusvarantoon lisätään uusi Languages-ominaisuus, joka yhdistää molemmat määritteet, eli ensi- ja toissijaisen kielen, yhdeksi entiteettiluetteloksi (EntityCollection). Tämä on välttämätöntä, sillä kielten ohjausobjekti näytetään suodatinpaneelissa tietueluettelona. Vaihtoehtoisesti kahdelle määritteelle voitaisiin luoda suodatinpaneeliin kaksi erillistä ohjausobjektia.

element- ja attribute-kuvaukset:

Nimi Kuvaus
Languages Luo uusi ominaisuus rajoitusten Languages-nimisessä ominaisuusvarannossa.
ufx:select Määritä tämän määritteen XPath-lausekkeen tulos Languages-ominaisuuteen. Aiemmin kyselyssä noudetut ja Requirement-ominaisuudessa olevat lang_primarylanguage- ja lang_secondarylanguage-ominaisuudet välitetään lookup-to-list -XPath-funktioon, joka muuntaa useat lookup-ominaisuudet yhdeksi list (EntityCollection) -luetteloksi

Rajoitekyselyn nouto:

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

Rajoitekyselyn noudon päivittäminen

  1. Kaksoisnapsauta oikeassa yläkulmassa Kieli-välilehteä
  2. Valitse oikeassa yläkulmassa Avaa oletusasetukset.
  3. Vieritä Aikataulutyypit-osaan ja valitse vasemmassa luettelossa Ei mitään.
  4. Paikanna Ajoitusavustimen rajoitekyselyn nouto -kenttä ja avaa editori oikealla olevaa painiketta napsauttamalla.
  5. Päivitä Arvo-kenttään edellä oleva Resurssien noutokysely -koodi ja valitse Tallenna nimellä.
  6. Kirjoita Nimi-kenttään Kielen rajoitekysely ja valitse Tallenna. Uusi määritystietue luodaan ja tämä aikataulutaulukko linkitetään tietueeseen.
  7. Paikanna Ajoitusavustajan rajoitekyselyn nouto -kenttä ja valitse aiemmin aikataulutaulukon mukautuksissa luotu kielten resurssikysely.
  8. Valitse valintaikkunan alaosassa Käytä.

Taulukko lataa päivitetyn määrityksen. Ajoitusavustajan suodatus on nyt käytössä. Jos loit kielitietueita ja liitit ne tarvetietueisiin, voit nyt valita tarvetietueen ajoitusavustajan alareunassa ja käynnistää ajoitusavustajan valitsemalla Etsi saatavuus. Näkyviin tulee vain resurssit, jotka vastaavat tarpeeseen tallennettuja kieliä.

Resurssin solumallin määritys

Tippi

Seuraavissa vaiheissa muutosten tekemiseen kannattaa käyttää tekstieditoria, joka tukee HTML-syntaksin korostusta, ja liittää sitten muutokset takaisin Universal Resource Scheduling -editoriin.

Resurssisolun mallin määritys on Handlebars-malli, jolla sisältö hahmonnetaan resurssisolussa. Resurssikyselyn noudon tulos on mallin käytössä.

Oletusresurssimalli muokataan näyttämään vihreä ✔✱ -ilmaisin, jos resurssi vastaa ensi- ja toissijaista kieltä, vihreän ✔-ilmaisimen, jos resurssi vastaa vain ensisijaista kieltä, ja keltaisen ✔-ilmaisimen, jos resurssi vastaa vain toissijaista kieltä.

{{#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- ja lang_secondary-ominaisuudet palautetaan edellä määritetystä mukautetusta resurssikyselyn noudosta. Lisätietoja mallien syntaksista on Handlebars-sivustossa.

Resurssin solumalli:

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

Resurssin solumallin päivittäminen

  1. Kaksoisnapsauta oikeassa yläkulmassa Kieli-välilehteä
  2. Valitse oikeassa yläkulmassa Avaa oletusasetukset.
  3. Vieritä Aikataulutyypit-osaan ja valitse vasemmassa luettelossa Ei mitään.
  4. Paikanna ajoitusavustimen Resurssin solumalli -kenttä ja avaa editori oikealla olevaa painiketta napsauttamalla.
  5. Päivitä Arvo-kenttään edellä oleva Resurssisolun malli -koodi ja valitse Tallenna nimellä.
  6. Kirjoita Nimi-kenttään Kielen resurssisolun malli ja valitse Tallenna. Uusi määritystietue luodaan ja tämä aikataulutaulukko linkitetään tietueeseen.
  7. Valitse valintaikkunan alaosassa Käytä.

Taulukko lataa päivitetyn määrityksen. Resurssisolu ilmaisee nyt, miten resurssi vastaa suodatinpaneelin kielirajoitusta.

Yhteenveto

Ajoitusavustajan suodatinpaneeli muokattiin edellä olevissa vaiheissa näyttämään kielientiteetin suodatuksen ohjausobjekti. Lisäksi rajoituskyselyn nouto muokattiin tekemään tarve-entiteettiin liittyvien uusien kielimääritteiden kysely ja muokkaamaan ne luetteloksi. Kun käyttäjä valitse tarvetietueen saatavuuden etsimisen, suodatinpaneeli näyttää taltioidut kielirajoitukset. Suodatinpaneelin arvot välitetään resurssien noutokyselyyn ja FetchXML-kysely palauttaa vain hakua vastaavat resurssit.

Katso myös

Yleinen FetchXML-kieli

Universal Resource Schedulingin laajennettavuuden julkaisutiedot