Personalización de la coincidencia de recursos en Universal Resource Scheduling

Programación de recursos universal le permite hacer coincidir los recursos para reservar los adecuados para un trabajo. También programa cualquier secuencia de trabajo en Dynamics 365. En este artículo se explica cómo funcionan las restricciones de recursos integradas y cómo personalizar la programación de recursos universales con restricciones personalizadas.

Recursos, requisitos y restricciones

Recursos

El núcleo de Programación de recursos universal es la entidad Resource (bookableresource). Cuando se crean registros de Booking (bookableresourcebooking), están asociados a un registro de recursos. La programación de recursos universales incluye muchos filtros y restricciones integrados para ayudarle a seleccionar el recurso correcto. Por ejemplo:

  • Tipo de recurso para indicar si el recurso es un usuario, contacto, cuenta o equipo
  • Característica para filtrar los recursos por aptitudes en las que son expertos
  • Territorio para asignar recursos a regiones específicas
  • Organizativo Unidad para modelar una jerarquía de la organización

Un registro de recursos y sus restricciones asociadas se modelan mediante atributos o relaciones con otras entidades. Por ejemplo, el nombre y el tipo de recurso son atributos en la entidad Resource . Características del recurso y Territorios del recurso son relaciones secundarias, ya que un recurso puede asociarse con más de uno de ellos. Estas entidades son relaciones hijas tanto de la entidad Resource como de la entidad Characteristic/Territory. La unidad organizativa es un atributo de búsqueda de la entidad Resource hacia la entidad Unidad organizativa.

Requisitos

Otra entidad importante en la Programación Universal de Recursos es la entidad Requisito de Recursos (msdyn_resourcerequirement). La entidad Requisito registra un requisito para que se realice el trabajo. Captura parámetros sobre el trabajo solicitado. Por ejemplo:

  • Los campos From y To date restringen el período de tiempo cuando se puede realizar el trabajo.
  • El campo Duración indica cuánto tiempo se espera que tarde el trabajo.
  • El campo Ubicación del trabajo indica la ubicación del trabajo necesario.

La entidad Requirement captura las restricciones de recursos para limitar qué recursos pueden cumplir y reservar este requisito. Al igual que la entidad Resource , las restricciones de recursos se expresan como atributos en la entidad Requisito o como relaciones con otras entidades. Territory es un atributo de búsqueda de la entidad Requirement a la entidad Territory que indica el territorio en el que se va a realizar el trabajo y, por lo tanto, debemos encontrar un recurso del mismo territorio. La característica de requisito es una relación secundaria relacionada con el requisito de la entidad Característica que expresa las aptitudes necesarias para completar el trabajo. Por lo tanto, el requisito solo puede coincidir con los recursos con aptitudes coincidentes.

Restricciones incluidas en Programación de recursos universal

La programación de recursos universales incluye las siguientes restricciones:

  • Características: represente las aptitudes que tiene un recurso, con valores de clasificación opcionales para indicar el nivel de característica de un recurso.
  • Categorías: definir agrupaciones para asociarse a recursos
  • Territorios: especifique las regiones geográficas de un recurso.
  • Unidades organizativas: reflejar la jerarquía de la organización
  • Tipo de recurso: identifica la clasificación de un recurso.
  • Teams: identificación de los equipos a los que pertenece un recurso
  • Unidades de negocio: mostrar de qué unidad de negocio forma parte el recurso

Filtros del Panel de programación

El Tablero de programación lista los recursos y sus reservas asignadas. Use el panel Filtro para filtrar los recursos por sus restricciones. Por ejemplo, seleccione un tipo de recurso User para filtrar la lista de recursos a los usuarios. Del mismo modo, puede filtrar los recursos por características o territorios coincidentes.

Use el panel Filtro para mostrar manualmente los recursos que coinciden con restricciones específicas.

Búsqueda de recursos disponibles con el Asistente para programación

En la parte inferior del Tablero de programación se muestra una lista de registros de requisitos. Puedes seleccionar uno de ellos y elegir buscar disponibilidad. Esta acción abre el Asistente de programación. Schedule Assistant usa restricciones del requisito seleccionado para buscar los recursos coincidentes disponibles. Solo los recursos que coinciden con las restricciones del requisito y que están disponibles en el período de tiempo solicitado especificado en el requisito se muestran en el panel.

Existe una experiencia similar disponible al seleccionar Reservar en la entidad Requisito y otras entidades de programación en los formularios o vistas de lista de Dynamics 365. Se abre el Asistente de programación, mostrando los recursos que coinciden con las restricciones del registro de requisitos seleccionado.

A diferencia del Panel de programación en el que se usa el panel Filtro para filtrar manualmente los recursos, schedule Assistant rellena automáticamente el panel Filtro con las restricciones de recursos del registro de requisitos. Por lo tanto, solo se muestran los recursos coincidentes.

Cómo funciona la coincidencia de restricciones

Entidades con restricciones

Algunas restricciones se especifican como atributos directamente en la entidad Resource , mientras que otras se definen mediante relaciones. Las relaciones son necesarias cuando una restricción hace referencia a una segunda entidad maestra.

Vamos a considerar un registro de recursos y sus restricciones de territorio y características asociadas.

Primero, las grabaciones maestras. Tenemos territorios almacenados en la entidad Territory :

  • Nueva York
  • Nueva Jersey
  • Seattle

También tenemos características en la entidad Característica :

  • Jefe de proyecto

  • Diseñador

  • Analista Financiero

  • Contoso US

  • Contoso EU

Tenemos la entidad Resource :

Recurso Tipo de recurso Unidad organizativa
Jorge Galt Usuario Contoso US
Abraham McCormick Contacto Contoso UE

Aunque un único registro de recursos funciona para capturar restricciones de un solo valor, como el tipo de recurso y la unidad organizativa. Si queremos asociar un recurso a varios registros de territorio o características, debemos usar una tercera entidad, una relación de varios a varios (N:N), para almacenar estas asociaciones.

Usamos la entidad Territorio de recursos para asociar varios territorios para un recurso.

Registros de zona de recurso:

Recurso Territorio
Jorge Galt Nueva York
Jorge Galt Nueva Jersey
Abraham McCormick Seattle

Entidad de Característica de Recurso para almacenar varias características de un recurso.

Registros de características de recursos:

Recurso Característica
Jorge Galt Diseñador
Abraham McCormick Jefe de proyecto
Abraham McCormick Analista Financiero

De forma similar al recurso, un registro de requisitos captura restricciones de un solo valor y los registros secundarios almacenan restricciones multivalor.

La entidad Requisito:

Requisito Duración Territorio
Trabajo 1 1 h Nueva York
Trabajo 2 1 h Seattle

La entidad Característica del Requisito:

Registros de características de los requisitos

Requisito Característica
Trabajo 1 Diseñador
Trabajo 2 Jefe de proyecto
Trabajo 2 Analista Financiero

A veces, un requisito tiene una restricción como atributo de búsqueda, mientras que el recurso almacena los atributos coincidentes en la tabla N:N. Por ejemplo, para el requerimiento, la restricción del territorio sirve como un atributo de búsqueda para la entidad Territory. Un requisito captura una demanda de trabajo y el territorio donde está el trabajo. Sin embargo, un registro de recursos se puede asociar a muchos registros de territorio.

Contenedores de propiedad con restricciones

Cuando el usuario selecciona valores en el panel Filtro y selecciona Buscar, los valores se envían a la API de coincidencia de recursos. Para las restricciones multivalor, el panel Filtro muestra los datos de las entidades maestras Territory y Characteristic e incluye los valores seleccionados en el contenedor de propiedades constraints.

Este es un contenedor de propiedades de ejemplo con restricciones enviadas a la API de coincidencia de recursos:

Nombre Importancia
ResourceType Usuario
Territories Nueva York
Nueva Jersey

Las restricciones indican a la API de coincidencia de recursos encontrar recursos de tipo Usuario asociados a los territorios de Nueva York o Nueva Jersey.

Cuando se encuentra en el Asistente de programación, las restricciones se recuperan por primera vez desde un registro de requisito a través de la API de recuperación de restricciones de requisitos. Las restricciones recuperadas se rellenan previamente en el panel Filtro y se envían a la API de coincidencia de recursos.

La API de recuperación de restricciones de requisitos consulta al registro de requisito y a todas las restricciones secundarias relacionadas (por ejemplo, característica de requisito). Responde con un conjunto de propiedades de restricciones que expresa todas las limitaciones de recursos registradas en el requisito seleccionado.

A continuación, se muestra un ejemplo de respuesta de la API de recuperación de restricciones de requisitos:

Nombre Importancia
Requirement Trabajo 2
Duration 1 h
Territories Seattle
Characteristics Jefe de proyecto
Analista Financiero

La API de coincidencia de recursos recibe como entrada la bolsa de propiedades de restricciones y realiza consultas que buscan recursos coincidentes. A continuación, los recursos coincidentes se muestran en el tablero de programación o en el Asistente de programación.

Entidades usadas para el resumen de coincidencia de recursos

  • Entidades maestras de ejemplo
    • Territorio: se hace referencia como una restricción
    • Característica: se hace referencia como una restricción
    • Recurso - Asignado a reservas
    • Territorio de recursos: asocia recursos a territorios
    • Característica de recurso: asocia recursos a características
  • Entidades transaccionales de ejemplo
    • Requisito: capta una demanda de trabajo y hace referencia al territorio
    • Característica de requisito: asocia requisitos a características

Resumen de flujos de coincidencia de recursos

  • Filtrado manual. Panel de filtro > API de coincidencia de recursos

    1. Un usuario añade restricciones manualmente en el panel Filtro
    2. Las restricciones se envían a la API de coincidencia de recursos
    3. Se muestra la lista filtrada de recursos
  • Filtrado de requisitos. API de recuperación de restricciones de requisitos > Panel de filtro > API de correspondencia de recursos

    1. Un usuario busca la disponibilidad de un registro de requisito (desde el tablero de programación o desde el botón Reservar en la cinta de opciones).
    2. Las restricciones se recuperan a través de la API Retrieve Requirement Constraints y se muestran en el panel Filtro.
    3. Las restricciones se envían a la API de coincidencia de recursos
    4. Se muestra la lista filtrada de recursos

Extensión de la Programación Universal de Recursos con restricciones personalizadas

La programación universal de recursos se puede ampliar con restricciones de recursos personalizadas. Las restricciones de extensión funcionan de la misma manera que las integradas en Universal Resource Scheduling, se modelan como atributos y relaciones en Dynamics 365.

En Ampliación de Universal Resource Scheduling: Buscar recursos por idioma: una guía paso a paso con ejemplos de código necesarios para cada paso

Restricciones personalizadas

Usaremos "idioma" como escenario de ejemplo. Una organización quiere filtrar los recursos por el idioma que habla. También quieren capturar en el registro de requisitos el idioma requerido para un trabajo. Esta restricción sigue un patrón similar a la restricción de territorio incorporada. Una nueva entidad maestra Language almacena los diferentes idiomas que puede hablar un recurso. Es posible asociar un registro de recursos a varios idiomas a través de una entidad de relaciones de varios a varios. En la entidad Requisito, crearemos dos nuevos atributos de búsqueda: Required Language y Secondary Language. Al buscar recursos disponibles para un requisito, solo se mostrarán los recursos asociados con el Required Language o el Secondary Language.

Aquí, describiremos la restricción de lenguaje personalizado. En primer lugar, tenemos nuestra nueva entidad de Lenguaje.

Lenguaje
Inglés
Español

La entidad secundaria de varios a varios del idioma del recurso:

Recurso Lenguaje
Jorge Galt Inglés
Abraham McCormick Inglés
Abraham McCormick Español

Esta es la entidad Requisito con nuestros dos nuevos atributos, Idioma requerido e Idioma secundario, que representan los idiomas que el recurso debe hablar para que coincida con este requisito:

Requisito Duración Territorio Idioma requerido Lengua secundaria
Trabajo 1 1 h Nueva York Inglés ---
Trabajo 2 1 h Seattle Español Inglés

Puntos de extensibilidad

En función de los flujos de coincidencia de recursos, es necesario modificar estos puntos de extensibilidad para que funcionen nuestras restricciones personalizadas:

  1. API de recuperación de restricciones de requisitos

    La API lee los nuevos atributos de idioma y idioma secundario necesarios para recuperar restricciones cuando un usuario encuentra disponibilidad para un requisito.

  2. Panel de filtros

    Un usuario puede seleccionar una lista de registros de idioma en el panel Filtro para filtrar los recursos coincidentes. Al buscar disponibilidad para un requisito, el panel Filtro muestra el idioma necesario y el idioma secundario del registro de requisitos preseleccionado en la lista de idiomas.

  3. API de coincidencia de recursos

    La API recibe las nuevas restricciones de idioma como entrada y devuelve solo los recursos que hablan los idiomas seleccionados.

Consultas ampliables

Internamente, la API de recuperación de restricciones de requisitos y la API de coincidencia de recursos usan FetchXML para consultar datos de Dynamics 365. La API de recuperación de restricciones de requisitos emite varias consultas para recuperar el registro de requisito y sus restricciones secundarias, como la característica de requisito. La API de coincidencia de recursos, basada en las restricciones de recursos que se le pasan como entrada, construye dinámicamente la consulta FetchXML correcta para que solo se devuelvan registros de recursos que coincidan con los criterios FetchXML especificados de Dynamics 365.

Universal FetchXML (UFX) admite la coincidencia extensible de recursos. Dos características importantes que UFX agrega a FetchXML son:

  • Varios conjuntos de resultados, una única consulta UFX puede devolver resultados de varias entidades.
  • FetchXML dinámico, una consulta UFX puede construir dinámicamente FetchXML en función de los datos de entrada.

Con UFX, se puede construir una sola consulta para consultar un registro de requisitos y todos sus registros secundarios. La API Retrieve Requirement Constraints ejecuta una consulta UFX personalizable para recuperar un requisito y sus restricciones secundarias. La consulta también se puede personalizar para recuperar registros de restricción personalizados.

El contenedor de propiedades de restricciones devuelto de la API de recuperación de restricciones de requisitos se pasa como entrada a la API de coincidencia de recursos. La API ejecuta una consulta UFX personalizable. Con UFX, la consulta usa las restricciones de entrada para construir dinámicamente el FetchXML correcto para encontrar recursos coincidentes. Esta consulta UFX también se puede modificar para construir el FetchXML adecuado para devolver solo los recursos que coincidan con las restricciones personalizadas.

Diseño de filtro extensible y plantilla de recursos

El panel Filtro admite la personalización a través de una definición de diseño XML. El nuevo diseño admite controles desplegables para mostrar una lista de registros de entidades maestras y los controles típicos number, datetime y checkbox. El diseño se puede modificar para permitir a los usuarios seleccionar registros de entidades de restricción personalizadas. A continuación, las restricciones personalizadas, como las que se incluyen con Universal Resource Scheduling, se pasan como entrada a la API de coincidencia de recursos. Actualmente, el diseño del filtro no se puede configurar cuando una entidad programable utiliza un grupo de requisitos asociado en lugar de un requisito de recursos.

Otro punto de extensibilidad del lado cliente es la celda de recursos. La celda de recursos se representa a través de una plantilla de Handlebars.js personalizable. Los resultados de la API de coincidencia de recursos se ponen a disposición de la plantilla. Por lo tanto, al personalizar la consulta ejecutada por la API de coincidencia de recursos, los datos personalizados se pueden representar en la celda de recursos.

Recursos adicionales

Universal FetchXML