Compartir a través de


Ampliar Universal Resource Scheduling con restricciones de recursos personalizadas.

Universal Resource Scheduling, el motor de programación subyacente de Dynamics 365 Field Service and Project Service Automation, incorpora capacidades completas de coincidencia de recursos para reservar los recursos adecuados para un trabajo. Mientras que la solución Universal Resource Scheduling incorpora el Field Service y Project Service, Universal Resource Scheduling también puede utilizarse para programar cualquier flujo de trabajo en Dynamics 365. En este artículo echaremos un vistazo a cómo se implementan las restricciones de recursos incorporadas y cómo personalizar Universal Resource Scheduling con restricciones de recursos personalizadas.

Recursos, requisitos y restricciones

Recursos

Principal para Universal Resource Scheduling es la entidad de Recurso (bookableresource). Cuando se crean registros de reserva (bookableresourcebooking), se asocian a un registro del recurso. Para asegurarse de que se selecciona el recurso correcto, Universal Resource Scheduling incorpora muchas restricciones y filtros por los que categorizar los recursos. Los ejemplos son: Tipo de recurso, que indica si el recurso es un Usuario, Contacto, Cuenta, Equipamiento, etc., Característica para filtrar los recursos por conocimientos de especialidad, Zona, para asignar recursos a regiones específicas, Unidad organizativa para modelar una jerarquía de la organización, etc.

El registro de recurso y sus restricciones asociadas se modelan a través de atributos o relaciones con otras entidades. Por ejemplo, Nombre y Tipo de recurso son atributos sobre la entidad de recurso. 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 secundarias para la entidad de recurso y de característica/zona. La unidad organizativa es un atributo de búsqueda en la entidad de recurso para la entidad de unidad organizativa.

Requisitos

Otra entidad importante en Universal Resource Scheduling es la entidad de requisito de recurso (msdyn_resourcerequirement). La entidad de requisito registra un requisito para que se realice el trabajo. Captura parámetros sobre el trabajo solicitado, como los campos de fecha de inicio y de finalización, el período de restricción en el que se puede realizar el trabajo; el campo Duración para saber cuánto se espera que tarde el trabajo; la ubicación de trabajo, que indica la ubicación del trabajo requerido. La entidad de requisito también captura las restricciones de recurso para limitar los recursos que se pueden cumplir y reservar para este requisito. Como la entidad de recurso, las restricciones de recurso se expresan como atributos en la entidad de requisito o como relaciones con otras entidades. Territorio es un atributo de búsqueda de la entidad de requisito en la entidad de zona que indica la zona en la que se realiza el trabajo y, por lo tanto, debemos buscar un recurso de la misma zona. La característica de requisito es una relación secundaria relacionada con el requisito para la entidad característica que expresa los conocimientos necesarios para completar el trabajo, y por lo tanto, el requisito puede coincidir solo con los requisitos con conocimientos coincidentes.

Restricciones incluidas en Universal Resource Scheduling

A continuación se muestra una lista de restricciones incluidas en Universal Resource Scheduling:

  • Características: pueden usarse para modelar los conocimientos de un recurso. También admite valores de calificaciones opcionales para valorar la especialización de un recurso en cada conocimiento.
  • Categorías: recursos que pueden asociarse a las categorías.
  • Territorios: para asignar recursos a regiones territoriales.
  • Unidades organizativas: para modelar una jerarquía de la organización.
  • Tipo de recursos: define el tipo de recurso.
  • Equipos: los equipos del que es miembro un recurso.
  • Unidades de negocio: la unidad de negocio de la que forma parte el recurso.

Filtrado en el tablero de programación

El tablero de programación muestra una lista de recursos y reservas asignados a ellos. El panel de filtro del tablero de programación le permite filtrar la lista de recursos por sus restricciones, por ejemplo, si selecciona un tipo de recurso de usuario en el menú desplegable Tipo de recurso, se filtrará la lista de recursos para aquellos con el tipo Usuario. De forma similar, puede filtrar recursos haciendo coincidir características o zonas.

Usar el panel de filtro para filtrar recursos es un método de buscar recursos que coinciden. Se usa este método cuando desea mostrar manualmente una lista de recursos que cumplen un conjunto específico de restricciones.

Búsqueda de recursos disponibles con el asistente de programación

En la parte inferior del tablero de programación encontrará una lista re registros de requisito. Puede seleccionar una uno y elegir buscar la disponibilidad. Esta acción abrirá el Asistente de programación. El Asistente de programación usa las restricciones capturadas en el registro de requisitos seleccionado para buscar los recursos coincidentes disponibles para su reserva. Solo se muestran en el tablero los recursos que coinciden con las restricciones en el requisito y que están disponibles en el período especificad en el requisito.

Existe una experiencia similar disponible a través de un botón de cinta de opciones "Reservar" en la entidad de requisito y otras entidades de programación en los formularios o vistas de lista de Dynamics 365. Cuando se hace clic en "Reservar", se abre el Asistente para la programación que muestra los recursos que coinciden con las restricciones del registro de requisitos seleccionado.

A diferencia del modo del tablero de programación mencionado anteriormente, donde usa el panel de filtro para recursos de filtro manuales, en el modo de Asistente de programación, el panel de filtro completa automáticamente las restricciones de recursos desde el registro de requisito y solo se muestran los recursos de coincidencia.

Cómo funciona la coincidencia de restricciones

Entidades con restricciones

Algunas restricciones se especifican como atributos directamente en la entidad de recurso, mientras que otros se definen a través de relaciones. Las relaciones son necesarias cuando una restricción hace referencia a una segunda entidad maestra.

Tengamos en cuenta un registro de recurso y su asociación con restricciones de zona y característica asociadas.

Primero, las grabaciones maestras. Disponemos de zonas almacenadas en la entidad de zona:

Zona de ventas
Nueva York
Nueva Jersey
Pontevedra

También disponemos de características en la entidad de característica:

Característica
Jefe de proyecto
Diseñador
Analista financiero

Entidad de unidad organizativa:

Unidad organizativa
Contoso US
Contoso EU

Finalmente, disponemos de la entidad de recurso:

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

Cuando un único registro de recursos funciona para capturar restricciones de un solo valor, como Tipo de recurso o Unidad organizativa anteriormente. Si desea asociar un recurso a varios registros de zona y de característica, debemos usar una entidad de terceros, una relación de varios a varios (N:N) para almacenar estas asociaciones.

Usamos la entidad de zona de recurso para asociar varias zonas para un recurso.

Registros de zona de recurso:

Recurso Zona de ventas
Jorge Galt Nueva York
Jorge Galt Nueva Jersey
Abraham McCormick Pontevedra

y la entidad de característica de recurso para almacenar varias características para un recurso.

Registros de característica de recurso:

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

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

Aquí se encuentra la entidad de requisito:

Requisito Duración Zona de ventas
Trabajo 1 1 h Nueva York
Trabajo 2 1 h Pontevedra

La entidad de característica de requisito:

Registros de característica de requisito:

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

A veces, el requisito puede disponer de una restricción modelada como un atributo de búsqueda, mientras que el recurso puede almacenar los atributos de coincidencia en la tabla N:N. Por ejemplo, para requisito, la restricción de zona es un atributo de búsqueda para la entidad de zona. Un requisito captura una demanda de trabajo y la zona el trabajo que se realizará en ella. Sin embargo, un registro de recurso puede asociarse a varios registros de zona.

Contenedores de propiedad con restricciones

Cuando el usuario selecciona valores en el panel de filtro y selecciona el botón Buscar, los valores se envían a la API de coincidencia del recurso. Para las restricciones multivalor, el panel de filtro muestra los datos de las entidades maestras de zona y de característica, e incluye los valores seleccionados en el contendor de propiedades de las restricciones.

Aquí se muestra un contenedor de propiedades de muestra con las restricciones enviadas a la API de coincidencia de recursos:

Nombre Value
ResourceType Usuario
Territories Nueva York
Nueva Jersey

Esto indica que la API de coincidencia de recursos busque los recursos de tipo Usuario que se asocian a las zonas de Nueva York y 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 completan previamente en el panel de 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ísticas de recursos). Responde con un contendor de propiedades de propiedades de restricciones que expresan todas las restricciones de recursos capturadas en el requisito seleccionado.

Esta es una respuesta de ejemplo de la API de recuperación de restricciones de requisitos:

Nombre Value
Requirement Trabajo 2
Duration 1 h
Territories Pontevedra
Characteristics Jefe de proyecto
Analista financiero

La API de coincidencia de recursos recibe como entrada un contenedor de propiedades de restricciones y consulta los recursos que coinciden. Los recursos que coinciden se muestran en el tablero de programación o el Asistente de programación.

Resumen de las entidades usadas para la coincidencia de recursos

  • Entidades maestras de ejemplo
    • Zona: se hace referencia a ella como restricción
    • Característica: se hace referencia a ella como restricción
    • Recurso: se asigna a Reservas
    • Zona de recursos: asocia los recursos a las zonas
    • Característica del recurso: asocia los recursos a las características
  • Entidades transaccionales de ejemplo
    • Requisito: captura una notificación de trabajo y hace referencia a la zona
    • Característica de requisito: asocia los requisitos a las características

Resumen de flujos coincidentes de recursos

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

    1. Un usuario agrega manualmente las restricciones en el panel de 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 coincidencia 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 de recuperación de restricciones de requisitos y se muestran en el panel de filtro.
    3. Las restricciones se envían a la API de coincidencia de recursos
    4. Se muestra la lista filtrada de recursos

Ampliación de Universal Resource Scheduling con restricciones personalizadas

Universal Resource Scheduling se puede ampliar con restricciones de recursos personalizadas. La ampliación de restricciones funciona de la misma forma que las restricciones creadas en Universal Resource Scheduling, se modelan como atributos y relaciones en Dynamics 365.

En Ampliación de Universal Resource Scheduling - Buscar recursos por idioma - Un manual paso a paso se describe un manual paso a paso con los ejemplos de código necesarios para cada paso

Restricciones personalizadas

Usaremos el "idioma" como un escenario de ejemplo. Una organización desea filtrar recursos por el idioma hablado. También quiere capturar en el registro de requisito el idioma necesario para un trabajo.. Esta restricción sigue un diseño similar al de la restricción de zona integrada. Un nuevo idioma de entidad maestro almacena los distintos 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 de requisito, crearemos dos nuevos atributos de búsqueda: Required Language y Secondary Language. Cuando se busquen los recursos disponibles para un requisito, solo se mostrarán los recursos asociados con Required Language o Secondary Language.

Aquí describiremos la restricción de idioma personalizada. Primero, tenemos la nueva entidad de idioma:

Idioma
Inglés
Español

y la nueva entidad secundaria de varios a varios del idioma del recurso:

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

Aquí se muestra la entidad de requisito con nuestros dos nuevos atributos, el idioma requerido y el idioma secundario que representan los idiomas que el recurso necesita para hablar con los que cumplen con este requisito:

Requisito Duración Zona de ventas Idioma requerido Idioma secundario
Trabajo 1 1 h Nueva York Inglés ---
Trabajo 2 1 h Pontevedra Español Inglés

Puntos de extensibilidad

Según los flujos de coincidencia de recursos descritos anteriormente, estos son los puntos de extensibilidad que necesitamos modificar para que nuestras restricciones personalizadas funcionen:

  1. API de recuperación de restricciones de requisitos

    La API tiene que leer nuestros nuevos atributos de idioma requerido e idioma secundario de manera que cuando un usuario encuentre disponibilidad para un requisito, se recuperen nuestras nuevas restricciones.

  2. Panel de filtro

    Un usuario debe poder realizar la selección de una lista de registros de idioma en el panel de filtro para realizar el filtrado para recursos que coinciden. Para buscar la disponibilidad de un requisito, el panel de filtro debe mostrar el idioma requerido y el idioma secundario del registro de requisito seleccionado previamente en la lista de idiomas.

  3. API de coincidencia de recursos

    La API obtendrá como entrada las nuevas restricciones de idioma; tiene que devolver solo los recursos que hablan los idiomas seleccionados.

Consultas ampliables

Internamente, la API de recuperación de restricciones de requisitos (n.º 1 anterior) y la API de coincidencia de recursos (n.º 3 anterior) usan FetchXML para consultar datos de Dynamics 365. La API de recuperación de restricciones de requisitos envía varias consultas para recuperar el registro de requisito y sus restricciones secundarias (por ejemplo, la característica de requisito, etc.). La API de coincidencia de recursos, basada en las restricciones de recursos pasadas como entrada, crearán de forma dinámica la consulta FetchXML correcta, por lo que solo se devolverán los registros de recurso que coincidan con los criterios FetchXML especificados de Dynamics 365.

En la actualización de julio de 2017 de Universal Resource Scheduling, se presentó Universal FetchXML (UFX) para admitir la coincidencia de recursos extensible. Dos características importantes que UFX agrega a FetchXML son: 1) Varios conjuntos de resultados, una única consulta UFX puede devolver resultados a partir de varias entidades, y 2) FetchXML dinámico, una consulta UFX puede crear de forma dinámica FetchXML basado en datos de entrada.

Con UFX, se puede crear una única consulta para un registro de requisito y todos sus registros secundarios. La API de recuperación de restricciones de requisitos ejecuta una consulta UFX personalizable para recuperar un requisito y sus restricciones secundarias. La consulta puede personalizarse para recuperar también registros de restricciones 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 crear de forma dinámica el FetchXML correcto para buscar recursos que coincidan. Esta consulta UFX también se puede modificar para crear el FetchXML adecuado para que solo devuelva recursos que coinciden con las restricciones personalizadas.

Plantilla de recursos y diseño de filtro extensible

En la actualización de julio de 2017 de Universal Resource Scheduling, se actualizó el panel de filtro (n.º 2 anterior) para que admitiera la personalización a través de la definición de diseño XML. El nuevo diseño admite controles desplegables para mostrar una lista de registros de entidades maestras los controles number, datetime y checkbox típicos. El diseño se puede modificar para permitir a los usuarios seleccionar registros desde entidades de restricciones personalizadas. Las restricciones personalizadas, como las incluidas con Universal Resource Scheduling, pasan como entrada a la API de coincidencia de recursos.

Otro punto de extensibilidad del lado del cliente disponible en la actualización de julio de 2017 es la celda de recurso. La celda de recurso se muestra a través de una plantilla Handlebars.js personalizable. Los resultados de la API de coincidencia de recursos se encuentran disponibles para la plantilla. Por lo tanto, si personaliza la consulta ejecutada por la API de coincidencia de recursos, se pueden mostrar datos personalizados en la celda de recurso.

En Ampliación de Universal Resource Scheduling - Buscar recursos por idioma - Un manual paso a paso se describe un manual paso a paso con los ejemplos de código necesarios para cada paso

Notas adicionales

  • 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.

Consultar también

Universal FetchXML

Notas de la versión de extensibilidad de Universal Resource Scheduling