Freigeben über


Beispiel: Erweitern von Universal Resource Scheduling mit einer benutzerdefinierten Spracheinschränkung

Dieser Artikel ist ein Begleiter zum Verständnis und Anpassen des Ressourcenabgleichs in der universellen Ressourcenplanung.

In dieser Schritt-für-Schritt-Anleitung erweitern wir Universal Resource Scheduling-Ressourcen um eine Language Einschränkung. Stellen Sie sich eine Organisation vor, die Ressourcen nach den Sprachen filtern möchte, die sie sprechen. Sie möchten auch die für den Job geforderte Sprache im Requirement Datensatz erfassen. Diese Beschränkung folgt einem ähnlichen Muster wie die integrierte Territory Einschränkung. Eine neue Hauptentität Language speichert die verschiedenen Sprachen, die eine Ressource sprechen kann. Ein Resource Datensatz kann vielen Languages n: n-Beziehungs-Entität zugeordnet werden. Für die Requirement Entität modellieren wir dies, indem wir zwei neue Nachschlageattribute erstellen: Primary Language und Secondary Language. Wenn das System nach verfügbaren Ressourcen für eine Anforderung sucht, werden nur Ressourcen angezeigt, die entweder mit der Primary Language oder der Secondary Language Anzeige verknüpft sind.

Tipp

Eine Entität wird auch als Tabelle bezeichnet.

Erstellen der neuen Tabellen und Beziehungen

Erstellen Sie das neue Schema für die Haupttabelle Language und aktualisieren Sie die Tabellen Resource und Requirement mit den verwandten Beziehungen zur neuen Language Tabelle.

Erstellen eines neuen Herausgebers

  1. Gehen Sie zu Power Platform Umgebungs-Einstellungen App. Wählen Sie "Herausgeber anpassen"> aus, und erstellen Sie einen neuen Herausgeber. Weitere Informationen finden Sie unter Erstellen eines Herausgebers.

  2. Geben Sie die folgenden Informationen ein:

    Feld Wert
    Anzeigename Sprache
    Name Sprache
    Präfix Dauer
  3. Wählen Sie Speichern aus.

Erstellen einer neuen Lösung

  1. Wählen Sie Anpassungslösungen>aus, und erstellen Sie eine neue Lösung. Weitere Informationen finden Sie unter Erstellen einer Lösung.

  2. Geben Sie die folgenden Informationen ein:

    Feld Wert
    Anzeigename Sprache
    Name Sprache
    Herausgeber Sprache
    Version 1.0.0.0
  3. Wählen Sie "Erstellen" aus.

Erstellen der Sprachtabelle

  1. Öffnen Sie die Sprachlösung, und wählen Sie Neue>Tabellentabelle>(erweiterte Eigenschaften) aus. Weitere Informationen zum Erstellen neuer Tabellen.

  2. Geben Sie die folgenden Informationen ein:

    Feld Wert
    Anzeigename Sprache
    Pluralname Sprachen

    Der Schemaname unter Erweiterten Optionen wird automatisch ausgefüllt in| lang_Language. Das lang_ Präfix ist schreibgeschützt.

  3. Wählen Sie Speichern aus.

Erstellen der n: n-Beziehung der Ressourcen-Tabelle zur Sprachen-Tabelle

  1. Öffnen Sie die Tabelle Sprache und Neue>Beziehung>Viele-zu-viele. Erfahren Sie mehr über das Erstellen von n:n-Tabellenbeziehungen.
  2. Wählen Sie für die Verknüpfte (Viele) TabelleBuchbare Ressource aus.
  3. Wählen Sie "Fertig" aus.
  4. Schließen Sie die Tabelle "Language".

Erstellen der Beziehungen aus der vorhandenen Anforderungstabelle zur Tabelle "Sprache"

  1. Öffnen Sie die Sprachlösung und wählen Sie Existierende hinzufügen>Tabelle>Ressourcenanforderung aus.

  2. Wenn ein Dialogfeld "Fehlende erforderliche Komponenten" angezeigt wird, wählen Sie "Nein" aus, und schließen Sie keine erforderlichen Komponenten ein.

  3. Wählen Sie Hinzufügen aus.

  4. Erstellen Sie in der Tabelle "Ressource: Anforderung" eine neue Spalte.

  5. Geben Sie die folgenden Informationen ein:

    Feld Wert
    Anzeigename Primäre Sprache
    Datentyp Nachschlagefeld
    Verknüpfte Tabelle Sprache
  6. Wählen Sie Speichern aus.

  7. Erstellen Sie in der Tabelle "Ressource: Anforderung" eine neue Spalte.

  8. Geben Sie die folgenden Informationen ein:

    Feld Wert
    Anzeigename Sekundärsprache
    Datentyp Nachschlagefeld
    Verknüpfte Tabelle Sprache
  9. Wählen Sie Speichern aus.

Aktualisieren des Hauptformulars "Anforderung"

  1. Wählen Sie in der Tabelle "Ressource: Anforderung" die Option "Formulare" aus.
  2. Wählen Sie "Schließende Formularinformationen>hinzufügen" und "Hinzufügen" aus. Wenn ein Dialogfeld "Fehlende erforderliche Komponenten" angezeigt wird, wählen Sie "Nein" aus, und schließen Sie keine erforderlichen Komponenten ein.
  3. Öffnen Sie das Informationsformular , und fügen Sie dem Formular die beiden neuen Attribute, primäre Sprache und sekundäre Sprache hinzu, damit Benutzer diese Informationen eingeben können, während sie Anforderungen erstellen.
  4. Wählen Sie Speichern und veröffentlichen aus.

Hinzufügen von Sprachdaten zu Ressourcen und Anforderungen

Fügen Sie der Tabelle "Language" neue Datensätze hinzu. Anschließend können Sie den neuen Sprachdatensätzen Ressourceneinträge zuordnen, indem Sie einen Ressourcendatensatz öffnen und zur Sprachbeziehung in der Navigationsleiste navigieren. Für Anforderungseinträge können Sie die neuen Felder "Primäre Sprache" und "Sekundäre Sprache" im Anforderungsformular ausfüllen.

Anpassen des Zeitplanboards

Um Ressourcen im Schedule Board mit der neuen Spracheinschränkung zu filtern, aktualisieren Sie die Abfrage "Ressourcen abrufen" und die Konfigurationsdatensätze "Filterlayout".

Hinweis

Diese Zeitplanübersichten gelten für alle Registerkarten einheitlich und können nicht einzeln pro Registerkarte festgelegt werden. Dies gilt für das Filterlayout des Zeitplan-Assistenten, Terminplan-Assistent abrufen von Ressourcenabfragen, Ressourcenzellenvorlage des Zeitplan-Assistenten und Abfrage zum Abrufen von Einschränkungen des Zeitplan-Assistenten.

Konfigurieren des Filterlayouts

Für die folgenden Schritte ist es nützlich, dass ein Texteditor verwendet wird, der XML-Syntaxhervorhebung unterstützt, um Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universelle Ressourcenplanung-Editor einzufügen.

Bei der Konfiguration "Filterlayout" handelt es sich um eine XML-Layoutdefinition, mit der das Layout des Bedienfelds "Filter" angepasst werden kann.

Hinweis

Entfernen Sie alle Standardfilter, die mit der universellen Ressourcenplanung ausgeliefert wurden, aus dem Filterbereich, und fügen Sie "Sprachen" als einzigen verfügbaren Filter hinzu.

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

Das control Element fügt dem Bereich Filter ein neues Steuerelement hinzu. Hier ist die Beschreibung der einzelnen Attribute:

Name BESCHREIBUNG
type Der Typ des Filtersteuerelements. Ein combo Steuerelement rendert eine Dropdownliste mit Werten zur Auswahl
source Die Quelle der Werte für das Dropdown-Steuerelement. Die entity Quelle zeigt Entitätsdatensätze im Dropdown-Listenfeldern an
key Der Schlüsse,, um die ausgewählten Werte in der Einschränkungseigenschaft zu speichern
inactive-state Der Inaktivitätsstatus von statecode für diese Entität, die verwendet wird, um inaktive Datensätze aus der Dropdown-Liste auszuschließen
label-id Die lokalisierte Bezeichnung, die für dieses Steuerelement verwendet werden soll
entity Die Datensätze dieser Entität werden im Dropdown angezeigt
multi Konfiguriert die Dropdown-Liste so, dass ein einzelner Datensatz oder mehrere Datensätze ausgewählt werden können

Filterlayout:

<?xml version="1.0" encoding="utf-8" ?>
<filter>
  <controls>
    <control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
  </controls>
</filter>

Erstellen eines neuen Sprachenboards

Um diese Änderungen isoliert zu halten, erstellen Sie ein separates Schedule Board, und implementieren Sie die Änderungen. Sie können diese Änderungen immer an der Standardzeitplan-Tafel vornehmen, damit andere Zeitplantafeln diese Änderungen automatisch übernehmen können.

  1. Wechseln Sie zur Ressourcenplanungs-App , und wählen Sie "Plantafel" aus.
  2. Wählen Sie das + Zeichen aus, um ein neues Board zu erstellen.
  3. Name der neuen Kartensprache.
  4. Wählen Sie am unteren Rand des Dialogfelds Hinzufügen aus. Das neue Board wird erstellt.

Das Filterlayout der Zeitplanübersicht konfigurieren

Erstellen Sie als Nächstes einen neuen Konfigurationsdatensatz, der Filterlayouts und Abfragen speichert, die vom Schedule Board verwendet werden. Verknüpfen Sie dann das neu erstellte Schedule Board mit dem neuen Konfigurationsdatensatz. Hierfür gibt es mehrere Möglichkeiten, aber hier ist die schnellste Methode:

  1. Wählen Sie auf der Zeitplanübersicht die Auslassungspunkte (...) und Zeitplan-Einstellungen aus.
  2. Wählen Sie unten im Bereich alle Boardeinstellungen aus. Wählen Sie dann "Sonstige" aus.
  3. Suchen Sie das Feld "Filterlayout ", und wählen Sie das Stiftsymbol aus, um den Editor zu öffnen.
  4. Geben Sie "Sprachfilterlayout" in das Feld "Name " ein, und fügen Sie den Filterlayoutcode hinzu, und wählen Sie "Als neu speichern" aus.
  5. Wählen Sie Speichern aus. Es wird ein neuer Konfigurationsdatensatz erstellt, der dieses Schedule Board mit dem Datensatz verknüpft.
  6. Wählen Sie Filter aus. Der Filterbereich wird mit dem neuen Layout angezeigt. Nur der Sprachenfilter ist verfügbar. Das Filtern funktioniert erst, wenn Sie die Abfrage zum Abrufen von Ressourcen aktualisieren.

Aktualisieren der Abfrage zum Abrufen von Ressourcen

Für die folgenden Schritte ist es nützlich, dass ein Texteditor verwendet wird, der XML-Syntaxhervorhebung unterstützt, um Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universelle Ressourcenplanung-Editor einzufügen.

Die Konfiguration der Abrufanfrage für Ressourcen ist eine universelle FetchXML-Abfrage (UFX), die von der Ressourcenabgleichs-API verwendet wird. Es verwendet die im Filterbereich eingegebenen Werte als Eingabe und erstellt dynamisch das richtige FetchXML, um übereinstimmende Ressourcen zu finden.

Fügen Sie diese Ausschnitte hinzu, um die Abfrageressource abzurufen, um sie mit der Ressourcensprache und dem Auftrag abzugleichen.

Hinzufügen der Verknüpfungen von bookableresource zu 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>

Die im Bedienfeld "Filter" ausgewählten Werte werden als Eingabe an die Abfrage übergeben und sind in der Variablen "XPath $input " verfügbar

Die Abfrage zum Abrufen von Ressourcen verwendet FetchXML, um die Resource (bookableresource) Entität abzufragen. Wir haben das FetchXML-Element link-entity ausgewählt, um nur Ressourcen zurückzugeben, die den im Filterbereich ausgewählten Sprachdatensätzen zugeordnet sind. Verwenden Sie mehrere link-entity Verknüpfungen, um die übereinstimmenden Sprachen und Reihenfolge nach primärer oder sekundärer Sprache anzuzeigen, wie in der Abschnittsvorlage "Ressource: Zelle" beschrieben.

Hier ist die Beschreibung der einzelnen element und attribute:

Name BESCHREIBUNG
link-entity Erstellen der n: n-Beziehung der Ressourcen-Entität zur Sprachen-Entität
ufx:if Geben Sie dieses FetchXML-Element (link-entity) nur aus, wenn der XPath-Ausdruck in diesem Attribut einen Wert zurückgibt
attribute Geben Sie die übereinstimmende Primär- oder Sekundärsprache zurück
filter und condition Filtern Sie die n: n-Beziehungs-Datensätze nur nach denen, die mit den angegebenen Sprachen-IDs übereinstimmen
ufx:value und select Gibt das Ergebnis des XPath-Ausdrucks im select Attribut aus
ufx:apply und select Geben Sie die untergeordneten FetchXML-Elemente für jedes Ergebnis aus, die vom XPath-Ausdruck im Attribut select zurückgegeben werden
value Enthält die ID eines Sprachdatensatzes

Ermitteln der Sortierreihenfolge einer Ressource

Nachdem Sie die übereinstimmenden Ressourcen basierend auf den zugewiesenen Sprachen jeder Ressource abgerufen haben, weisen Sie eine neue lang_order Eigenschaft zu, um die Sortierreihenfolge zu bestimmen.

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

Die Beschreibung der einzelnen element und attribute:

Name BESCHREIBUNG
lang_order Erstellen Sie eine neue Eigenschaft in jeder Ressource, die aus der FetchXML-Abfrage mit dem Namen lang_order zurückgegeben wird.
ufx:select Weisen Sie der lang_order-Eigenschaft das Ergebnis des XPath-Ausdrucks in diesem Attribut zu. Die Eigenschaften lang_primary und lang_secondary, die bereits früher in der Abfrage abgerufen wurden, werden zusammen mit der XPath-Funktion iif verwendet, um die Reihenfolge des Ressourcenabgleichs zu bestimmen.

Sortieren der Ergebnisse

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

UFX-Abfragen werden in sequenzieller Reihenfolge verarbeitet. Nachdem die Ressourcen über FetchXML abgerufen wurden, werden die Ergebnisse der Resources Eigenschaft zugewiesen. Sortieren Sie die Ergebnisse basierend auf der lang_order zuvor hinzugefügten Eigenschaft, und weisen Sie die sortierten Ergebnisse der Resources Eigenschaft neu zu.

Die Beschreibung der einzelnen element und attribute:

Name BESCHREIBUNG
Resources Weisen Sie die Resources Eigenschaft neu zu
ufx:select Weisen Sie der Resources-Eigenschaft das Ergebnis des XPath-Ausdrucks in diesem Attribut zu. Die XPath-Funktion order wird verwendet, um die Resources Liste nach ihrer lang_order Eigenschaft zu sortieren.

Hinweis

Die standardmäßige Abfrage zum Abrufen von Ressourcen, die mit Universal Resource Scheduling ausgeliefert wird, ist eine große Abfrage, die alle Ressourceneinschränkungen unterstützt, die in Universal Resource Scheduling enthalten sind. Für diese Übung können wir nur eine Teilmenge der Standardabfrage nutzen und fügen Sprachen als einzigen Filter hinzu.

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

Die Abfrage „Ressourcen abrufen” des Zeitplan-Assistenten bearbeiten

  1. Wählen Sie auf der Plantafel die Ellipsen (...) oben rechts und dann Planungseinstellungen aus.
  2. Wählen Sie unten im Bereich alle Boardeinstellungen aus. Wählen Sie dann "Sonstige" aus.
  3. Suchen Sie das Feld " Ressourcenabfrage abrufen ", und wählen Sie das Stiftsymbol aus, um den Editor zu öffnen.
  4. Geben Sie "Language Resources Query" in das Feld "Name " ein, fügen Sie den Abfragecode "Ressourcen abrufen" hinzu, und wählen Sie "Speichern unter neu" aus.
  5. Wählen Sie Speichern aus. Es wird ein neuer Konfigurationsdatensatz erstellt, der dieses Schedule Board mit dem Datensatz verknüpft.

Die Karten werden mit der Konfiguration neu geladen. Filtern funktioniert. Wenn Sie Sprachendatensätze erstellen und sie den Ressourcendatensätzen zuordnen, können Sie jetzt mögliche Ressourcen von den entsprechenden Sprachen filtern.

Anpassen des Zeitplan-Assistenten

Passen Sie das Filterlayout des Zeitplan-Assistenten und die Abfragekonfigurationen für Einschränkungen so an, dass die neuen Spracheinschränkungen im Zeitplan-Assistenten verwendet werden können.

Im Gegensatz zu den Anpassungen der Zeitplanübersicht, bei denen jedes Board individuell angepasst werden kann, wirken sich die Anpassungen des Zeitplan-Assistenten auf alle Boards aus, auf denen der Zeitplan-Assistent verwendet wird. Die Anpassungen des Zeitplan-Assistenten können spezifisch für einen planbaren Typ oder für alle Typen sein. In diesem Beispiel passen wir den Zeitplan-Assistenten für alle Typen an.

Konfigurieren des Filterlayouts für den Zeitplan-Assistenten

Für die folgenden Schritte ist es nützlich, dass ein Texteditor verwendet wird, der XML-Syntaxhervorhebung unterstützt, um Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universelle Ressourcenplanung-Editor einzufügen.

Die Konfiguration des Filterlayouts des Zeitplan-Assistenten definiert, ähnlich wie die des Filterlayouts der Zeitplanübersicht, das Layout der Steuerelemente im Filterbereich. Da der Zeitplan-Assistent mehr Filter als das Zeitplanboard verwendet, z. B. "Startzeit", "Endzeit" und "Dauer", wird ein anderes Layout verwendet.

Hinweis

Für diese Übung können wir nur eine Teilmenge der Standardfilter verwenden, die in der Universellen Ressourcenplanung von der Zeitplanassistent-Filterlayout-Konfiguration weitergegeben wird und fügen den Sprachendropdown als einzigen verfügbaren Filter hinzu.

Der Filter, den wir dem Layout hinzufügen, ist derselbe wie in "Schedule Board Filter Layout konfigurieren". Die anderen Steuerelemente werden benötigt, um die Suchparameter des Zeitplan-Assistenten zu ändern.

Das vollständige Filterlayout des Zeitplanassistenten

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

Aktualisieren des Filterlayouts des Zeitplan-Assistenten

  1. Wählen Sie auf der Zeitplanübersicht die Auslassungspunkte (...) und Zeitplan-Einstellungen aus.
  2. Wählen Sie unten im Bereich alle Boardeinstellungen aus.
  3. Scrollen Sie zu "Zeitplantypen ", und wählen Sie "Keine" aus.
  4. Wählen Sie "Standardeinstellungen bearbeiten" unten aus.
  5. Suchen Sie das Filterlayoutfeld des Zeitplan-Assistenten , wählen Sie das Stiftsymbol aus, um den Editor zu öffnen.
  6. Geben Sie das Filterlayout des Sprachplanungs-Assistenten im Feld "Name " ein.
  7. Aktualisieren Sie das Filterlayoutfeld des Zeitplan-Assistenten mit dem Code, und wählen Sie "Als neu speichern" aus. Es wird ein neuer Konfigurationsdatensatz erstellt, der dieses Schedule Board mit dem Datensatz verknüpft.
  8. Wählen Sie unten im Dialogfeld "Boardeinstellungen" die Option "Speichern" aus.

Das Board wird neu geladen. Ändern Sie die Abfrage zum Abrufen von Einschränkungen, um die für die Anforderung festgelegten Sprachen in der Suche des Zeitplan-Assistenten einzuschließen.

Abfrage für die Abrufeinschränkungen konfigurieren

Für die folgenden Schritte ist es nützlich, dass ein Texteditor verwendet wird, der XML-Syntaxhervorhebung unterstützt, um Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universelle Ressourcenplanung-Editor einzufügen.

Die Retrieve Constraints Query-Konfiguration ist eine UFX-Abfrage , die von der Retrieve Requirement Constraints API verwendet wird. Sie wird als ID eines Anforderungsdatensatzes (in der Benutzeroberfläche ausgewählt) und gibt den Anforderungsdatensatz und alle zugehörigen untergeordneten Datensätze zurück.

Hinweis

Die standardmäßige Abfrage zum Abrufen von Einschränkungen, die mit Universal Resource Scheduling ausgeliefert wird, ist eine umfangreiche Abfrage, die alle Anforderungseinschränkungen unterstützt, die in Universal Resource Scheduling enthalten sind. Für diese Übung können wir nur eine Teilmenge der Standardabfrage nutzen und fügen Sprachen als einzigen Filter hinzu.

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

UFX-Abfragen werden in sequenzieller Reihenfolge verarbeitet. Die Abrufen-Einschränkungen nutzen FetchXML, um die Requirement (msdyn_resourcerequirement) Entität abzufragen und weisen das Ergebnis zu, einen Anforderungsdatensatz der Eigenschaft Requirement. Wir fügen dem Einschränkungseigenschaftenbehälter eine neue Eigenschaft Languages hinzu, die beide Attribute, die primäre Sprache und die sekundäre Sprache in eine einzelne Liste der Entitäten kombiniert (EntityCollection). Diese Eigenschaft ist erforderlich, da das Steuerelement "Sprachen" im Filterbereich als Liste mit Datensätzen angezeigt wird. Eine Alternative wäre, im Filterbereich zwei separate Steuerelemente für die beiden Attribute zu erstellen.

Die Beschreibung der einzelnen element und attribute:

Name BESCHREIBUNG
Languages Erstellen Sie eine neue Eigenschaft im Eigenschaftencontainer für Ergebniseinschränkungen mit dem Namen Languages
ufx:select Weisen Sie der Languages-Eigenschaft das Ergebnis des XPath-Ausdrucks in diesem Attribut zu. Die lang_primarylanguage- und lang_secondarylanguage-Eigenschaften, die zuvor in der Abfrage abgerufen wurden und in der Requirement-Eigenschaft verfügbar sind, werden an die lookup-to-list-XPath-Funktion übergeben, die mehrere lookup-Eigenschaften in eine einzelne list (EntityCollection) konvertiert.

Abfrage zum Abrufen von Einschränkungen:

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

Standardabfrage zum Abrufen von Einschränkungen aktualisieren

  1. Wählen Sie auf der Zeitplanübersicht die Auslassungspunkte (...) und Zeitplan-Einstellungen aus.
  2. Wählen Sie unten im Bereich alle Boardeinstellungen aus.
  3. Scrollen Sie zu "Zeitplantypen ", und wählen Sie "Keine" aus.
  4. Wählen Sie "Standardeinstellungen bearbeiten" aus.
  5. Suchen Sie das Feld Einschränkungsabfrage des Zeitplan-Assistenten und wählen Sie das Stiftsymbol, um den Editor zu öffnen.
  6. Geben Sie "Language Constraints Query" in das Feld "Name " ein.
  7. Aktualisieren Sie das Abfragefeld für Abrufbeschränkungen mit dem Code zum Abrufen von Einschränkungen, und wählen Sie Als neu speichern aus.
  8. Wählen Sie Speichern aus. Es wird ein neuer Konfigurationsdatensatz erstellt, der dieses Schedule Board mit dem Datensatz verknüpft.
  9. Suchen Sie den Zeitplanassistenten zur Abfrage von Ressourcen und wählen Sie die Sprachenressourcenabfrage, die zuvor für die Zeitplanübersicht-Anpassung erstellt wurde.
  10. Wählen Sie unten im Dialogfeld " Speichern" aus.

Die Karten werden mit der Konfiguration neu geladen. Die Zeitplanassistentenfilterung funktioniert. Wenn Sie Sprachdatensätze erstellen und diesen Anforderungseinträgen zuordnen, können Sie unten im Zeitplanboard einen Anforderungseintrag auswählen, wählen Sie " Verfügbarkeit suchen" aus, um nur Ressourcen anzuzeigen, die den in der Anforderung gespeicherten Sprachen entsprechen.

Konfigurieren der Ressourcenzellenvorlage

Für die folgenden Schritte ist es nützlich, dass ein Texteditor verwendet wird, der HTML-Syntaxhervorhebung unterstützt, um Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universelle Ressourcenplanung-Editor einzufügen.

Bei der Ressourcenzellenvorlagenkonfiguration handelt es sich um eine Handlebars-Vorlage, die zum Rendern von Inhalten in der Ressourcenzelle verwendet wird. Die Ausgabe in der Ressourcenabfrage ist in der Vorlage verfügbar.

Wir ändern die Standardressourcenvorlage so, dass ein grüner ✔ ✱-Indikator angezeigt wird, wenn die Ressource mit der primären und sekundären Sprache übereinstimmt, ein grüner ✔ Indikator, wenn die Ressource nur mit der primären Sprache übereinstimmt, und ein gelber ✔ Indikator, wenn die Ressource nur mit der sekundären Sprache übereinstimmt.

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

Die lang_primary- und lang_secondary-Eigenschaften werden von unserer benutzerdefinierten Abfrage zum Abrufen von Ressourcen zurückgegeben, die wir eingerichtet haben. Auf der Handlebars-Website finden Sie eine Dokumentation zur Vorlagensyntax.

Vorlage für Ressourcenzellen:

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

Aktualisieren der Vorlage für Ressourcenzellen

  1. Wählen Sie auf der Zeitplanübersicht die Auslassungspunkte (...) und Zeitplan-Einstellungen aus.
  2. Wählen Sie unten im Bereich alle Boardeinstellungen aus.
  3. Scrollen Sie zu "Zeitplantypen ", und wählen Sie "Keine" aus.
  4. Wählen Sie "Standardeinstellungen bearbeiten" aus.
  5. Suchen Sie den Zeitplanassistenten für die Zellvorlage der Ressource und wählen Sie das Bleistiftsymbol, um den Editor zu öffnen.
  6. Geben Sie "Language Resource Cell Template" in das Feld "Name " ein.
  7. Aktualisieren Sie das Feld "Resource Cell Template" mit dem Code "Resource Cell Template", und wählen Sie "Als neu speichern" aus.
  8. Wählen Sie Speichern aus. Es wird ein neuer Konfigurationsdatensatz erstellt, der dieses Schedule Board mit dem Datensatz verknüpft.
  9. Suchen Sie den Zeitplanassistenten zur Abfrage von Ressourcen und wählen Sie die Sprachenressourcenabfrage, die zuvor für die Zeitplanübersicht-Anpassung erstellt wurde.
  10. Wählen Sie unten im Dialogfeld " Speichern" aus.

Die Karten werden mit der Konfiguration neu geladen. Die Ressourcenzelle zeigen nun an, wie eine Ressource die Spracheneinschränkung im Filterbereich abgleicht.

Weitere Ressourcen

Universelles Abrufen von XML