Расширение Universal Resource Scheduling с пользовательскими ограничениями ресурсов

Universal Resource Scheduling, лежащий в основе Dynamics 365 Field Service и Project Service Automation, поставляется с широкими возможностями сопоставления ресурсов для резервирования подходящих ресурсов для задания. Хотя решение Universal Resource Scheduling входит в состав Field Service и Project Service, Universal Resource Scheduling также можно использовать для планирования любого рабочего потока в Dynamics 365. В этой статье будет рассмотрено, как реализованы встроенные ограничения на ресурсы и как настраивать Universal Resource Scheduling с пользовательскими ограничениями на ресурсы.

Ресурсы, требования и ограничения

Ресурсы

Ядром для Universal Resource Scheduling является сущность ресурса (bookableresource). Когда записи резервирования (bookableresourcebooking) создаются, они связаны с записью ресурса. Чтобы обеспечить выбор соответствующего ресурса, Universal Resource Scheduling поставляется с большим количеством встроенных фильтров и ограничений, по которым можно задавать категории ресурсов. Примеры следующие: тип ресурса, указывающий, является ли ресурс пользователем, контактом, организацией, оборудованием и т.д., характеристика для фильтрации ресурсов по имеющимся у них навыкам, территория для назначения ресурсов определенным областям, подразделение для моделирования иерархии организации, а также многое другое.

Запись ресурса и связанные ограничения моделируются с помощью атрибутов или отношений с другими сущностями. Например, имя и тип ресурса являются атрибутами в сущности ресурса. Характеристики ресурса и территории ресурса являются дочерними отношениями, поскольку ресурс может быть связан с несколькими из них. Эти сущности являются дочерними отношениями как для сущности ресурса, ТАК И для сущности характеристик/территории. Подразделение является атрибутом подстановки в сущности ресурса для сущности подразделения.

Требования

Важный другой объект в Universal Resource Scheduling — это сущность требования к ресурсам (msdyn_resourcerequirement). Сущность требования записывает требование для выполняемой работы. В ней регистрируются параметры требуемой работы, такие как поля начальной и конечной даты, ограничивающие период, в который можно выполнить работу; поле продолжительности для времени, которое, как ожидается, займет работа; расположение работы, указывающее расположение нужной работы. Сущность требования также принимает ограничения на ресурсы для ограничения того, какие ресурсы могут выполнять эти требования и резервироваться для них. Как и сущность ресурса, ограничения ресурсов выражаются через атрибуты в сущности требования или как отношения с другими сущностями. Территория является атрибутом подстановки из сущности требования для сущности территории, указывающим территорию, на которой должна быть выполнена работа и, следовательно, мы должны найти ресурс из этой территории. Характеристика требования является дочерним отношением, связывающим требование с сущностью характеристики и выражающим навыки, необходимые для завершения задания и, следовательно, требование можно сопоставить только ресурсам с соответствующими навыками.

Ограничения, поставляемые в Universal Resource Scheduling

Ниже приведен список ограничений, которые поставляются с Universal Resource Scheduling:

  • Характеристики — может использоваться для моделирования квалификации ресурса. Он также поддерживает дополнительные значения оценок профессиональности ресурса для каждого навыка
  • Категории — ресурсы можно связать к категориями
  • Территории — назначить ресурсы территориальным регионам
  • Подразделения — моделировать иерархию организации
  • Тип ресурса — указывает тип ресурса
  • Рабочие группы — рабочие группы, в которые входит ресурс
  • Подразделения — подразделение, в которое входит ресурс

Фильтрация в доске расписания

Доска расписания отображает список ресурсов и резервирований, назначенных им. Панель фильтра в доске расписания позволяет отбирать список ресурсов по их ограничениям — например, если выбрать тип ресурса "Пользователь" в раскрывающемся списке типа ресурса, выполняется фильтрация списка ресурсов для отбора тех, которые имеют тип пользователя. Аналогично, можно фильтровать ресурсы путем совпадения характеристик или территорий.

Использование панели фильтров для фильтрации ресурсов — это первый способ обнаружения подходящих ресурсов. Этот способ используется, когда требуется вручную отобразить список ресурсов, соответствующих определенному набору ограничений.

Выявление доступных ресурсов с помощником по расписанию

В нижней части доски расписания можно найти список записей требования. Можно выбрать одну из них и выбрать поиск доступности. Это действие открывает помощник по расписанию. Помощник по расписанию использует ограничения, захваченные на выбранной записи требования, для обнаружения подходящих ресурсов, доступных для резервирования. Только ресурсы, соответствующее ограничениями в требовании и доступные в запрошенный период времени, указанный в требовании, отображаются на доске.

Аналогичное взаимодействие доступно через кнопку ленты "Резервировать", доступную для сущности требования и других резервируемых сущностей в представлениях и формах списка в Dynamics 365. При нажатии кнопки "Резервировать" открывается помощник по расписанию, в котором отображаются ресурсы, соответствующие ограничениями в выбранной записи требования.

В отличие от ранее упомянутого режима доски расписания, в котором используется панель фильтров, чтобы вручную фильтровать ресурсы, в режиме помощника по расписанию панель фильтра автоматически заполняется ограничениями на ресурсы из записи требования и отображаются только соответствующие ресурсы.

Как работает соответствие ограничениям

Сущности ограничений

Некоторые ограничения заданы в качестве атрибутов непосредственно в сущности ресурса, в то время как остальные определяются с помощью отношений. Отношения нужные, когда ограничение ссылается на вторую, основную сущность.

Давайте рассмотрим запись ресурса и связанные с ней ограничения территории и характеристик.

Во-первых, главные записи. Имеются территории, хранящиеся в сущности территорий:

Территория
Нью-Йорк
Нью-Джерси
Сиэтл

Мы также имеем характеристики в сущности характеристик:

Характеристика
Руководитель проекта
Дизайнер
Специалист в области финансов

Сущность "Подразделение":

Подразделение
Contoso US
Contoso EU

В заключение, имеется объект ресурса:

Ресурс Тип ресурса Подразделение
Джордж Галт User Contoso US
Авраам Макормик Контакт Contoso EU

В то время как одна запись ресурса работает для захвата ограничения с одним значением, таким как тип ресурса и подразделение выше. Если мы хотим связать ресурс с несколькими записями территории или характеристик, необходимо использовать третью сущность, отношение "многие-ко-многим" (N:N), чтобы сохранять эти связи.

Мы используем сущность территории ресурса для связывания нескольких территорий для ресурса.

Записи территории ресурса:

Ресурс Территория
Джордж Галт Нью-Йорк
Джордж Галт Нью-Джерси
Авраам Макормик Сиэтл

и сущность характеристик ресурса для хранения нескольких характеристик для ресурса.

Записи характеристик ресурса:

Ресурс Характеристика
Джордж Галт Дизайнер
Авраам Макормик Руководитель проекта
Авраам Макормик Специалист в области финансов

Подобно ресурсу, запись требования фиксирует ограничения с одним значением, а дочерние записи хранят ограничения с несколькими значениями.

Вот сущность требования:

Требование Длительность Территория
Задание 1 1 ч Нью-Йорк
Задание 2 1 ч Сиэтл

Сущность характеристики требования:

Записи характеристик требования:

Требование Характеристика
Задание 1 Дизайнер
Задание 2 Руководитель проекта
Задание 2 Специалист в области финансов

Иногда требование может содержать ограничение, моделируемое как атрибут подстановки, а в ресурсе могут храниться соответствующее атрибуты в таблице N:N. Например, для требования ограничение территории является атрибутом подстановки для сущности территории. Требования фиксирует требования для работы и территорию, в которой работа должна быть выполнена. Запись ресурса, однако, можно связать с несколькими записями территории.

Сумка свойств ограничений

Если пользователь выбирает значения на панели фильтров и выбирает кнопку поиска, значения передаются в API-интерфейс сопоставления ресурсов. Для ограничений с несколькими значениями на панели фильтров отображаются данные из главных сущностей территории и характеристик и включаются выбранные значения в сумку свойств ограничений.

Здесь пример сумки свойства с ограничениями, отправленными в API-интерфейс сопоставления ресурсов:

Имя Value
ResourceType User
Territories Нью-Йорк
Нью-Джерси

Это дает API-интерфейсу сопоставления ресурсов команду на поиск ресурсов типа пользователя, связанных с территориями Нью-Йорка или Нью-Джерси.

В режиме помощника по расписанию ограничения сначала извлекаются из записи требования через API-интерфейс извлечения ограничений требования. Извлеченные ограничения затем заполняются на панели фильтров и отправляются в IPI-интерфейс сопоставления ресурсов.

API-интерфейс извлечения ограничений требования запрашивает запись требования и все связанные дочерние ограничения (например, характеристика требования). Он отвечает с сумкой свойств ограничений, выражая все ограничение ресурсов, захваченные в выбранном требовании.

Вот пример отклика API-интерфейса извлечения ограничений требования:

Имя Value
Requirement Задание 2
Duration 1 ч
Territories Сиэтл
Characteristics Руководитель проекта
Специалист в области финансов

API-интерфейс сопоставления ресурсов получает сумку свойств ограничений в качестве входных данных и запрашивает соответствующие ресурсы. Соответствующие ресурсы затем отображаются в доске расписания или помощнике по расписанию.

Сводка сущностей, используемых для сопоставления ресурсов

  • Примеры главных сущностей
    • Территория — указана как ограничение
    • Характеристика — указана как ограничение
    • Ресурс — назначен для резервирований
    • Территория ресурсов — связывает ресурсы с территориями
    • Характеристика ресурса — связывает ресурсы с характеристикам
  • Примеры транзакционных сущностей
    • Требование — фиксирует запрос на работу и ссылается на территорию
    • Характеристика требования — связывает требования с характеристикам

Сводка потоков сопоставления ресурсов

  • Фильтрация вручную. Панель фильтра > API-интерфейс сопоставления ресурсов

    1. Вручную пользователь добавляет ограничения на панель фильтров
    2. Ограничения отправляются в API-интерфейс сопоставления ресурсов
    3. Отображается отфильтрованный список ресурсов
  • Фильтрация требований. API-интерфейс извлечения ограничений требования > Панель фильтра > API-интерфейс сопоставления ресурсов

    1. Пользователь находит доступность для записи требования (из доски расписания или с помощью кнопки резервирования на ленте).
    2. Ограничения извлекаются с помощью API-интерфейса извлечения ограничений требования и отображаются на панели фильтров.
    3. Ограничения отправляются в API-интерфейс сопоставления ресурсов
    4. Отображается отфильтрованный список ресурсов

Расширение Universal Resource Scheduling с пользовательскими ограничениями

Universal Resource Scheduling можно расширить с пользовательскими ограничениями на ресурсы. Расширяющие ограничения работают таким же образом, как и встроенные в Universal Resource Scheduling, они моделируются как атрибуты и отношения в Dynamics 365.

Пошаговое руководство с примерами кода, необходимого для каждого шага, приведено в Расширение Universal Resource Scheduling: поиск ресурсов по языку — пошаговое руководство

Настраиваемые ограничения

В этом примере мы будем использовать "язык" как пример сценария. Организация хочет фильтровать ресурсы по языку, на котором они говорят. Также они хотят фиксировать в записи требования язык, необходимый для задания. Это ограничение следует такой же схеме, что и встроенное ограничение территории. Новая главная сущность "Язык" хранит разные языки, на которых ресурс может говорить. Запись ресурса можно связать с несколькими языками с помощью сущности отношения "многие-ко-многим". В сущности требования мы создадим два новых атрибута подстановки: Required Language и Secondary Language. При поиске доступных ресурсов для требования будут отображаться только ресурсы, связанные с Required Language или Secondary Language.

Здесь мы опишем настраиваемое ограничение по языку. Во-первых, у нас есть новая сущность языка:

Language
Английский
Испанский

и наша новая дочерняя сущность типа "многие-ко-многим" языка ресурса:

Ресурс Language
Джордж Галт Английский
Авраам Макормик Английский
Авраам Макормик Испанский

Вот сущность требования с нашими двумя новыми атрибутами, требуемый язык и дополнительный язык, представляющая языки, на которых должен говорить ресурс, чтобы соответствовать данному запросу.

Требование Длительность Территория Требуемый язык Дополнительный язык
Задание 1 1 ч Нью-Йорк Английский ---
Задание 2 1 ч Сиэтл Испанский Английский

Точки расширяемости

На основе потоков сопоставления ресурсов, описываемых выше, это точки расширяемости, которые требуется изменить, чтобы наши настраиваемые ограничения работали.

  1. API-интерфейс извлечения ограничений требования

    API-интерфейс должен считывать наши новые атрибуты требуемого языка и дополнительного языка, чтобы когда пользователь ищет доступность для требования, извлекались наши новые ограничения.

  2. Панель фильтров

    Пользователь должен иметь возможность выбрать из списка записей языка на панели фильтров для фильтрации соответствующих ресурсов. При обнаружении доступности для требования панель фильтров должна отображать требуемый язык и дополнительный язык из записи требования, предварительно выбранные в списке языков.

  3. API-интерфейс сопоставления ресурсов

    Этот API-интерфейс будет получать новые ограничения языка в качестве входных данных; но должен возвращать только ресурсы, говорящие на выбранных языках.

Расширяемые запросы

Внутри API-интерфейс извлечения ограничений требования (№1 выше) и API-интерфейс сопоставления ресурсов (№3 выше) используют язык FetchXML для запроса данных из Dynamics 365. API-интерфейс извлечения ограничений требования выдает несколько запросов для извлечения записи требования и ее дочерних ограничений (например, характеристики требования и т. п.). API-интерфейс сопоставления ресурсов на основе ограничений ресурсов, переданных в него в качестве входных данных, будет динамически создавать правильный запрос FetchXML, чтобы только записи ресурсов, соответствующие указанным критериям FetchXML, возвращались из Dynamics 365.

В обновлении Universal Resource Scheduling за июль 2017 для поддержки расширяемого сопоставления ресурсов был введен язык Universal FetchXML (UFX). В UFX по сравнению с FetchXML добавлены две новые возможности: 1) Наборы нескольких результатов, когда один запрос UFX может возвращать результаты из нескольких сущностей, и 2) Динамический FetchXML, когда запрос UFX может динамически создавать FetchXML на основе входных данных.

С UFX один запрос можно сформировать для запроса записи требования и всех ее дочерних записей. API-интерфейс извлечения ограничений требования выполняет настраиваемый запрос UFX, чтобы извлечь требование и его дочерние ограничения. Запрос может быть настроен для извлечения также и настраиваемых записей ограничения.

Сумка свойств ограничений, возвращенная из API-интерфейса извлечения ограничений требования, передается в качестве входных данных в API-интерфейс сопоставления ресурсов. API-интерфейс выполняет настраиваемый запрос UFX. С UFX запрос использует входящие ограничения для динамического формирования правильного запроса на языке FetchXML для обнаружения подходящих ресурсов. Этот запрос UFX тоже можно изменить для формирования правильного запроса FetchXML, чтобы он возвращал только ресурсы, соответствующие настраиваемым ограничениям.

Расширяемый макет фильтра и шаблон ресурса

В обновлении Universal Resource Scheduling за июль 2017 года панель фильтров (№2 выше) была обновлена для поддержки настройки через определение макета XML. Новый макет поддерживает элементы управления раскрывающегося списка для отображения списка записей из главных сущностей и типичных элементов управления number, datetime и checkbox. Макет можно изменить, чтобы пользователи могли выбирать записи из сущностей настраиваемых ограничений. Настраиваемые ограничения, как и ограничения из комплекта поставки Universal Resource Scheduling, затем передаются как входные данные в API-интерфейс сопоставления ресурсов.

Другая точка расширяемости со стороны клиента, которая стала доступна в обновлении за июль 2017 г., это ячейка ресурса. Ячейка ресурса отображается через настраиваемый шаблон Handlebars.js. Результаты из API-интерфейса сопоставления ресурсов доступны шаблону. Следовательно, настроив запрос, выполняемый API-интерфейсом сопоставления ресурсов, можно отображать настраиваемые данные в ячейке ресурса.

Пошаговое руководство с примерами кода, необходимого для каждого шага, приведено в Расширение Universal Resource Scheduling: поиск ресурсов по языку — пошаговое руководство

Дополнительные примечания

  • Макет фильтра в настоящее время не настраивается, когда планируемая сущность использует связанную группу требований вместо требования ресурсов.

См. также

Универсальный язык FetchXML

Заметки о выпуске расширяемости Universal Resource Scheduling