Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł jest uzupełnieniem tematu Rozumienie i dostosowywanie dopasowywania zasobów w rozwiązaniu Universal Resource Scheduling.
W tym przewodniku krok po kroku rozszerzymy zasoby Universal Resource Scheduling o Languageograniczenie . Weźmy pod uwagę organizację, która chce filtrować zasoby według języków, którymi się posługują. Chcą również uchwycić w rejestrze Requirement język wymagany do wykonania zadania. To ograniczenie podąża podobnym wzorcem do wbudowanego ograniczenia Territory. Nowa encja Language główna przechowuje różne języki, którymi może posługiwać się zasób. Rekord Resource można skojarzyć z wieloma Languages dzięki encji relacji wiele do wielu. Na Requirement jednostce modelujemy to, tworząc dwa nowe atrybuty wyszukiwania: Primary Language i Secondary Language. Gdy system szuka dostępnych zasobów dla wymagania, pokazują się tylko zasoby skojarzone z Primary Language lub Secondary Language.
Wskazówka
Jednostka jest również nazywana tabelą.
Tworzenie nowych tabel i relacji
Utwórz nowy schemat dla tabeli głównej Language i zaktualizuj tabele Resource i Requirement poprzez odpowiednie relacje z nową tabelą Language.
Tworzenie nowego wydawcy
Przejdź do Aplikacja ustawień środowiska Power Platform. Wybierz pozycję Dostosowania>Wydawcy i utwórz nowego wydawcę. Dowiedz się więcej w temacie Tworzenie wydawcy.
Wprowadź następujące informacje:
Pole Wartość nazwa wyświetlana Język Nazwa Język Prefiks lang Wybierz Zapisz.
Utwórz nowe rozwiązanie
Wybierz pozycję Rozwiązania dostosowań> i utwórz nowe rozwiązanie. Dowiedz się więcej w temacie Tworzenie rozwiązania.
Wprowadź następujące informacje:
Pole Wartość Wyświetlana nazwa Język Nazwa Język Wydawca Język Wersja 1.0.0.0 Wybierz Utwórz.
Tworzenie tabeli językowej
Otwórz rozwiązanie językowe i wybierz Nowa>Tabela>(właściwości zaawansowane). Dowiedz się więcej o tworzeniu nowych tabel.
Wprowadź następujące informacje:
Pole Wartość Wyświetlana nazwa Język Nazwa w liczbie mnogiej Języki Nazwa schematu w obszarze Opcje zaawansowane jest wypełniana automatycznie| lang_Language. Prefiks
lang_jest tylko do odczytu.Wybierz Zapisz.
Utwórz relację wiele do wielu między tabelami Zasób i Język
- Otwórz tabelę Język i Nowe>Relacja>Wiele do wielu. Dowiedz się więcej o tworzeniu relacji wiele-do-wielu między tabelami.
- W polu Powiązana tabela (wiele) wybierz pozycję Zasób rezerwowalny.
- Wybierz pozycję Gotowe.
- Zamknij tabelę Język.
Utwórz relacje z istniejącej tabeli Wymaganie do tabeli Język
Otwórz rozwiązanie językowe i wybierz pozycję Dodaj istniejący>Tabela>Zapotrzebowanie na zasoby.
Jeśli zostanie wyświetlone okno dialogowe Brak wymaganych składników, wybierz pozycję Nie i nie uwzględnij wymaganych składników.
Wybierz Dodaj.
W tabeli Wymagania dotyczące zasobów utwórz nową kolumnę.
Wprowadź następujące informacje:
Pole Wartość nazwa wyświetlana Język podstawowy Typ danych Lookup Powiązana tabela Język Wybierz Zapisz.
W tabeli Wymagania dotyczące zasobów utwórz nową kolumnę.
Wprowadź następujące informacje:
Pole Wartość nazwa wyświetlana Język dodatkowy Typ danych Lookup Powiązana tabela Język Wybierz Zapisz.
Zaktualizuj formularza główny Wymaganie
- W tabeli Wymagania dotyczące zasobów wybierz pozycję Formularze.
- Wybierz Dodaj istniejący formularz>Informacje i Dodaj. Jeśli zostanie wyświetlone okno dialogowe Brak wymaganych składników, wybierz pozycję Nie i nie uwzględnij wymaganych składników.
- Otwórz formularz Informacje i dodaj dwa nowe atrybuty, język podstawowy i język pomocniczy do formularza, aby użytkownicy mogli wprowadzać te informacje podczas tworzenia wymagań.
- Wybierz Zapisz i opublikuj.
Dodawanie danych językowych do zasobów i wymagań
Dodaj nowe rekordy do tabeli Language. Następnie można skojarzyć rekordy zasobów z nowymi rekordami języka, otwierając rekord zasobu i przechodząc do relacji języka na pasku nawigacyjnym. Dla rekordów wymagań możesz wypełnić nowe pola Język podstawowy i Język dodatkowy język w formularzu Wymaganie.
Dostosowywanie tablicy harmonogramu
Aby filtrować zasoby na tablicy harmonogramu przy użyciu nowego ograniczenia językowego, zaktualizuj rekordy konfiguracji "Retrieve Resources Query" oraz "Filter Layout".
Uwaga / Notatka
Te dostosowania tablicy harmonogramu mają zastosowanie do wszystkich kart jednolicie i nie można ich ustawić indywidualnie na kartę. To dostosowanie dotyczy Układu filtra asystenta harmonogramu, Zapytania dotyczącego pobierania zasobów asystenta harmonogramu, Szablonu komórki zasobu asystenta harmonogramui Zapytani dotyczącego ograniczeń pobierania agenta harmonogramu.
Konfigurowanie układu filtru
W poniższych krokach użyj edytora tekstów obsługującego wyróżnianie składni XML, aby wprowadzić zmiany, a następnie wklej zmiany z powrotem do edytora uniwersalnego planowania zasobów.
Konfiguracja układu filtru to definicja układu XML służąca do dostosowywania układu panelu Filtr.
Uwaga / Notatka
Usuń wszystkie filtry domyślne dostarczane z uniwersalnym planowaniem zasobów z panelu Filtr i dodaj języki jako jedyny dostępny filtr.
<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
Element control dodaje nową kontrolkę do panelu Filtr. Oto opis każdego atrybutu:
| Nazwa | Opis |
|---|---|
type |
Typ kontroli filtra. Kontrolka combo renderuje listę rozwijaną z wartościami do wyboru |
source |
Źródło wartości dla formantu listy rozwijanej. Źródło entity ukazuje rekordy encji na liście rozwijanej |
key |
Klucz, którego należy używać do przechowywania wybranych wartości w zbiorze właściwości ograniczenia |
inactive-state |
Nieaktywne statecode dla tego obiektu, który służy do wykluczania nieaktywnych rekordów z listy rozwijanej |
label-id |
Zlokalizowana etykieta, która ma być używana dla tego formantu |
entity |
Rekordy tej encji zostaną wyświetlone na liście rozwijanej |
multi |
Konfiguruje listę rozwijaną, aby umożliwić wybranie pojedynczego rekordu lub wielu rekordów |
Układ filtra:
<?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>
Tworzenie nowej tablicy języków
Aby zachować izolację tych zmian, utwórz oddzielną tablicę harmonogramu i zaimplementuj zmiany. Te zmiany można zawsze wprowadzać w domyślnej tablicy harmonogramu, aby inne tablice harmonogramu mogły automatycznie dziedziczyć te zmiany.
- Przejdź do aplikacji Planowanie zasobów i wybierz pozycję Tablica harmonogramu.
- Wybierz znak, + aby utworzyć nową tablicę.
- Nazwij nowy język tablicy.
- W dolnej części okna dialogowego wybierz pozycję Dodaj. Zostanie utworzona nowa tablica.
Konfigurowanie układu filtru tablicy harmonogramu
Następnie utwórz nowy rekord konfiguracji, który przechowuje układy filtrów i zapytania używane przez tablicę harmonogramu. Następnie połącz nowo utworzoną tablicę harmonogramu z nowym rekordem konfiguracji. Istnieje wiele sposobów, aby to zrobić, ale oto najszybsza metoda:
- Na tablicy harmonogramu wybierz wielokropek (...) w prawym górnym rogu i ustawienia harmonogramu.
- Wybierz pozycję Wszystkie ustawienia tablicy w dolnej części okienka. Następnie wybierz pozycję Inne.
- Znajdź pole Układ filtru i wybierz ikonę ołówka, aby otworzyć edytor.
- Wprowadź ciąg "Układ filtru języka" w polu Nazwa i dodaj kod układu filtru, a następnie wybierz pozycję Zapisz jako nowy.
- Wybierz Zapisz. Zostanie utworzony nowy rekord konfiguracji, który łączy tę tablicę harmonogramu z rekordem.
- Wybierz Filtry. Zostanie wyświetlony panel Filtr z nowym układem. Dostępny jest tylko filtr Języki. Filtrowanie nie działa, dopóki nie zaktualizujesz zapytania Pobieranie zasobów.
Zaktualizuj zapytanie o pobieranie zasobów
W poniższych krokach użyj edytora tekstów obsługującego wyróżnianie składni XML, aby wprowadzić zmiany, a następnie wklej zmiany z powrotem do edytora uniwersalnego planowania zasobów.
Konfiguracja Zapytania dotyczącego zasobów to Zapytanie Universal FetchXML (UFX) Query używane przez interfejs API dopasowywania zasobów. Przyjmuje jako dane wejściowe wartości wprowadzone w panelu Filtr i dynamicznie konstruuje poprawny kod FetchXML w celu znalezienia pasujących zasobów.
Dodaj te fragmenty kodu do zapytania Pobieranie zasobów, aby dopasować je i uporządkować według języków zasobów.
Dodawanie łączeń z bookableresource do 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>
Wartości wybrane w panelu Filtr są przekazywane jako dane wejściowe do zapytania i są dostępne w zmiennej XPath
$input
Zapytanie Retrieve Resources używa FetchXML do wykonywania zapytań dotyczących Resource (bookableresource) jednostki. Wybraliśmy element FetchXML link-entity , aby zwracał tylko zasoby skojarzone z rekordami języka wybranymi w panelu Filtr. Użyj wielu link-entity łączeń, aby wyświetlić dopasowane języki i sortuj według podstawowego lub drugorzędnego języka, jak opisano w sekcji Szablon komórki zasobu.
Oto opis każdego z element i attribute.
| Nazwa | Opis |
|---|---|
link-entity |
Utwórz sprzężenie do relacji wiele do wielu między encjami Zasób i Język |
ufx:if |
Ten element FetchXML (link-entity) należy emitować tylko wtedy, gdy wyrażenie XPath w tym atrybucie zwraca wartość |
attribute |
Zwróć dopasowany język podstawowy lub język pomocniczy |
filter i condition |
Filtruj rekordy relacji wiele do wielu tylko do tych, które spełniają określone identyfikatory Język |
ufx:value i select |
Wyprowadza wynik wyrażenia XPath w atrybucie select |
ufx:apply i select |
Emituj podrzędne elementy FetchXML dla każdego wyniku zwróconego z wyrażenia XPath w atrybucie select |
value |
Zawiera identyfikator rekordu Język |
Określanie kolejności sortowania zasobu
Po pobraniu pasujących zasobów na podstawie przypisanych języków każdego zasobu przypisz nową lang_order właściwość, aby określić kolejność sortowania.
<bag>
<lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
</bag>
Opis każdego element i attribute.
| Nazwa | Opis |
|---|---|
lang_order |
Utwórz nową właściwość w każdym zasobie zwróconym z zapytania FetchXML o nazwie lang_order |
ufx:select |
Przypisz wynik wyrażenia XPath w tym atrybucie do właściwości lang_order. Właściwości lang_primary i lang_secondary pobrane wcześniej w zapytaniu są używane razem z funkcją XPath iif w celu określenia kolejności dopasowywania zasobów. |
Kolejność wyników
<Resources ufx:select="order(Resources, 'lang_order')" />
Zapytania UFX są przetwarzane w kolejności sekwencyjnej. Po pobraniu zasobów za pomocą FetchXML wyniki są przypisywane do właściwości.Resources Posortuj wyniki na podstawie właściwości dodanej lang_order wcześniej i ponownie przypisz posortowane wyniki do Resources właściwości .
Opis każdego element i attribute:
| Nazwa | Opis |
|---|---|
Resources |
Przypisz na nowo Resources właściwość |
ufx:select |
Przypisz wynik wyrażenia XPath w tym atrybucie do właściwości Resources. Funkcja XPath order jest używana do uporządkowania Resources listy według jej lang_order atrybutu. |
Uwaga / Notatka
Domyślne zapytanie o pobieranie zasobów dostarczane z planowaniem uniwersalnych zasobów to duże zapytanie, które obsługuje wszystkie ograniczenia zasobów zawarte w planowaniu zasobów uniwersalnych. W tym ćwiczeniu użyjemy tylko podzestawu domyślnego zapytania i dodamy języki jako jedyny filtr.
<?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>
Zaktualizuj Zapytanie dotyczące zasobów dla Tablicy harmonogramu
- Na tablicy harmonogramu wybierz wielokropek (...) w prawym górnym rogu i ustawienia harmonogramu.
- Wybierz pozycję Wszystkie ustawienia tablicy w dolnej części okienka. Następnie wybierz pozycję Inne.
- Znajdź pole Pobieranie zasobów Zapytanie i wybierz ikonę ołówka, aby otworzyć edytor.
- Wprowadź frazę "Zapytanie dotyczące zasobów językowych" w polu Nazwa , dodaj kod zapytania Pobieranie zasobów i wybierz pozycję Zapisz jako nowy.
- Wybierz Zapisz. Zostanie utworzony nowy rekord konfiguracji, który łączy tę tablicę harmonogramu z rekordem.
Tablica ponownie załaduje zaktualizowaną konfigurację. Filtrowanie działa. Jeśli tworzysz rekordy języka i kojarzysz je z rekordami zasobów, możesz filtrować zasoby według skojarzonych języków.
Dostosowywanie Asystenta harmonogramu
Dostosuj widok filtra Asystenta Harmonogramu i uzyskaj konfiguracje zapytań dotyczących ograniczeń, aby korzystać z nowych ograniczeń językowych w Asystencie Harmonogramu.
W przeciwieństwie do dostosowań Tablicy harmonogramu, gdzie każda tablica może być indywidualnie dostosowywana, dostosowania Asystenta planowania mają wpływ na wszystkie tablice, na których jest używany Asystent planowania. Dostosowania Asystenta planowania mogą być specyficzne dla typu możliwego do zaplanowania lub dla wszystkich typów. W tym przykładzie dostosujemy Asystenta planowania dla wszystkich typów.
Konfigurowanie układu filtru Asystenta harmonogramu
W poniższych krokach użyj edytora tekstów obsługującego wyróżnianie składni XML, aby wprowadzić zmiany, a następnie wklej zmiany z powrotem do edytora uniwersalnego planowania zasobów.
Konfiguracja układu filtru asystenta planowania., podobnie jak Układ filtru tablicy harmonogramu, określa układ formantów w panelu Filtr. Ponieważ Asystent harmonogramu używa większej liczby filtrów niż tablica harmonogramu, takich jak godzina rozpoczęcia, godzina zakończenia i czas trwania, używany jest inny układ.
Uwaga / Notatka
W tym ćwiczeniu użyjemy ponownie tylko podzbioru domyślnych filtrów dostarczanego w Universal Resource Scheduling z konfiguracji Układ filtru asystenta planowania i dodamy listę rozwijaną Języki jako jedyny dostępny filtr.
Filtr, który dodajemy do układu, jest taki sam w temacie Konfigurowanie układu filtru tablicy harmonogramu. Inne kontrolki są potrzebne do modyfikowania parametrów wyszukiwania Asystenta harmonogramu.
Kompletny układ filtru Asystenta planowania
<?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>
Aktualizowanie układu filtru Asystenta planowania
- Na tablicy harmonogramu wybierz wielokropek (...) w prawym górnym rogu i ustawienia harmonogramu.
- Wybierz pozycję Wszystkie ustawienia tablicy w dolnej części okienka.
- Przewiń do pozycji Typy harmonogramu i wybierz pozycję Brak.
- Wybierz pozycję Edytuj wartości domyślne znajdujące się u dołu.
- Znajdź pole Układ filtru Asystenta harmonogramu , wybierz ikonę ołówka, aby otworzyć edytor.
- Wprowadź układ filtru Asystenta harmonogramu językowego w polu Nazwa .
- Zaktualizuj pole układu filtru Asystenta harmonogramu za pomocą kodu i wybierz pozycję Zapisz jako nowe. Zostanie utworzony nowy rekord konfiguracji, który łączy tę tablicę harmonogramu z rekordem.
- W dolnej części okna dialogowego Ustawienia tablicy wybierz pozycję Zapisz.
Tablica się przeładowuje. Zmień zapytanie dotyczące pobierania ograniczeń, aby uwzględnić języki ustawione w wymaganiach w wyszukiwarce Asystenta harmonogramu.
Konfigurowanie zapytania pobierania ograniczeń
W poniższych krokach użyj edytora tekstów obsługującego wyróżnianie składni XML, aby wprowadzić zmiany, a następnie wklej zmiany z powrotem do edytora uniwersalnego planowania zasobów.
Konfiguracja Zapytania dotyczącego ograniczeń to UFX Query używane przez interfejs API Ograniczenia odzyskiwania wymagań. Jako dane wejściowe przyjmuje identyfikator rekordu wymagań (wybranego w interfejsie użytkownika) i zwraca rekord wymagań oraz wszystkie jego rekordy podrzędne.
Uwaga / Notatka
Domyślne Zapytanie dotyczące ograniczeń dostarczane z Universal Resource Scheduling to duże zapytanie, które obsługuje wszystkie ograniczenia wymagań z Universal Resource Scheduling. W tym ćwiczeniu użyjemy tylko podzestawu domyślnego zapytania i dodamy języki jako jedyny filtr.
<Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />
Zapytania UFX są przetwarzane w kolejności sekwencyjnej. Zapytanie dotyczące ograniczeń używa FetchXML, aby wysłać zapytanie do encji Requirement (msdyn_resourcerequirement) i do przypisać wynik, rekord Wymaganie, do właściwości Requirement. Dodajemy do torby właściwości ograniczeń nową właściwość Languages , która łączy oba atrybuty, język podstawowy i język pomocniczy, w jedną listę jednostek (EntityCollection). Ta właściwość jest wymagana, ponieważ w panelu Filtr jest wyświetlana kontrolka Języki jako lista rekordów. Alternatywą jest utworzenie dwóch oddzielnych elementów sterujących w panelu Filtr dla dwóch atrybutów.
Opis każdego element i attribute:
| Nazwa | Opis |
|---|---|
Languages |
Utwórz nową właściwość w torbie właściwości ograniczeń wynikowych o nazwie Languages |
ufx:select |
Przypisz wynik wyrażenia XPath w tym atrybucie do właściwości Languages. Właściwości lang_primarylanguage i lang_secondarylanguage, które zostały wcześniej pobrane w zapytaniu i są dostępne we właściwości Requirement, są przekazywane do funkcji XPath lookup-to-list, która konwertuje wiele właściwości lookup na pojedynczą list (EntityCollection). |
Zapytanie dotyczące ograniczeń:
<?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>
Zaktualizuj Zapytanie dotyczące ograniczeń
- Na tablicy harmonogramu wybierz wielokropek (...) w prawym górnym rogu i ustawienia harmonogramu.
- Wybierz pozycję Wszystkie ustawienia tablicy w dolnej części okienka.
- Przewiń do pozycji Typy harmonogramu i wybierz pozycję Brak.
- Wybierz pozycję Edytuj wartości domyślne.
- Znajdź pole Zapytanie dotyczące ograniczeń asystenta planowania, wybierz ikonę ołówka, aby otworzyć edytor.
- Wprowadź ciąg "Zapytanie dotyczące ograniczeń językowych" w polu Nazwa .
- Zaktualizuj pole Zapytanie dotyczące ograniczeń asystenta planowania, używając kodu zapytania dotyczącego pobierania ograniczeń, a następnie wybierz Zapisz jako nowe.
- Wybierz Zapisz. Zostanie utworzony nowy rekord konfiguracji, który łączy tę tablicę harmonogramu z rekordem.
- Znajdź pole Zapytanie dotyczące zasobów asystenta planowania i wybierz zapytanie dotyczące zasobów języków, które utworzyliśmy dla dostosowań tablicy harmonogramu.
- W dolnej części okna dialogowego wybierz pozycję Zapisz.
Tablica ponownie załaduje zaktualizowaną konfigurację. Filtrowanie Asystenta harmonogramu działa. Jeśli tworzysz rekordy języka i kojarzysz je z rekordami wymagań, możesz wybrać rekord Wymagania w dolnej części tablicy harmonogramu, wybierz pozycję Znajdź dostępność , aby wyświetlić tylko zasoby zgodne z językami zapisanymi w wymaganiach.
Konfiguracja szablonu komórki zasobu
W poniższych krokach użyj edytora tekstów, który obsługuje wyróżnianie składni HTML, aby wprowadzić zmiany, a następnie wklej zmiany z powrotem do edytora uniwersalnego planowania zasobów.
Konfiguracja szablonu komórki zasobu to szablon Odległość używany do renderowania zawartości w komórce zasobu. Dane wyjściowe z zapytania Retrieve Resources są dostępne dla szablonu.
Modyfikujemy domyślny szablon zasobu tak, aby pokazywał zielony ✔ wskaźnik ✱, jeśli zasób jest zgodny z językiem podstawowym i dodatkowym, zielony ✔ wskaźnik, jeśli zasób pasuje tylko do języka podstawowego, i żółty ✔ wskaźnik, jeśli zasób pasuje tylko do języka dodatkowego.
{{#if lang_primary}}
<span style='color:green;'>✔{{#if lang_secondary}} ✱{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>✔</span>
{{/if}}
Właściwości lang_primary i lang_secondary są zwracane z naszego niestandardowego Zapytania dotyczącego zasobów utworzonego powyżej. Zapoznaj się ze stroną Handlebars, aby uzyskać dokumentację na temat składni szablonów.
Szablon komórki zasobu:
<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>
Aktualizowanie szablonu komórki zasobu
- Na tablicy harmonogramu wybierz wielokropek (...) w prawym górnym rogu i ustawienia harmonogramu.
- Wybierz pozycję Wszystkie ustawienia tablicy w dolnej części okienka.
- Przewiń do pozycji Typy harmonogramu i wybierz pozycję Brak.
- Wybierz pozycję Edytuj wartości domyślne.
- Znajdź pole Szablon komórki zasobu Asystenta harmonogramu i wybierz ikonę ołówka, aby otworzyć edytor.
- Wprowadź "Szablon komórki zasobów językowych" w polu Nazwa.
- Zaktualizuj pole Szablon komórki zasobu, wpisując kod szablonu, i wybierz Zapisz jako nowe.
- Wybierz Zapisz. Zostanie utworzony nowy rekord konfiguracji, który łączy tę tablicę harmonogramu z rekordem.
- Znajdź pole Zapytanie dotyczące zasobów asystenta planowania i wybierz zapytanie dotyczące zasobów języków, które utworzyliśmy dla dostosowań tablicy harmonogramu.
- W dolnej części okna dialogowego wybierz pozycję Zapisz.
Tablica ponownie załaduje zaktualizowaną konfigurację. Komórka zasobów pokazuje, jak zasób jest zgodny z ograniczeniem językowym w panelu filtrów.