Freigeben über


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

Diese Schritt-für-Schritt-Anleitung ist ein Begleiter, um die Ressourcenzuordnung in Universal Resource Scheduling zu verstehen und anzupassen

In diesem Schritt-für-Schritt-Handbuch erweitern Sie Universal Resource Scheduling Ressourcen mit einer Language Einschränkung. Nutzen einer Organisation, die Ressourcen für die Sprachen filtert, die gesprochen wird. Sie möchten auch im Datensatz Requirement erfassen, um die Sprache für den Auftrag ist. Diese Einschränkung folgt einem ähnlichen Muster, um Territory Einschränkung zu erstellen. Eine neue Vorlagenentität Language speichert die verschiedenen Sprachen, die eine Ressource sprechen kann. Ein Resource Datensatz kann vielen Languages n: n-Beziehungs-Entität zugeordnet werden. Auf der Requirement Entität wird das modelliert, indem wir zwei neue Suchattribute erstellen: Primary Language und Secondary Language. Wenn eine verfügbare Ressourcen für eine Anforderung gesucht wird, wird nur die Ressourc mit entweder Primary Language oder Secondary Language angezeigt.

Erstellen und Bearbeiten von Entitätsbeziehungen

In diesem Abschnitt werden wir das neue Vorlagenentität Language Schema für die Resource Entitäten Requirement mit den entsprechenden Beziehungen auf die neue Entität Language aktualisieren.

Erstellen eines neuen Publisher

  1. In Dynamics 365 mit Anpassungen können Sie einen neuen Herausgeber erstellen

  2. Füllen Sie das neue Herausgeberformular mit den untengenannten Details aus:

    Feld Value
    Anzeigename Sprache
    Name language
    Präfix Dauer
  3. Klicken Sie auf Speichern und schließen.

Erstellen einer neuen Lösung

  1. In Dynamics 365 mit Anpassungen können Sie eine neue Lösung erstellen

  2. Füllen Sie das neue Lösungsformular mit den untengenannten Details aus:

    Feld Value
    Anzeigename Sprache
    Name Sprache
    Herausgeber Sprache
    Version 1.0.0.0
  3. Klicken Sie auf Speichern.

Erstellen Sie die Sprachen-Entität.

  1. Erstellen Sie in der Sprachenlösung eine neue Entität

  2. Füllen Sie das neue Entitätsformular mit den untengenannten Details aus:

    Feld Value
    Anzeigename Sprache
    Pluralname Sprachen
    Name des Dataflows lang_language (das lang_ Präfix wird automatisch ausgefüllt und ist schreibgeschützt)
  3. Wählen Sie „Speichern“ aus.

Erstellen der n: n-Beziehung der Ressourcen-Entität zur Sprachen-Entität

  1. In der Sprachenentität erstellen Sie eine neue n: n-Beziehung

  2. Füllen Sie das neue Herausgeberformular mit den untengenannten Details aus:

    Feld Value
    Aktuelle Entität
    Anzeigeoption Pluralnamen verwenden
    Andere Entität
    Entitätsname Buchbare Ressource
  3. Klicken Sie auf Speichern und schließen.

  4. Schließen Sie das Sprachenentitätsformular

Erstellen der Beziehung der Ressourcen-Entität zur Sprachen-Entität

  1. In der Sprachenlösung fügen Sie die vorhandene Ressourcenbedarfentität der Lösung hinzu (wenn Sie mit einem Dialog der fehlenden erforderlichen Komponenten angezeigt werden, können Sie nicht die erforderlichen Komponenten einschließen).

  2. In der Ressourcenbedarfentität erstellen Sie ein neues Feld

  3. Füllen Sie das neue Entitätsformular mit den untengenannten Details aus:

    Feld Value
    Anzeigename Primäre Sprache
    Datentyp Suche
    Zieldatensatztyp Sprache
  4. Klicken Sie auf Speichern und schließen.

  5. In der Ressourcenbedarfentität erstellen Sie ein neues Feld

  6. Füllen Sie das neue Entitätsformular mit den untengenannten Details aus:

    Feld Value
    Anzeigename Sekundäre Sprache
    Datentyp Suche
    Zieldatensatztyp Sprache
  7. Klicken Sie auf Speichern und schließen.

Aktualisieren Sie das Anforderungs-Hauptformular

  1. In der Ressourcenbedarfentität fügen Sie die bestehenden Informationsformulare der Unterkomponenten hinzu (wenn Sie mit einem Dialog der fehlenden erforderlichen Komponenten angezeigt werden, können Sie nicht die erforderlichen Komponenten einschließen).
  2. In der Informationsform verwenden Sie den Feld-Explorer, um die zwei neuen Attributen, primäre Sprache und zweite Sprache des Formulars hinzuzufügen, damit Benutzer die Informationen eingeben können, wenn Sie die Anforderungen erstellen
  3. Klicken Sie auf Speichern.
  4. Klicken Sie auf Veröffentlichen
  5. Sie können den Formular-Editor beenden

Zusammenfassung

In den oben beschriebenen Schritten haben wir die neue Sprachenentität erstellt. Es können dann neue Beziehungen mit Ressourcen- und Anforderungsentitäten hinzugefügt werden. Ressourcen können mit mehreren Sprachen verknüpft werden, da wir viele zu viele Beziehungen zwischen Sprache und Ressource hinzugefügt haben. Sie können mit zwei Sprachen verknüpft werden, da wir zwei Suchattributen auf Anforderungsentität zeigend auf die neue Sprachenentität hinzugefügt haben.

Daten hinzufügen

Verwenden Sie die erweiterte Suche, um neue Datensätze der Sprachenentität hinzuzufügen. Sie können Ressourcendatensätze den neuen Sprachendatensätzen zuordnen, indem Sie eine neue Sprachenbeziehung mithilfe des Öffnen eines Ressourcendatensatzes vornehmen und die Navigation der Sprachbeziehung in der Navigationsleiste öffnen. Für Anforderungsdatensätze können Sie die Felder primäre und zweiten Sprache auf dem Anforderungsformular ausfüllen.

Zeitplanübersicht anpassen

Um weitere Ressourcen im Zeitplan mit der neuen Spracheneinschränkung zu filtern, aktualisieren wir die Abrufen-Ressourcen und die Filter-Layout-Konfigurationssätze.

Filterkonfiguration

Trinkgeld

Für die unten genannten 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 Universal Resource Scheduling-Editor einzufügen.

Die Filter-Layoutkonfiguration ist eine XML-Layoutdefinition, um das Layouts dem Filterbereich anzupassen.

Notiz

Für diese Übung entfernen wir alle Standardfilter mit Universal Resource Scheduling vom Filterbereich und fügen die 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 ein neues Steuerelement der Filterscheibe hinzu. Hier finden Sie eine Beschreibung jedes Schlüssels:

Name Beschreibung
type Der Typ des Filter-Steuerelements. Ein combo-Steuerelement wird ein Dropdown-Listenfeldern mit Werten zum Auswählen.
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 Die inaktive statecode für diese Entität. Dies geschieht mit inaktiven Datensätzen vom Dropdown-Listenfeldern auszuschließen
label-id Die für dieses Steuerelement enthalten lokalisierte Beschriftung verwenden,
entity Die Datensätze für diese Entität werden im Dropdown-Listenfeldern angezeigt werden
multi Konfiguriert die Dropdown-Listenfeldern, um das Auswählen eines einzelnen Datensatzes oder mehrerer Datensätze zu erlauben

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 einer neuen Sprachen-Karte

Damit diese Änderungen isoliert bleiben, erstellen wir eine neue separate Zeitplan-Karte und implementieren die Änderungen, aber Sie können die Änderungen auf dem Standard immer zur Planung ändern, damit andere Zeitplan-Karten diese Änderungen automatisch erben können.

  1. In Dynamics 365 in der obersten Navigationsleiste gehen Sie zu Einsatzplanung > Zeitplan-Board
  2. In der äußersten Rechte klicken Sie auf das + Zeichen, um ein neues Board zu erstellen
  3. Name der neuen Kartensprache
  4. Klicken Sie unten auf der Registerkarte auf hinzufügen. Die neuen Karte wird erstellt.

Das Filterlayout des Zeitplan-Assistenten bearbeiten

Als Nächstes erstellen wir einen neuen Datensatz, der Filterlayouts speichert und die Abfragen anzeigt, die durch den Zeitplan verwendet werden, und verknüpfen dann die neu erstellte Zeitplan-Karte mit dem neuen Datensatz. Es gibt mehrere Möglichkeiten, dazu, aber hier ist die schnellste:

  1. In der äußersten Rechte doppelklicken Sie auf die Sprachenregisterkarte
  2. Bildlauf nach unten zu den allgemeinen Einstellungen > weitere Einstellungen
  3. Suchen Sie den Filter-Layoutfeld, klicken Sie auf die Schaltfläche, um den Editor zu öffnen
  4. Aktualisieren Sie das Wertfeld mit dem Filter-Layoutcode oben auf Speichern unter.
  5. Geben Sie "Sprachen-Filter-Layout" im Feld "Name" ein und klicken Sie auf "Speichern". Erstellt einen neuen Datensatz und verknüpft diese Zeitplan-Karte auf den Datensatz.
  6. Klicken Sie unten auf der Registerkarte auf anwenden

Der Karte wird erneut geladen und Sie sehen die Filterscheibe im linken mit dem neuen Layout; nur der Sprachfilter ist verfügbar. Die Filterung funktioniert noch nicht, da wir die Abfrageressource aktualisieren müssen, um den neuen Filter zu nutzen.

Die Abfrage „Ressourcen konfigurieren” bearbeiten

Trinkgeld

Für die unten genannten 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 Universal Resource Scheduling-Editor einzufügen.

Die Abfragenkonfiguration ist eine UFX-Abfrage, die durch die entsprechenden Ressourcen verwendet wird. Sie nimmt die eingegeben Werte im Filterbereich und erstellt dynamisch die korrekte FetchXML, um entsprechende Ressourcen zu suchen.

Unten sind Sie Ausschnitte, die der neuen Abfrageressource hinzugefügt wurden, um der Ressourcensprache und dem Auftrag zu entsprechen.

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 Werte, die im Filterbereich ausgewählt wurden, sind die Abfrage, die in der XPath $input Variable verfügbar sind

Die Abfrageressource nutzt FetchXML als Abfrage der Resource (bookableresource) Entität. Wir verwenden das FetchXML-Element link-entity, um nur in den Entwurfsstatus zurückzukehren, der den Sprachendatensätzen zugeordnet ist, die im Filterbereich ausgewählt werden. Um das Anzeigen der abgeglichenen Sprachen und der Sortierungug nach primärer oder sekundärer Sprache wie später beschrieben im Abschnitt Ressourcen-Zellen-Vorlage zu unterstützen, verwenden wir mehrere link-entity Verknüpfungen.

Hier finden Sie eine Beschreibung jedes element und attribute:

Name Beschreibung
link-entity Erstellen der n: n-Beziehung der Ressourcen-Entität zur Sprachen-Entität
ufx:if Lassen Sie nur das FetchXML-Element aus (link-entity), wenn der XPath-Ausdruck in diesem Attribut einem Wert zurückgibt
attribute Geben Sie primäre oder die sekundäre abgeglichene Sprache 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 Zuweisen von Ergebnissen zum XPath-Ausdruck in den ausgewählten select-Attributen
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 des Sprachendatensatzes

Bestimmen der Sortierreihenfolge einer Ressource

Nachdem wir die entsprechenden Ressourcen basierend auf jeder Sprache, die der Ressource zugewiesen wird, weisen wir eine neue lang_order-Eigenschaft zu, um die Sortierreihenfolge zu ermitteln.

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

Hier finden Sie eine Beschreibung jedes element und attribute:

Name Beschreibung
lang_order Erstellen einer neuen Eigenschaft in jeder Ressource, die von der FetchXML-Abfrage mit dem lang_order Namen zurückgegeben wird
ufx:select Zuweisen von den Ergebnissen des XPath-Ausdrucks in diesem Attribut der lang_order-Eigenschaft Die lang_primary und lang_secondary-Eigenschaften abrufen, die bereits früher in der Abfrage abgerufen wurde, wird in der XPath iif-Funktion verwendet, um die geeignete Reihenfolge der Ressource zu ermitteln.

Anzeigen der Ergebnisse

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

UFX-Abfragen werden in sequenziellen Reihenfolgen verarbeitet. Nachdem die Ressourcen mit FetchXML abgerufen werden, werden die Ergebnisse der Eigenschaft Resources zugewiesen. Sortieren Sie die Ergebnisse nach der lang_order-Eigenschaft, die Sie zuvor hinzugefügt haben und weisen Sie die Ergebnisse der sortierten Eigenschaft Resources neu zu.

Hier finden Sie eine Beschreibung jedes element und attribute:

Name des Dataflows Beschreibung
Resources Weisen Sie die Resources Eigenschaft neu zu
ufx:select Zuweisen von den Ergebnissen des XPath-Ausdrucks in diesem Attribut der Resources-Eigenschaft Die XPath-Funktion order wird verwendet, um die in der Liste Resources angezeigten lang_order zu bestellen.

Notiz

Dier Standard-Ressourcen-Abfrage, die mit Universal Resource Scheduling versandt wird, ist eine große Abfrage, die alle Ressourceneinschränkungen unterstützt, die mit 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. In der äußersten Rechte doppelklicken Sie auf die Sprachenregisterkarte
  2. Bildlauf nach unten zu den allgemeinen Einstellungen > weitere Einstellungen
  3. Suchen Sie das Filter-Ressourcenfeld, klicken Sie auf die Schaltfläche, um den Editor zu öffnen
  4. Aktualisieren Sie das Wertfeld mit dem Abfrageressourcencode oben und klicken Sie auf Speichern unter.
  5. Geben Sie "Sprachen-Filter-Layout" im Feld "Name" ein und klicken Sie auf "Speichern". Erstellt einen neuen Datensatz und verknüpft diese Zeitplan-Karte auf den Datensatz.
  6. Klicken Sie unten auf der Registerkarte auf anwenden

Der Karte werden mit der Konfiguration neu geladen. Die Filterung funktioniert nun. Wenn Sie Sprachendatensätze erstellt und den Ressourcendatensätzen zugeordnet haben, können Sie jetzt mögliche Ressourcen von den entsprechenden Sprachen filtern.

Übersicht

In den oben aufgeführten Schritten haben wir den Filterbereich geändert, um ein Filtersteuerelement für die Sprachenentität anzuzeigen. Wir haben auch die Abrufen-Ressourcen abfragen geändert, um die Ressource den ausgewählten Sprachendatensätzen zuzuordnen. Wenn ein Benutzer Werte in der Filtersteuerung auswählt und Suche anklickt, werden die Werte an die Abfrage weitergegeben und FetchXML-Abfrage gibt nur die zusammengehörigen Ressourcen zurück.

Zeitplanübersichtsassistent anpassen

Wir müssen das Zeitplanassistent-Filterlayout anpassen und Abfragekonfigurationseinschränkungen abrufen, um die neuen Spracheneinschränkungen im Zeitplan-Assistenten zu verwenden.

Im Gegensatz zu den Zeitplananpassungen, in denen jede Karte einzeln zugeordnet werden kann, beeinflusst der Zeitplanassistent die Anpassungen auf alle Karten, auf denen der Zeitplan-Assistent verwendet wird. Die behilflichen Anpassungen des Zeitplans können zu einem planbaren Typ oder für alle Typen bestimmt sein. In diesem Beispiel passen wir nun den Zeitplan-Assistenten für alle Typen an.

Das Filterlayout der Zeitplan-Assistenten-Konfiguration bearbeiten

Trinkgeld

Für die unten genannten 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 Universal Resource Scheduling-Editor einzufügen.

Die Zeitplanassistenten-Layoutkonfiguration, wie das Zeitplan-Karten-Filter-Layout, definiert das Layout der Steuerelemente im Filterbereich. Während der Zeitplan-Assistent mehrere Filter als Zeitplan-Karte nutzt, z. B. Startzeit, Endzeit, Dauer, usw. wird ein anderes Layout verwendet.

Notiz

Für diese Übung können wir nur eine Teilmenge der Standardfilter neue verwenden als den Standard-Filter im Universal Resource Scheduling Format in der Zeitplanassistenten-Filterlayout-Konfiguration und fügen den Sprachendropdown als einzigen verfügbaren Filter hinzu.

Den Filter, den wir mit dem Layout hinzufügen, ist der Gleiche wie oben in Filter-Layout-Konfiguration. Die andere Steuerelemente werden benötigt, um die Zeitplanassistentensuchparameter zu bearbeiten.

Das Filterlayout des Zeitplan-Assistenten bearbeiten

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

Das Filterlayout des Zeitplan-Assistenten aktualisieren

  1. In der äußersten Rechte doppelklicken Sie auf die Sprachenregisterkarte
  2. In der äußersten Rechte auf Standardeinstellungen öffnen
  3. ROLLEN zum Plan gibt Abschnitt aus und wählen in der linken keine Liste aus
  4. Suchen Sie das Zeitplanassistenten-Filter-Layoutfeld und klicken Sie auf die Schaltfläche, um den Editor zu öffnen
  5. Aktualisieren Sie das Wertfeld mit dem Zeitplanassistenten-Filter-Layoutcode oben klicken Sie auf Speichern unter.
  6. Geben Sie "Sprachen-Filter-Layout" im Feld "Name" ein und klicken Sie auf "Speichern". Erstellt einen neuen Datensatz und verknüpft diese Zeitplan-Karte auf den Datensatz.
  7. Klicken Sie unten auf der Registerkarte auf anwenden

Karte wird wieder geladen. Anschließend müssen Sie die Abfrage-Einschränkungen ändern, bevor wir den Zeitplan-Assistenten mit den neuen Spracheneinschränkungen verwenden können, sodass die Sprachen, die festgelegt werden, Teil der unterstützten Suche des Zeitplans sind.

Standardabfrage zum Abrufen von Abfragekonfiguration

Trinkgeld

Für die unten genannten 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 Universal Resource Scheduling-Editor einzufügen.

Die Abfragenkonfiguration ist eine UFX-Abfrage, die durch die entsprechenden Ressourcen 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.

Notiz

Die Standard-Ressourcen-Abfrage, die mit der Universal Resource Scheduling versandt wird, ist eine große Abfrage, die alle Ressourceneinschränkungen unterstützt, die in der 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 sequenziellen Reihenfolgen 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). Dies ist erforderlich, da wir das Sprachensteuerelement in der Filterscheibe als Liste von Datensätzen anzeigen. Eine Alternative würde sein, zwei andere Steuerelemente in der Filterscheibe für die zwei Attribute zu erstellen.

Hier finden Sie eine Beschreibung jedes element und attribute:

Name Beschreibung
Languages Erstellen einer neuen Ergebniseinschränkungs-Eigenschaftenbehälter Eigenschaft mit Languages
ufx:select Zuweisen von den Ergebnissen des XPath-Ausdrucks in diesem Attribut der Languages-Eigenschaft Die lang_primarylanguage und lang_secondarylanguage-Eigenschaften, die früher in der Abfrage abgerufen wurden und in der Requirement-Eigenschaft verfügbar ist, wird der lookup-to-list-Eigenschaften XPath Funktion weitergegeben, die mehrere lookup Eigenschaften in einer einzelnen list (EntityCollection) zusammenführt

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. In der äußersten Rechte doppelklicken Sie auf die Sprachenregisterkarte
  2. In der äußersten Rechte auf Standardeinstellungen öffnen
  3. ROLLEN zum Plan gibt Abschnitt aus und wählen in der linken keine Liste aus
  4. Suchen Sie das Zeitplanassistenten zur Abfrage zum Abrufen von Einschränkungen und klicken Sie auf die Schaltfläche, um den Editor zu öffnen
  5. Aktualisieren Sie das Wertfeld mit dem Abfrageressourcencode oben und klicken Sie auf Speichern unter.
  6. Geben Sie "Sprachen-Einschränkungen-Abfrage" im Feld "Name" ein und klicken Sie auf "Speichern". Erstellt einen neuen Datensatz und verknüpft diese Zeitplan-Karte auf den Datensatz.
  7. Suchen Sie den Zeitplanassistenten zur Abfrageneinschränkungsressource und wählen Sie die Sprachenressourcenabfrage, die zuvor für die Zeitplan-Karten-Anpassung erstellt wurde.
  8. Klicken Sie unten auf der Registerkarte auf anwenden

Der Karte werden mit der Konfiguration neu geladen. Die Zeitplanassistentenfilterung funktioniert nun. Wenn Sie Sprachendatensätze erstellen und diese den Anforderungsdatensätzen zugeordnet haben, können Sie jetzt einen Anforderungsdatensatz im unteren Bereich der Zeitplan-Karte auswählen, auf Suchen klicken, um den Zeitplan-Assistenten zu starten, und nur Ressourcen anzuzeigen, die den Sprachen entsprechen, die in der Anforderungen gespeichert sind.

Die Ressourcenzellenvorlagekonfiguration bearbeiten

Trinkgeld

Für die unten genannten Schritte ist es nützlich, dass ein Texteditor verwendet wird, der HTML-Syntaxhervorhebung unterstützt, um Änderungen vorzunehmen, und dann Ihre Änderungen wiederum in den Universal Resource Scheduling-Editor einzufügen.

Die Ressourcen-Zellen-Vorlagenkonfiguration ist eine Lenkstangen Vorlage, die verwendet wird, um Inhalt in der Ressourcenzelle zu rendern. Die Ausgabe in der Ressourcenabfrage ist in der Vorlage verfügbar.

Wir ändern die Standardressourcenvorlage, um einen grünen ✔✱ Indikator anzuzeigen, wenn die Ressource der primären und zweiten Sprachen entspricht, einen grünen ✔ Indikator, wenn die Ressource nur der primären Sprache entspricht und einen gelben ✔ Indikator, wenn die Ressource nur der sekundären Sprache entspricht.

{{#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 Die lang_secondary-Eigenschaften werden von unserer benutzerdefiniert Ressourcenabfrage abrufen zurückgegeben, die wir oben aufgesetzt haben. Gehen Sie zur Handlereingenschaften Website für Dokumentation für die Vorlagenensyntax.

Ressourcenzellenvorlage:

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

Die Ressourcenzellenvorlage aktualisieren

  1. In der äußersten Rechte doppelklicken Sie auf die Sprachenregisterkarte
  2. In der äußersten Rechte auf Standardeinstellungen öffnen
  3. ROLLEN zum Plan gibt Abschnitt aus und wählen in der linken keine Liste aus
  4. Suchen Sie das Zeitplanassistenten zur Abfrage zum Abrufen von Einschränkungen und klicken Sie auf die Schaltfläche, um den Editor zu öffnen
  5. Aktualisieren Sie das Wertfeld mit dem Abfrageressourcencode oben und klicken Sie auf Speichern unter.
  6. Geben Sie "Sprachen-Filter-Layout" im Feld "Name" ein und klicken Sie auf "Speichern". Erstellt einen neuen Datensatz und verknüpft diese Zeitplan-Karte auf den Datensatz.
  7. Klicken Sie unten auf der Registerkarte auf anwenden

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

Übersicht

In den oben aufgeführten Schritten haben wir den Filterbereich im Zeitplanassistenten geändert, um so ein Filtersteuerelement für die Sprachenentität anzuzeigen. Wir haben auch die Abfrage-Einschränkungen geändert, um die neuen Sprachenattribute abzufragen, die mit der Anforderungsentität verknüpft wurden, und gestalten sie in einer Liste. Wenn ein Benutzer auswählt, um die Verfügbarkeit für einen Anforderungsdatensatz zu suchen, wird der Filterbereich in der Spracheneinschränkungen aufgezeichnet. Die Werte im Filterbereich werden in die Abrufen-Ressourcen-Abfrage übergeben und die FetchXML-Abfrage wird nur zusammengehörige Ressourcen zurückgegeben.

Siehe auch

Universelles FetchXML

Universal Resource Scheduling Erweiterbarkeit Versionenhinweise