Étendre Universal Resource Scheduling avec des contraintes de ressource personnalisées
Universal Resource Scheduling, le moteur de planification sous-jacent de Dynamics 365 Field Service et de Project Service Automation, est fourni avec des fonctionnalités étendues de mise en correspondance des ressources pour réserver les bonnes ressources pour une tâche. Comme la solution Universal Resource Scheduling est fournie avec Field Service et Project service, Universal Resource Scheduling peut également être utilisée pour la planification de flux de travail dans Dynamics 365. Cet article nous allons examiner la façon dont les contraintes de ressources intégrées sont mises en œuvre et la manière de personnaliser Universal Resource Scheduling avec les contraintes de ressources personnalisées.
Ressources, besoins et contraintes
Ressources
Le cœur de Universal Resource Scheduling est l’entité (bookableresource
) Ressource. Lorsque des enregistrements (bookableresourcebooking
) de ressources sont créés, ils sont associés à un enregistrement de ressource. Pour garantir que la ressource correcte est sélectionnée, Universal Resource Scheduling est livré avec de nombreux filtres et contraintes intégrés permettant de classer les ressources. Par exemple : le type de ressource, indiquant si la ressource est un utilisateur, un contact, un compte, un équipement, etc. ; les caractéristiques, pour filtrer les ressources en fonction des qualifications dans lesquelles elles sont performantes ; le secteur de vente, pour affecter les ressources à des régions spécifiques ; l’unité d’organisation, pour modéliser une hiérarchie d’organisations, et bien plus encore.
Un enregistrement de ressource et ses contraintes connexes sont modelés via des attributs ou des relations à d’autres entités. Par exemple, le nom et le type de ressource sont des attributs de l’entité Ressource. Les caractéristiques des ressources et les secteurs de vente des ressources sont des relations enfants, puisqu’une ressource peut être associée à plusieurs d’entre eux. Ces entités sont des relations enfants à l’entité Ressource ET à l’entité Caractéristiques/Secteur de vente. L’Unité d’organisation est un attribut de recherche sur l’entité Ressource de l’entité Unité d’organisation.
Configuration requise
Une autre entité importante dans Universal Resource Scheduling est l’entité Besoin en ressources (msdyn_resourcerequirement
). L’entité Besoin enregistre un besoin pour que le travail soit effectué. Elle capture des paramètres sur le travail exigé, tels que les champs de date Du et Au, restreignant la période de temps pendant laquelle le travail peut être effectué ; le champ Durée indique combien de temps la tâche doit prendre ; l’Emplacement de travail indique lieu du travail requis. L’entité Besoin capture également les contraintes de ressources pour limiter les ressources pouvant exécuter ce travail et être réservées pour ce besoin. Comme l’entité Ressource, les contraintes de ressource sont exprimées comme attributs sur l’entité Besoin ou en tant que relations à d’autres entités. Le Secteur de vente est un attribut de recherche de l’entité Besoin dans l’entité Secteur de vente, indiquant le secteur de vente dans lequel le travail pour doit être effectué et, par conséquent, nous devons rechercher une ressource dans le même secteur de vente. Les Caractéristiques du besoin sont une relation enfant associant l’entité Besoin à l’entité Caractéristiques, exprimant les compétences requises pour exécuter la tâche et, par conséquent, le besoin peut être mis en correspondance uniquement avec les ressources ayant des compétences correspondantes.
Contraintes livrées avec Universal Resource Scheduling
Voici la liste des contraintes fournies avec Universal Resource Scheduling :
- Caractéristiques : peuvent être utilisées pour modéliser les qualifications dont dispose une ressource. Elle prend également en charge des valeurs facultatives d’évaluation pour noter les performances d’une ressource dans chaque compétence
- Catégories : les ressources peuvent être associées aux catégories
- Secteurs de vente : pour attribuer des ressources à des régions de secteurs de vente
- Unités d’organisation : pour modéliser une hiérarchie d’organisations
- Type de ressource : définit le type de ressource
- Équipes : les équipes dont une ressource est membre
- Divisions : la division à laquelle la ressource appartient
Filtrage dans le tableau de planification
Le tableau de planification affiche une liste des ressources et les réservations qui leur sont attribuées. Le volet Filtre dans le tableau de planification vous permet de filtrer la liste des ressources selon leurs contraintes. Par exemple la sélection d’un type de ressource Utilisateur dans la liste déroulante Type de ressource filtre la liste des ressources en fonction de celles qui sont de type Utilisateur. De même, vous pouvez filtrer les ressources en faisant correspondre des caractéristiques ou des secteurs de vente.
L’utilisation du volet Filtre pour filtrer les ressources est une méthode permettant de rechercher des ressources correspondantes. Cette méthode est utilisée lorsque vous souhaitez afficher manuellement une liste de ressources correspondant à un ensemble spécifique de contraintes.
Recherche de ressources disponibles avec l’Assistant Planifier
Au bas du tableau de planification, vous trouverez une liste d’enregistrements de Besoin. Vous pouvez sélectionner l’un d’entre eux et choisir de rechercher une disponibilité. Cette action ouvre l’Assistant Planifier. L’Assistant Planifier utilise les contraintes recueillies sur les enregistrements de Besoins sélectionnés pour trouver des ressources correspondantes disponibles pour la réservation. Seules les ressources correspondant aux contraintes sur le Besoin et disponibles à la période demandée spécifiée sous le Besoin s’affichent dans le tableau.
Une expérience similaire est disponible via un bouton du ruban « Réserver » disponible sur l’entité Besoin et d’autres entités planifiables dans les vus de listes ou les formulaires Dynamics 365. Lorsque « Réservé » est sélectionné, l’Assistant Planifier est ouvert et affiche les ressources correspondant aux contraintes de l’enregistrement Besoin sélectionné.
À la différence du mode de tableau de planification mentionné précédemment, où vous utilisez le volet Filtre pour filtrer manuellement des ressources, au mode d’Assistant Planifier, le volet Filtre renseigne automatiquement les contraintes de la ressource depuis l’enregistrement Besoin et seules les ressources correspondantes sont affichées.
Fonctionnement de la mise en correspondance des contraintes
Entités de contraintes
Certaines contraintes sont spécifiées comme attributs directement sur l’entité Ressource, tandis que d’autres sont définies par l’intermédiaire des relations. Les relations sont nécessaires lorsqu’une contrainte fait référence à une seconde entité principale.
Prenons l’exemple d’un enregistrement Ressource et de ses contraintes Secteur de vente et Caractéristiques connexes.
D’abord, les enregistrements principaux. Nous avons des secteurs de vente stockés dans l’entité Secteur de vente :
Secteur de vente |
---|
New York |
New Jersey |
Toulouse |
Nous avons également des caractéristiques dans l’entité Caractéristiques :
Caractéristique |
---|
Responsable du projet |
Concepteur |
Analyste financier |
Entité Unité d’organisation :
Unité d’organisation |
---|
Contoso US |
Contoso UE |
Enfin, nous avons l’entité Ressource :
Ressource | Type de ressource | Unité d’organisation |
---|---|---|
Jorge Galt | Utilisateur | Contoso US |
Abraham McCormick | Contact | Contoso UE |
Bien qu’un seul enregistrement Ressource suffise pour capturer des contraintes à valeur unique, telles que Type de ressource et Unité d’organisation ci-dessus. Si nous souhaitons associer une Ressource à plusieurs enregistrements de Secteur de vente ou Caractéristiques, nous devons utiliser une troisième entité, une relation plusieurs à plusieurs (N:N), pour stocker ces associations.
Nous utilisons l’entité Secteur de vente de la Ressource pour associer plusieurs secteurs de vente pour une ressource.
Enregistrements de Secteur de vente des ressources :
Ressource | Secteur de vente |
---|---|
Jorge Galt | New York |
Jorge Galt | New Jersey |
Abraham McCormick | Toulouse |
et l’entité Caractéristiques de la Ressource pour stocker plusieurs caractéristiques pour une ressource.
Enregistrements des caractéristique des ressources :
Ressource | Caractéristique |
---|---|
Jorge Galt | Concepteur |
Abraham McCormick | Responsable du projet |
Abraham McCormick | Analyste financier |
Comme pour la Ressource, un enregistrement du Besoin capture des contraintes à valeur unique et les enregistrements enfants stockent les contraintes à valeurs multiples.
Voici l’entité Besoin :
Condition requise | Durée | Secteur de vente |
---|---|---|
Tâche 1 | 1 h | New York |
Tâche 2 | 1 h | Toulouse |
Entité Caractéristiques du besoin :
Enregistrements des caractéristique du besoin :
Condition requise | Caractéristique |
---|---|
Tâche 1 | Concepteur |
Tâche 2 | Responsable du projet |
Tâche 2 | Analyste financier |
Parfois, le besoin peut avoir une contrainte modélisée en tant qu’attribut de recherche, tandis que la ressource peut stocker les attributs correspondants dans la table N:N. Par exemple, pour le Besoin, la contrainte Secteur de vente est un attribut de recherche de l’entité Secteur de vente. Un Besoin capture une demande de travail et le secteur de vente où le travail sera effectué. Un enregistrement de ressource, toutefois, peut être associé à plusieurs enregistrements de secteurs de vente.
Conteneurs de propriétés de contraintes
Lorsque l’utilisateur sélectionne des valeurs dans le volet Filtrer et sélectionne le bouton Rechercher, les valeurs sont envoyées à l’API de mise en correspondance des ressources. Pour les contraintes à valeurs multiples, le volet Filtre affiche les données des principales entités Secteur de vente et Caractéristiques, et inclut les valeurs sélectionnées dans le conteneurs de propriétés des contraintes.
Voici un exemple de conteneurs de propriétés avec des contraintes envoyées à l’API de mise en correspondance des ressources :
Nom | Value |
---|---|
ResourceType |
Utilisateur |
Territories |
New York New Jersey |
Cela indique à l’API de mise en correspondance des ressources de rechercher des ressources de type Utilisateur associées aux secteurs de vente de New York ou du New Jersey.
Lorsque dans l’Assistant Planifier, les contraintes sont d’abord sont extraites d’un enregistrement du Besoin à l’aide de l’API Récupérer les contraintes du besoin. Les contraintes récupérées sont ensuite préremplies dans le volet Filtre et envoyées à l’API de mise en correspondance des ressources.
L’API Récupérer les contraintes du besoin interroge l’enregistrement du Besoin et toutes les contraintes enfants associées (par exemple, les Caractéristiques du besoin). Elle répond par un conteneur de propriétés de contraintes exprimant toutes les contraintes de ressource recueillies sur le Besoin sélectionné.
Voici un exemple de réponse de l’API Récupérer les contraintes du besoin :
Nom | Value |
---|---|
Requirement |
Tâche 2 |
Duration |
1 h |
Territories |
Toulouse |
Characteristics |
Responsable du projet Analyste financier |
L’API de mise en correspondance des ressources reçoit le conteneur de propriétés des contraintes comme entrée et recherche des ressources correspondantes. Les ressources correspondantes sont alors affichées dans le Tableau de planification ou l’Assistant Planifier.
Synthèse des entités utilisées pour la mise en correspondance des ressources
- Exemples d’entités principales
- Secteur de vente - référencé comme contrainte
- Caractéristiques - référencées comme contrainte
- Ressource - affectée aux réservations
- Secteur de vente de la ressource - associe les ressources aux secteurs de vente
- Caractéristiques de la ressource - associe les ressources aux caractéristiques
- Exemples d’entités transactionnelles
- Besoin - capture une demande de travail et référence le secteur de vente
- Caractéristiques du besoin - associe les besoins aux caractéristiques
Synthèse des flux de mise en correspondance de la ressource
Filtrage manuel. Volet Filtre > API de mise en correspondance des ressources
- Un utilisateur ajoute manuellement des contraintes dans le volet Filtre
- Les contraintes sont envoyées à l’API de mise en correspondance des ressources
- La liste des ressources filtrées s’affiche
Filtrage du besoin. API Récupérer les contraintes du besoin > Volet Filtrer > API de mise en correspondance des ressources
- Un utilisateur trouve une disponibilité pour un enregistrement Besoin (dans le tableau de planification ou avec le bouton Réserver du ruban).
- Les contraintes sont récupérées via l’API Récupérer les contraintes du besoin et affichées dans le volet Filtre.
- Les contraintes sont envoyées à l’API de mise en correspondance des ressources
- La liste des ressources filtrées s’affiche
Extension de Universal Resource Scheduling avec des contraintes personnalisées
Universal Resource Scheduling peut être étendu avec des contraintes de ressource personnalisées. L’extension des contraintes fonctionne de la même manière que celles intégrées à Universal Resource Scheduling, elles sont modélisées comme des attributs et des relations dans Dynamics 365.
Un guide pas à pas avec des exemples de code requis pour chaque étape est décrit dans Extension de Universal Resource Scheduling : Rechercher des ressources par langue - Guide pas à pas
Contraintes personnalisées
Nous utiliserons « langue » comme exemple de scénario. Une organisation souhaite filtrer des ressources en fonction de la langue qu’elles parlent. Elle veut également capturer sur l’enregistrement du Besoin la langue requise pour une tâche. Cette contrainte suit un schéma similaire à celui de la contrainte de secteurs de vente intégrée. Une nouvelle entité principale Langue stocke les différentes langues qu’une ressource peut parler. Un enregistrement de ressource peut être associé à plusieurs langues via une entité de relations plusieurs à plusieurs. Sous l’entité Besoin, nous allons créer deux nouveaux attributs de recherche : Required Language
et Secondary Language
. Lors de la recherche de ressources disponibles pour un besoin, seules les ressources associées à Required Language
ou à Secondary Language
seront affichées.
Ici, nous allons décrire la contrainte de langue personnalisée. D’abord, nous avons notre nouvelle entité Langue :
Langue |
---|
Anglais |
Espagnol |
et notre nouvelle entité enfant plusieurs à plusieurs Langue de la ressource :
Ressource | Langue |
---|---|
Jorge Galt | Anglais |
Abraham McCormick | Anglais |
Abraham McCormick | Espagnol |
Voici l’entité Besoin avec nos deux nouveaux attributs, Langue requise et Langue secondaire, représentant les langues que la ressource doit parler pour être mise en correspondance avec ce besoin :
Condition requise | Durée | Secteur de vente | Langue requise | Langue secondaire |
---|---|---|---|---|
Tâche 1 | 1 h | New York | Anglais | --- |
Tâche 2 | 1 h | Toulouse | Espagnol | Anglais |
Points d’extensibilité
Selon les flux de correspondance des ressources décrits ci-dessus, il s’agit des points d’extensibilité à modifier pour que nos contraintes personnalisées fonctionnent :
API Récupérer les contraintes du besoin
L’API doit lire nos nouveaux attributs Langue requise et Langue secondaires afin que lorsqu’un utilisateur trouve de la disponibilité pour un Besoin, nos nouvelles contraintes soient récupérés.
Volet Filtrer
Un utilisateur doit pouvoir sélectionner dans une liste d’enregistrements Langue du volet Filtre pour filtrer les ressources correspondantes. Lors de la recherche de disponibilité pour un Besoin, le volet Filtre doit afficher la Langue requise et la Langue secondaire de l’enregistrement du besoin pré-sélectionné dans la liste des langues.
API de mise en correspondance des ressources
L’API obtient comme entrée les nouvelles contraintes de langue ; elle doit retourner uniquement les ressources parlant les langues sélectionnées.
Requêtes extensibles
En interne, l’API Récupérer les contraintes du besoin (n°1 ci-dessus) et l’API de mise en correspondance des ressources (n°3 ci-dessus) utilisent FetchXML pour interroger les données dans Dynamics 365. L’API Récupérer les contraintes du besoin émet plusieurs requêtes pour récupérer l’enregistrement du besoin et ses contraintes enfants (par exemple, les caractéristiques du besoin, etc.). L’API de mise en correspondance des ressources, selon les contraintes de ressources qui lui sont transmises comme entrées, crée dynamiquement la requête FetchXML correcte afin que seuls les enregistrements de ressources correspondant aux critères FetchXML spécifiés sont retournés par Dynamics 365.
Dans la mise à jour de juillet 2017 de Universal Resource Scheduling, pour prendre en charge la mise en correspondance extensible des ressources, Universal FetchXML (UFX) a été introduit. Deux fonctionnalités importantes ajoutées par UFX à FetchXML sont : 1) Plusieurs ensembles de résultats, une simple requête UFX peut renvoyer des résultats de plusieurs entités, et 2) FetchXML dynamique, une requête UFX peut créer dynamiquement FetchXML selon les données entrées.
Avec UFX, une requête simple peut être créée pour interroger un enregistrement de besoin et tous ses enregistrements enfants. L’API Récupérer les contraintes du besoin exécute une requête UFX personnalisable pour récupérer un Besoin et ses contraintes enfants. La requête peut être personnalisée pour récupérer des enregistrements de contraintes personnalisées également.
Le conteneur de propriétés des contraintes renvoyé par l’API Récupérer les contraintes du besoin est transmis comme entrée à l’API de mise en correspondance des ressources. L’API exécute une requête UFX personnalisable. Avec UFX, la requête utilise les contraintes d’entrée pour créer dynamiquement le FetchXML approprié pour rechercher des ressources correspondantes. Cette requête UFX, aussi, peut être modifiée pour créer le FetchXML approprié pour retourner uniquement les ressources correspondant aux contraintes personnalisées.
Disposition de filtre extensible et modèle de ressource
Dans la mise à jour de juillet 2017 de Universal Resource Scheduling, le volet Filtre (n°2 ci-dessus) a été mis à jour pour prendre en charge la personnalisation via une définition de disposition XML. La nouvelle disposition prend en charge les contrôles de liste déroulante pour afficher une liste d’enregistrements provenant des entités principales et les contrôles classiques number
, datetime
et checkbox
. La disposition peut être modifiée pour permettre aux utilisateurs de sélectionner des enregistrements dans les entités de contraintes personnalisées. Les contraintes personnalisées, comme celles livrées avec Universal Resource Scheduling, sont alors transmises comme des entrées à l’API de mise en correspondance des ressources.
Un autre point d’extensibilité côté client rendu disponible dans la mise à jour de juillet 2017 est la cellule de ressource. La cellule de ressource est affichée par le biais d’un modèle Handlebars.js personnalisable. Les résultats de l’API de mise en correspondance des ressources sont rendus disponibles dans le modèle. Par conséquent, en personnalisant la requête exécutée par l’API de mise en correspondance des ressources, les données personnalisées peuvent être affichées dans la cellule de ressource.
Un guide pas à pas avec des exemples de code requis pour chaque étape est décrit dans Extension de Universal Resource Scheduling : Rechercher des ressources par langue - Guide pas à pas
Notes supplémentaires
- La disposition du filtre n’est actuellement pas configurable lorsqu’une entité planifiable utilise un groupe de besoins associé au lieu d’un besoin en ressources.
Voir aussi
Notes de publication sur l’extensibilité de Universal Resource Scheduling