Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Diese Schritt-für-Schritt-Anleitung ist eine Ergänzung zum Verstehen und Anpassen des Ressourcenabgleichs in Universal Resource Scheduling
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.
Erstellen der neuen Entitäten und Beziehungen
In diesem Abschnitt erstellen wir das neue Schema für die Hauptentität Language
und aktualisieren die Resource
Requirement
und-Entitäten mit den entsprechenden Beziehungen zur neuen Language
Entität.
Erstellen eines neuen Publishers
Erstellen Sie in Dynamics 365 unter Anpassungen einen neuen Verleger.
Füllen Sie das Formular "Neuer Publisher" mit den folgenden Details aus:
Feld Wert Anzeigename Sprache Name Sprache Präfix Dauer Wählen Sie "Speichern" und "Schließen" aus.
Erstellen einer neuen Lösung
Erstellen Sie in Dynamics 365 unter Anpassungen eine neue Lösung.
Füllen Sie das Formular Neue Lösung mit den folgenden Details aus:
Feld Wert Anzeigename Sprache Name Sprache Herausgeber Sprache Version 1.0.0.0 Wählen Sie Speichern aus.
Erstellen der Entität "Sprache"
Erstellen Sie in der Sprachlösung eine neue Entität.
Füllen Sie das Formular Neue Entität mit den folgenden Details aus:
Feld Wert Anzeigename Sprache Pluralname Sprachen Name lang_language (das lang_
Präfix wird automatisch ausgefüllt und ist schreibgeschützt)Wählen Sie "Speichern" aus.
Erstellen der n: n-Beziehung der Ressourcen-Entität zur Sprachen-Entität
Erstellen Sie in der Sprachenentität Sie eine neue n: n-Beziehung.
Füllen Sie das Formular Neue Beziehung mit den folgenden Details aus:
Feld Wert Derzeitige Entität Anzeige-Option Pluralnamen verwenden Sonstiges Unternehmen Entitätsname Buchbare Ressource Wählen Sie "Speichern" und "Schließen" aus.
Schließen Sie das Sprachenentitätsformular.
Erstellen Sie die Beziehungen von der Entität "Anforderung" zur Entität "Sprache"
Fügen Sie der Lösung „Sprache“ die vorhandene Entität „Ressourcenanforderung“ hinzu. Wenn das Dialogfeld "Fehlende erforderliche Komponenten" angezeigt wird, wählen Sie "Nein, erforderliche Komponenten nicht einschließen" aus.
Erstellen Sie in der Entität Ressourcenanforderung ein neues Feld.
Füllen Sie das Formular Neues Feld mit den folgenden Details aus:
Feld Wert Anzeigename Primäre Sprache Datentyp Suche Typ des Zieldatensatzes Sprache Wählen Sie "Speichern" und "Schließen" aus.
Erstellen Sie in der Entität Ressourcenanforderung ein neues Feld.
Füllen Sie das Formular Neues Feld mit den folgenden Details aus:
Feld Wert Anzeigename Sekundärsprache Datentyp Suche Typ des Zieldatensatzes Sprache Wählen Sie "Speichern" und "Schließen" aus.
Aktualisieren des Hauptformulars "Anforderung"
- Fügen Sie in der Entität Ressourcenanforderung das vorhandene Informationsformular zu den Unterkomponenten der Entität hinzu. Wenn das Dialogfeld "Fehlende erforderliche Komponenten" angezeigt wird, wählen Sie "Nein, erforderliche Komponenten nicht einschließen" aus.
- Verwenden Sie im Formular Informationen den Feld-Explorer, um dem Formular die beiden neuen Attribute "Primärsprache" und "Sekundärsprache" hinzuzufügen, damit Benutzer diese Informationen eingeben können, wenn sie Anforderungen erstellen.
- Wählen Sie Speichern aus.
- Wählen Sie Veröffentlichen aus.
Zusammenfassung
In den obigen Schritten haben wir die neue Entität Language erstellt. Anschließend haben wir neue Beziehungen mit den Entitäten "Ressource" und "Anforderung" hinzugefügt. Ressourcen können mit mehreren Sprachen verknüpft werden, da wir n:n-Beziehungen zwischen Sprache und Ressource hinzugefügt haben. Anforderungen können mit zwei Sprachen verknüpft werden, da wir zwei Nachschlageattribute für die Anforderungsentität hinzugefügt haben, die auf die neue Sprachentität verweisen.
Hinzufügen von Daten
Verwenden Sie die erweiterte Suche, um der Entität Sprache neue Datensätze hinzuzufügen. Sie können dann Ressourceneinträge mit den neuen Spracheinträgen verknüpfen, indem Sie einen Ressourcendatensatz öffnen und in der Navigationsleiste zur Sprachbeziehung navigieren. Für Anforderungsdatensätze können Sie die neuen Felder "Primärsprache" und "Sekundärsprache" im Anforderungsformular ausfüllen.
Anpassung der Zeitplantafel
Um weitere Ressourcen im Zeitplan mit der neuen Spracheneinschränkung zu filtern, aktualisieren wir die Abrufen-Ressourcen und die Filter-Layout-Konfigurationssätze.
Hinweis
Diese Anpassungen der Zeitplanübersicht gelten einheitlich für alle Registerkarten und können nicht einzeln pro Registerkarte festgelegt werden. Dies gilt für Filterlayout des Zeitplan-Assistenten, Abfrage „Ressourcen abrufen” des Zeitplan-Assistenten, Ressourcenzellenvorlage des Zeitplan-Assistenten und Abfrage „Einschränkungen abrufen” des Zeitplan-Assistenten.
Konfiguration des Filterlayouts
Tipp
Für die folgenden Schritte ist es hilfreich, einen Text-Editor zu verwenden, der die XML-Syntaxhervorhebung unterstützt, um Ihre Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universal Resource Scheduling-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
In dieser Übung entfernen wir alle Standardfilter, die mit Universal Resource Scheduling ausgeliefert werden, aus dem Bereich "Filter" und fügen 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 inaktive Status statecode für diese Entität. Dies wird verwendet, 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 wir eine brandneue separate Zeitplanübersicht und implementieren die Änderungen, aber Sie können diese Änderungen immer in der Standardzeitplanübersicht vornehmen, damit andere Zeitplanübersichten diese Änderungen automatisch übernehmen können.
- Wechseln Sie in Dynamics 365 in der oberen Navigationsleiste zu Resource Scheduling>Schedule Board.
- Wählen Sie oben rechts das + Zeichen aus, um eine neue Pinnwand zu erstellen.
- Name der neuen Kartensprache.
- Wählen Sie am unteren Rand des Dialogfelds Hinzufügen aus. Die neuen Karte wird erstellt.
Aktualisieren des Filterlayouts der Zeitplantafel
Als Nächstes erstellen wir einen neuen Konfigurationsdatensatz, in dem Filterlayouts und Abfragen gespeichert sind, die von der Zeitplanübersicht verwendet werden, und verknüpfen dann die neu erstellte Zeitplanübersicht mit dem neuen Konfigurationsdatensatz. Es gibt mehrere Möglichkeiten, dies zu tun, aber hier ist die schnellste:
- Wählen Sie die Registerkarte Sprache aus.
- Scrollen Sie nach unten zu Allgemeine Einstellungen>Andere Einstellungen.
- Suchen Sie das Feld Filterlayout , wählen Sie die Schaltfläche rechts aus, um den Editor zu öffnen
- Aktualisieren Sie das Feld Wert mit dem Filterlayout-Code oben, und wählen Sie Speichern als aus.
- Geben Sie "Language Filter Layout" in das Feld Name ein und wählen Sie Speichern aus. Dadurch wird ein neuer Konfigurationsdatensatz erstellt und diese Zeitplanübersicht mit dem Datensatz verknüpft.
- Wählen Sie am unteren Rand des Dialogfelds Anwenden aus.
Das Board wird neu geladen und Sie sehen das Filter-Panel auf der linken Seite mit dem neuen Layout. Nur der Filter Sprachen ist verfügbar. Das Filtern funktioniert noch nicht, da wir die Abfrage zum Abrufen von Ressourcen aktualisieren müssen, um den neuen Filter nutzen zu können.
Konfiguration der Abfrage "Ressourcen abrufen"
Tipp
Für die folgenden Schritte ist es hilfreich, einen Text-Editor zu verwenden, der die XML-Syntaxhervorhebung unterstützt, um Ihre Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universal Resource Scheduling-Editor einzufügen.
Die Konfiguration "Retrieve Resources Query" ist eine UFX-Abfrage , die von der Resource Matching API verwendet wird. Es verwendet die im Filterbereich eingegebenen Werte als Eingabe und erstellt dynamisch das richtige FetchXML, um übereinstimmende Ressourcen zu finden.
Im Folgenden finden Sie die neuen Codeausschnitte, die der Abfrage zum Abrufen von Ressourcen hinzugefügt wurden, um sie nach den Sprachen der Ressourcen abgleichen und sortieren zu können.
Hinzufügen der Verknüpfungen von bookableresource
bis 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 verwenden das FetchXML-Element link-entity
, um nur Ressourcen zurückzugeben, die den im Filterpanel ausgewählten Sprachdatensätzen zugeordnet sind. Um die Anzeige der übereinstimmenden Sprachen und die Sortierung nach Primär- oder Sekundärsprache zu unterstützen, wie weiter unten im Abschnitt Ressourcenzellenvorlage beschrieben, verwenden wir mehrere link-entity
Verknüpfungen.
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 |
Bestimmen der Sortierreihenfolge einer Ressource
Nachdem wir die übereinstimmenden Ressourcen basierend auf den den einzelnen Ressourcen zugewiesenen Sprachen abgerufen haben, weisen wir 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>
Hier ist 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. Wir sortieren die Ergebnisse basierend auf der lang_order
zuvor hinzugefügten Eigenschaft und weisen die sortierten Ergebnisse der Resources
Eigenschaft neu zu.
Hier ist 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. In dieser Übung verwenden wir nur eine Teilmenge der Standardabfrage 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
- Doppelklicken Sie rechts oben auf den Tab Sprache
- Scrollen Sie nach unten zu Allgemeine Einstellungen > Andere Einstellungen
- Suchen Sie das Feld "Ressourcenabfrage", und wählen Sie die Schaltfläche rechts daneben aus, um den Editor zu öffnen.
- Aktualisieren Sie das Wertfeld mit dem Code für Ressourcenabfrage abrufen oben, und klicken Sie auf „Speichern unter“.
- Geben Sie "Language Resources Query" in das Feld Name ein, und wählen Sie Speichern aus. Dadurch wird ein neuer Konfigurationsdatensatz erstellt und diese Zeitplanübersicht mit dem Datensatz verknüpft.
- Wählen Sie am unteren Rand des Dialogfelds Anwenden aus.
Das Board wird mit der aktualisierten Konfiguration neu geladen. Das Filtern funktioniert jetzt. Wenn Sie Spracheinträge erstellt und mit Ressourceneinträgen verknüpft haben, können Sie jetzt Ressourcen nach den zugehörigen Sprachen filtern.
Zusammenfassung
In den obigen Schritten haben wir den Bereich "Filter" so geändert, dass ein Filtersteuerelement für die Entität "Sprache" angezeigt wird. Wir haben auch die Abfrage zum Abrufen von Ressourcen so geändert, dass sie mit Ressourcen übereinstimmt, die den ausgewählten Sprachdatensätzen zugeordnet sind. Wenn ein Benutzer Werte im Filtersteuerelement auswählt und Suchen auswählt, werden die Werte an die Abfrage übergeben, und die FetchXML-Abfrage gibt nur übereinstimmende Ressourcen zurück.
Anpassen des Zeitplan-Assistenten
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 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.
Konfiguration des Filterlayouts des Zeitplan-Assistenten
Tipp
Für die folgenden Schritte ist es hilfreich, einen Text-Editor zu verwenden, der die XML-Syntaxhervorhebung unterstützt, um Ihre Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universal Resource Scheduling-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 die Zeitplanübersicht verwendet, wie z. B. Startzeit, Endzeit, Dauer usw., wird ein anderes Layout verwendet.
Hinweis
In dieser Übung verwenden wir nur eine Teilmenge der Standardfilter, die in Universal Resource Scheduling aus der Filterlayoutkonfiguration des Zeitplan-Assistenten ausgeliefert werden, und fügen die Dropdownliste Sprachen als einzigen verfügbaren Filter hinzu.
Der Filter, den wir dem Layout hinzufügen, ist derselbe wie oben in der Filterlayoutkonfiguration. 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
- Doppelklicken Sie rechts oben auf den Tab Sprache
- Wählen Sie rechts oben "Standardeinstellungen öffnen" aus.
- Scrollen Sie zum Abschnitt "Zeitplantypen" und wählen Sie in der linken Liste "Keine" aus.
- Suchen Sie das Feld Filterlayout des Zeitplanassistenten, und wählen Sie die Schaltfläche rechts aus, um den Editor zu öffnen
- Aktualisieren Sie das Wertfeld mit dem Code für Filterlayout des Zeitplan-Assistenten oben, und klicken Sie auf „Speichern unter“.
- Geben Sie "Language Schedule Assistant Filter Layout" in das Feld Name ein und wählen Sie Speichern aus. Dadurch wird ein neuer Konfigurationsdatensatz erstellt und diese Zeitplanübersicht mit dem Datensatz verknüpft.
- Wählen Sie am unteren Rand des Dialogfelds Anwenden aus.
Das Board wird neu geladen. Als Nächstes müssen wir die Abfrage zum Abrufen von Einschränkungen ändern, bevor wir den Zeitplan-Assistenten mit unseren neuen Spracheinschränkungen verwenden können, sodass die Sprachen, die für die Anforderung festgelegt sind, Teil der Suche des Zeitplan-Assistenten sind.
Konfiguration der Einschränkungsabfrage abrufen
Tipp
Für die folgenden Schritte ist es hilfreich, einen Text-Editor zu verwenden, der die XML-Syntaxhervorhebung unterstützt, um Ihre Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universal Resource Scheduling-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. In dieser Übung verwenden wir nur eine Teilmenge der Standardabfrage 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 Eigenschaftenbehälter für Einschränkungen eine neue Eigenschaft Languages
hinzu, die beide Attribute, die primäre Sprache und die sekundäre Sprache, in einer einzigen Liste von Entitäten (EntityCollection) kombiniert. Dies ist erforderlich, da das Steuerelement "Sprachen" im Bereich "Filter" als Liste von Datensätzen angezeigt wird. Eine Alternative wäre, im Filterbereich zwei separate Steuerelemente für die beiden Attribute zu erstellen.
Hier ist 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
- Doppelklicken Sie rechts oben auf den Tab Sprache
- Wählen Sie rechts oben "Standardeinstellungen öffnen" aus.
- Scrollen Sie zum Abschnitt "Zeitplantypen" und wählen Sie in der linken Liste "Keine" aus.
- Suchen Sie das Feld Schedule Assistant Retrieve Constraints Query, und wählen Sie die Schaltfläche rechts aus, um den Editor zu öffnen
- Aktualisieren Sie das Wertfeld mit dem Code für Ressourcenabfrage abrufen oben, und klicken Sie auf „Speichern unter“.
- Geben Sie "Language Constraints Query" in das Feld Name ein und wählen Sie Speichern aus. Dadurch wird ein neuer Konfigurationsdatensatz erstellt und diese Zeitplanübersicht mit dem Datensatz verknüpft.
- Suchen Sie den Zeitplanassistenten zur Abfrageneinschränkungsressource und wählen Sie die Sprachenressourcenabfrage, die zuvor für die Zeitplan-Karten-Anpassung erstellt wurde.
- Wählen Sie am unteren Rand des Dialogfelds Anwenden aus.
Das Board wird mit der aktualisierten Konfiguration neu geladen. Die Filterung des Zeitplan-Assistenten funktioniert jetzt. Wenn Sie Sprachdatensätze erstellt und diese mit Anforderungsdatensätzen verknüpft haben, können Sie jetzt unten in der Zeitplanübersicht einen Anforderungsdatensatz auswählen, Verfügbarkeit suchen auswählen, um den Zeitplanassistenten zu starten, und nur Ressourcen anzeigen, die den in der Anforderung gespeicherten Sprachen entsprechen.
Die Ressourcenzellenvorlagekonfiguration bearbeiten
Tipp
Für die folgenden Schritte ist es hilfreich, einen Text-Editor zu verwenden, der die HTML-Syntaxhervorhebung unterstützt, um Ihre Änderungen vorzunehmen, und dann Ihre Änderungen wieder in den Universal Resource Scheduling-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;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</span>
{{/if}}
Die lang_primary
- und lang_secondary
-Eigenschaften werden von unserer benutzerdefinierten Abfrage zum Abrufen von Ressourcen zurückgegeben, die oben eingerichtet wurde. 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;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</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
- Doppelklicken Sie rechts oben auf den Tab Sprache
- Wählen Sie rechts oben "Standardeinstellungen öffnen" aus.
- Scrollen Sie zum Abschnitt "Zeitplantypen" und wählen Sie in der linken Liste "Keine" aus.
- Suchen Sie das Feld „Ressourcenzellenvorlage des Zeitplan-Assistenten“, und klicken Sie auf die Schaltfläche rechts, um den Editor zu öffnen
- Aktualisieren Sie das Wertfeld mit dem Code für Ressourcenzellenvorlage oben, und klicken Sie auf „Speichern unter“.
- Geben Sie "Language Resource Cell Template" in das Feld Name ein, und wählen Sie Speichern aus. Dadurch wird ein neuer Konfigurationsdatensatz erstellt und diese Zeitplanübersicht mit dem Datensatz verknüpft.
- Wählen Sie am unteren Rand des Dialogfelds Anwenden aus.
Das Board wird mit der aktualisierten Konfiguration neu geladen. In der Ressourcenzelle wird nun angezeigt, wie eine Ressource mit der Sprachbeschränkung im Bereich "Filter" übereinstimmt.
Zusammenfassung
In den obigen Schritten haben wir den Bereich Filter im Zeitplan-Assistenten so geändert, dass ein Filtersteuerelement für die Entität Sprache angezeigt wird. Wir haben auch die Abfrage zum Abrufen von Einschränkungen geändert, um die neuen Sprachattribute abzufragen, die sich auf die Anforderungsentität beziehen, und sie in einer Liste zu formen. Wenn ein Benutzer auswählt, die Verfügbarkeit für einen Anforderungsdatensatz zu suchen, werden im Bereich "Filter" die erfassten Spracheinschränkungen angezeigt. Die Werte aus dem Bereich "Filter" werden an die Abfrage "Ressourcen abrufen" übergeben, und die FetchXML-Abfrage gibt nur übereinstimmende Ressourcen zurück.
Siehe auch
Versionshinweise zur Erweiterbarkeit von Universal Resource Scheduling