API de disponibilidad de recursos de búsqueda

Las organizaciones de Field Service necesitan programar el trabajo, a menudo a través de un agente de servicio directamente por el cliente. La creación de reservas generalmente se basa en los recursos disponibles para la empresa y los requisitos del trabajo.

Cuando uses al menos Dynamics 365 Field Service v8.8.43.51 y Universal Resource Scheduling v3.12.46.21 para programar trabajo, usa la API msdyn_SearchResourceAvailability para recuperar todos los recursos elegibles para el trabajo, de modo que puedas programar el trabajo de forma eficiente. En el momento de escribir esto, la v3 es la última versión y msdyn_SearchResourceAvailability soporta llamadas a la API web.

Nota

Utiliza la última versión de la API, ya que las versiones anteriores pueden usar métodos de autenticación obsoletos.

Parámetros de entrada

Nombre. Type Description Obligatorio Default
Versión String El número de versión de la API identifica la versión de la API que debe invocarse. Sigue el formato de major.minor.patch. No es necesario que la solicitud contenga el número de versión completo.

  • Si solo se especifica una versión principal, invoca la versión menor y de parche más alta disponible para esa versión principal.
  • Si se especifican versiones principales y secundarias, invoca la versión de parche más alta disponible.
  • Si se mencionan las tres partes de la versión, se invocará la versión exacta de la API especificada.
  • -N/D-
    IsWebApi Booleana Configura en Verdadero para usar el asistente de programación a través de la API web. -N/D-
    Requisito Entity Este atributo especifica el requisito de recursos para el que se recupera la disponibilidad de recursos. Se espera que sea una entidad de tipo msdyn_resourcerequirement. El requisito puede ser un registro preexistente de la base de datos o uno creado sobre la marcha con las restricciones necesarias. La entidad debe contener todos los detalles que sean relevantes para su búsqueda. El @odata.type para esta entidad debe ser Microsoft.Dynamics.CRM.msdyn_requirement. Los siguientes son atributos importantes para rellenar:
    1. msdyn_fromdate (DateTime): requisito de fecha inicial en formato ISO
    2. msdyn_todate (DateTime): requisito de fecha final en formato ISO
    3. msdyn_remainingduration (Integer): la duración restante del requisito en minutos
    4. msdyn_duration (Integer): la duración total del requisito en minutos
    -N/D-
    Configuración Entity El atributo de configuración ayuda a filtrar más los recursos recuperados. Especifica la configuración como atributos en una bolsa de entidades. El tipo de entidad no importa. Puede especificar cualquier nombre lógico de entidad. -N/D-
    ResourceSpecification Entity Define el resourceSpecification atributo como atributos dentro de una bolsa de entidades. El @odata.type para esta entidad debe ser Microsoft.Dynamics.CRM.expando. No None

    Entidad de configuración

    La entidad de configuración no es una entidad que exista en Dataverse; sin embargo, es una colección de todos los atributos siguientes que ayuda a la API del asistente de programación a filtrar los resultados. Por tanto, el @odata.type para esta entidad debe ser Microsoft.Dynamics.CRM.expando.

    Nombre. Type Description Obligatorio Default
    ConsiderSlotsWithLessThanRequiredCapacity Booleana Establezca esto en True si se debe tener en cuenta un intervalo de tiempo con menos de la capacidad (esfuerzo) requerida al calcular los posibles intervalos de tiempo disponibles en el calendario del recurso. No False
    ConsiderSlotsWithLessThanRequiredDuration Booleana Establezca esto en True si se debe tener en cuenta un intervalo de tiempo con menos de la duración al calcular los posibles intervalos de tiempo disponibles en el calendario del recurso. No False
    ConsiderSlotsWithOverlappingBooking Booleana Establezca esto en True si se debe tener en cuenta un intervalo de tiempo con reservas superpuestas al calcular los posibles intervalos de tiempo disponibles en el calendario del recurso. No False
    ConsiderSlotsWithProposedBookings Booleana Establezca esto en True si se debe tener en cuenta un intervalo de tiempo con reservas propuestas al calcular los posibles intervalos de tiempo disponibles en el calendario del recurso. No False
    ConsiderAppointments Booleana Establezca esto en True para que la API de disponibilidad de recursos de búsqueda respete las citas existentes de Dataverse como reservas en el recurso, siempre que se hayan establecido configuraciones de organización y nivel de recursos. Las citas con los estados Ocupado o Completado se consideran no disponibles para las operaciones de programación. No False
    ConsiderTravelTime Booleana Establezca esto en True si se debe tener en cuenta el tiempo de viaje al calcular los posibles intervalos de tiempo posibles en el calendario del recurso. No True
    ExcludeResourceCharacteristics Booleana Ponlo en Verdadero para excluir las características de recursos de los intervalos de tiempo en respuesta. No False
    MovePastStartDateToCurrentDate Booleana Establezca esto en True para mover una fecha de inicio en el pasado a la fecha actual. No False
    UseRealTimeResourceLocation Booleana Establezca esto en True si se debería usar la ubicación en tiempo real de los recursos al calcular los posibles intervalos de tiempo posibles en el calendario del recurso. No False
    SortOrder EntityCollection Especifique el criterio de ordenación mediante una colección de entidades. Cada entidad de la colección representa un criterio de ordenación y solo puede ordenar Resources a partir de la respuesta, pero no TimeSlots. El @odata.type para esta entidad debe ser Microsoft.Dynamics.CRM.expando. Los siguientes son los atributos que debe rellenar:
    1. Name (String): los criterios de clasificación
    2. SortOrder (Integer): la dirección de clasificación (0 para ascendente y 1 para descendente)
    No None
    MaxResourceTravelRadius Entity Este atributo especifica el máximo que se puede definir en una entidad. El @odata.type para esta entidad debe ser Microsoft.Dynamics.CRM.expando. Los siguientes son los atributos que debe rellenar:
    1. Value (Decimal): el radio
    2. Unit (Integer): la unidad de distancia. Consulte el conjunto de opciones de la unidad msdyn_distance para conocer los valores posibles.
    No 0 km. Si ese es el caso, no se devuelven recursos para los requisitos in situ.
    MaxNumberOfResourcesToEvaluate Número entero Este atributo define un límite en la cantidad de recursos que se tienen en cuenta para la solicitud. No Si este atributo no está incluido en la llamada a la API, el sistema utiliza el Límite de Recuperación de Disponibilidad de Recursos de la definición de entidad planificable tal como se define en Editar para entidades habilitadas. Si se incluye en la llamada, sobrescribe el límite de recuperación de disponibilidad de recursos definido.
    ConsiderOutlookSchedules Booleana Ponlo en True si hay que considerar los programas de Outlook. Solo disponible en las versiones 3.1.0 y posteriores. No False

    Entidad de especificación de recursos

    Nombre. Type Description Obligatorio Default
    ResourceTypes EntityCollection Este atributo especifica el tipo de recurso requerido para el requisito. Utiliza una colección de entidades para especificar este atributo. Cada entidad de la colección representará un tipo de recurso que se puede reservar. El @odata.type para esta entidad debe ser Microsoft.Dynamics.CRM.msdyn_resourceType. Este atributo es obligatorio:
    1. Value (Integer): el valor conjunto de opciones que representa el tipo de recurso:
      • 1- Genérico
      • 2- Contacto
      • 3- Usuario
      • 4- Equipamiento
      • 5- Cuenta
      • 6- Equipo
      • 7- Instalaciones
      • 8- Grupos
    No Todos los tipos de recursos excepto equipos
    PreferredResources EntityCollection Este atributo especifica los recursos preferidos para el requisito. Añade recursos a esta colección de entidades para asegurarte de que están en la cima de la lista de recursos disponibles. Incluso los recursos que no forman parte de la colección de entidades están en la lista, pero solo después de los recursos preferidos. No None
    RestrictedResources EntityCollection Este atributo especifica los recursos que no deberían tenerse en cuenta para el requisito. Todos los intervalos de tiempo de este recurso se filtran de la lista de resultados de esta API. No None
    MustChooseFromResources EntityCollection Este atributo especifica los únicos recursos que pueden estar en la lista de recursos disponibles. Filtrará todos los demás resultados de la lista de salida.
    Limitaciones Entity Este atributo especifica las restricciones adicionales que deben aplicarse a la recuperación de los recursos disponibles. No None
    RetrieveResourcesQueryId GUID El Id. de la consulta Recuperar recursos. No El Id. predeterminado de la consulta Recuperar recursos.
    BookedResourceId GUID Este atributo especifica el recurso reservado actualmente para el requisito. No None

    Nota

    Utiliza una colección de entidades de recursos reservables para especificar los atributos de recursos Preferidos, Restringidos y MustChooseFrom . Cada entidad en la colección representa un recurso Preferido, Restringido o MustChooseFrom . Este atributo es necesario para ellos:

    1. Valor (Guid): El ID de recurso reservable del recurso Preferido, Restringido o MustChooseFrom . El @odata.type para esta entidad debe ser Microsoft.Dynamics.CRM.msdyn_bookableresource.

    Limitaciones

    Especifica restricciones adicionales mediante atributos en esta entidad. El tipo de entidad no importa. Puede especificar cualquier nombre lógico de entidad.

    Revise la Consulta de recuperación de recursos en la configuración del tablero de programación para identificar qué restricciones pueden aplicarse. Por defecto, incluye las siguientes:

    Nombre. Type Description
    Características EntityCollection Un conjunto de características que debe poseer un recurso cualificado. Cada entrada contiene un characteristic con el ID característico. Opcionalmente, incluye un ratingvalue con el ID de valor de valoración para filtrar recursos por un nivel de competencia específico.
    Roles EntityCollection Una colección de Id. de roles que debe tener un recurso cualificado.
    Zonas de ventas EntityCollection Una colección de Id. de territorio. Se debe asignar un recurso cualificado a uno de los territorios.
    UnspecifiedTerritory Booleana En combinación con la restricción de territorios, especifica que un recurso cualificado debe asignarse a uno de los territorios o ningún territorio en absoluto.
    OrganizationalUnits EntityCollection Una colección de id. de unidades organizativas. Un recurso cualificado debe ser miembro de una de las unidades organizativas especificadas.
    Teams EntityCollection Una colección de Id. de equipo. Un recurso cualificado debe pertenecer a uno de los equipos (implica que el tipo de recurso es un usuario del sistema).
    BusinessUnits EntityCollection Una colección de IDs de unidades de negocio. Un recurso cualificado debe pertenecer a una de las unidades de negocio (implica que el recurso es un usuario del sistema).

    Parámetros de salida

    En el nivel más alto, la salida tiene los siguientes cuatro parámetros. Los resultados se presentan en entidades y colecciones de entidades. Las respuestas pueden no incluir todos los atributos descritos aquí como valor nulo o no se omiten los valores NA de la respuesta. Compruebe siempre la presencia de un atributo antes de intentar acceder a él.

    Nombre. Type Description
    TimeSlots EntityCollection Una colección de resultados de intervalos de tiempo. Para obtener más información, consulte la sección de entidad de intervalo de tiempo .
    Resources EntityCollection Una colección de resultados de recursos. Los recursos se representan como una colección de entidades con los siguientes atributos:
    1. BookableResource (Entity): la entidad de recurso que se puede reservar que está disponible para el requisito.
    2. TotalAvailableTime (Double): el tiempo total disponible para que el recurso cumpla con el requisito.
    Relacionadas Entity Los recursos relacionados representan recursos e intervalos de tiempo de recursos que no están directamente cualificados para el requisito solicitado, pero que están relacionados. Por ejemplo, si un miembro del equipo es cualificado para un requisito, los otros miembros de ese equipo serían resultados relacionados.
    1. Timeslots (EntityCollection): intervalos de tiempo de los recursos relacionados. La definición de intervalo de tiempo es la misma que se describe en la sección de intervalos de tiempo.
    2. Resources (EntityCollection): los recursos relacionados. La definición de recursos es la misma que se describe en la definición de atributo de recursos.
    Excepciones Entity Este atributo contiene información sobre cualquier excepción que haya ocurrido e información sobre si se truncó la búsqueda de recursos y dónde.
    1. Message (String): mensaje de excepción
    2. ResourcesTruncatedAt (Integer): si el número de recursos excedió el límite de recuperación, el número donde se truncaron los recursos.

    Entidad de intervalos de tiempo

    Nombre. Type Description
    Identificador GUID Identificador único para el intervalo de tiempo
    Type Número entero El tipo de franja horaria. Puede ser uno de los siguientes valores:
    • 0: disponibles
    • 1: programados
    • 2: desactivados
    • 3: en pausa
    StartTime Fecha y hora Hora de inicio del intervalo de tiempo. Si hay viaje para el requisito, esta hora es la hora de inicio del viaje. Si no, esta vez es cuando empieza el requisito.
    ArrivalTime Fecha y hora La hora de llegada del intervalo de tiempo. Si hay viaje para el requisito, este es el momento de inicio del requisito, después de completar el viaje. De lo contrario, es la misma que la hora de inicio del intervalo de tiempo.
    EndTime Fecha y hora Hora final del intervalo de tiempo.
    Esfuerzo Número entero El esfuerzo o la capacidad del recurso para cumplir con los requisitos.
    ResourceRequirement EntityReference El requisito de recursos para el que se recuperan los intervalos de tiempo.
    Potential Booleana Un valor booleano que indica si el intervalo de tiempo tiene potencial para cumplir con el requisito solicitado.
    IsDuplicate Booleana Un valor booleano que indica si el intervalo de tiempo es un duplicado.
    AllowOverlapping Booleana Valor booleano que indica se se permite la superposición.
    Recurso Entity El recurso al que pertenece el intervalo de tiempo. Para más información, consulte recurso de intervalo de tiempo.
    Ubicación Entity La ubicación tiene tres atributos:
    1. Location (Entity): tiene dos atributos:
      • Latitud
      • Longitud
    2. WorkLocation (Integer): tiene tres atributos:
      • In situ. Los requisitos in situ excluyen de los resultados los tipos de recursos de grupo e instalación.
      • Instalaciones
      • Independiente de la ubicación
    3. LocationSourceSlot (Integer): el origen de información de ubicación tiene tres atributos:
      • Común
      • Entidad GPS personalizada
      • Auditoría móvil
    Viajes Entity Esta entidad contiene detalles del tiempo de viaje y la información de distancia para un intervalo de tiempo. Los atributos son los siguientes:
    1. Distance (Double): la distancia de viaje
    2. TravelTime (Double): el tiempo de viaje en minutos.
    3. DistanceFromStartLocation (Double): la distancia desde la ubicación de inicio del recurso.
    4. DistanceFromEndLocation (Double): la distancia desde la ubicación final del recurso.
    5. DistanceMethodSourceSlot (Entero): La fuente o tipo de cálculo de los valores de distancia
      • Servicio de mapa
      • Mientras el cuervo vuela
    Siguiente Entity Esta entidad contiene detalles sobre el tiempo de viaje y la distancia hasta la próxima reserva de intervalo de tiempo.
    1. NextScheduleLocation (Entity): la ubicación de la próxima reserva. La entidad tiene dos atributos:
      • Latitud
      • Longitud
    2. NextScheduleTravelTime (Integer): el tiempo de viaje hasta la siguiente reserva en minutos.
    Disponibilidad Entity La información de disponibilidad detallada para un intervalo de tiempo. Esta entidad se utiliza con grupos de tiempo.
    1. AvailableIntAvailableIntervals (EntityCollection): una colección de intervalos disponibles. Cada entidad de esta colección contiene detalles sobre un intervalo de grupo de tiempo.
      • StartTime (DateTime): la hora de inicio.
      • ArrivalTime (DateTime): la hora de llegada.
      • EndTime (DateTime): la hora final.
      • EndTime (DateTime): el Id. de grupo de tiempo.
      • TimeGroupDetailStartTime (DateTime): la hora de inicio del grupo de tiempo.
      • TimeGroupDetailEndTime (DateTime): la hora final del grupo de tiempo.
    2. TotalAvailableDuration (Double): la duración total disponible en minutos.
    3. TotalAvailableTime (Double): el tiempo total disponible que tiene un recurso en un día (en minutos).
    TimeGroup Entity Los detalles sobre un grupo de tiempo.
    1. TimeGroupId (Guid): el Id. de grupo de tiempo.
    2. TimeGroupDetail (EntityReference): una referencia de entidad al detalle del grupo de tiempo.
    3. TimeGroupDetailStartTime (DateTime): la hora de inicio del detalle del grupo de tiempo.
    4. TimeGroupDetailEndTime (DateTime): la hora final del detalle del grupo de tiempo.

    Propina

    Cuando crees reservas usando la API, utiliza el campo Potencial descrito en la tabla. No utilizar ese campo podría dar lugar a reservas superpuestas o inadecuadas.

    Recurso de intervalo de tiempo

    Nombre. Type Description
    Recurso EntityReference Una referencia de entidad al recurso reservable.
    ResourceGroup EntityReference Una referencia de entidad al grupo de recursos que se pueden reservar.
    BusinessUnit EntityReference Una referencia de entidad a la unidad de negocio.
    OrganizationalUnit EntityReference Una referencia de entidad a la unidad organizativa.
    ResourceType Número entero El tipo de recurso. Consulte el atributo ResourceType en la entidad BookableResource para ver los posibles valores.
    PoolId GUID El Id. del grupo del que es miembro el recurso durante la duración del intervalo de tiempo.
    CrewId GUID El Id. del equipo del que es miembro el recurso durante la duración del intervalo de tiempo.
    Características EntityCollection Las características de recursos que se pueden reservar. Cada entidad de la colección contiene entidades con características e información de calificación.
    1. Characteristic (EntityReference): una referencia de entidad a la característica.
    2. RatingId (Guid): el l Id. de calificación de la característica.
    3. RatingName (String): el nombre de la calificación.
    4. RatingValue (Integer): el valor de la calificación.
    HasStartLocation Booleana Un valor booleano que indica si el recurso tiene una ubicación de inicio.
    HasEndLocation Booleana Un valor booleano que indica si el recurso tiene una ubicación final.
    Email String La dirección de correo electrónico del recurso.
    Teléfono String El número de teléfono del recurso.
    ImagePath String Ruta de acceso a la imagen del recurso.
    CalendarId GUID El Id. del calendario del recurso.

    Ejemplos

    En este ejemplo, se utiliza la versión 3 de la API del asistente de horarios, que soporta llamadas a la API web, para un requisito con una duración de 60 minutos. Al usar el settings atributo, filtras los resultados. Consideras dos tipos de recursos para los resultados finales: 1 y 2 (es decir, genérico y contacto).

    {
        "Version": "4",
        "IsWebApi": true,
        "Requirement": {
            "msdyn_fromdate": "2021-07-14T00:00:00Z",
            "msdyn_todate": "2021-07-15T23:59:00Z",
            "msdyn_remainingduration": 60,
            "msdyn_duration": 60,
            "msdyn_TimeGroup@odata.bind": "/msdyn_timegroups(c3dc79ea-d12f-ee11-9cc9-000d3a745a58)",
            "@odata.type": "Microsoft.Dynamics.CRM.msdyn_resourcerequirement"
        },
        "Settings": {
            "ConsiderSlotsWithProposedBookings": false,
            "MovePastStartDateToCurrentDate": true,
            "@odata.type": "Microsoft.Dynamics.CRM.expando"
        },
        "ResourceSpecification": {
            "@odata.type": "Microsoft.Dynamics.CRM.expando",
            "ResourceTypes@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
            "ResourceTypes": [
                {
                    "@odata.type": "Microsoft.Dynamics.CRM.expando",
                    "value": "1"
                },
                {
                    "@odata.type": "Microsoft.Dynamics.CRM.expando",
                    "value": "2"
                }
            ],
            "Constraints": {
                "@odata.type": "Microsoft.Dynamics.CRM.expando",
                "Characteristics@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
                "Characteristics": [
                    {
                        "@odata.type": "Microsoft.Dynamics.CRM.expando",
                        "characteristic": {
                            "@odata.type": "Microsoft.Dynamics.CRM.expando",
                            "value": "67387f9f-12e2-ec11-bb43-000d3aed25f7"
                        },
                        "ratingvalue": {
                            "@odata.type": "Microsoft.Dynamics.CRM.expando",
                            "value": "a1b2c3d4-5678-90ab-cdef-1234567890ab"
                        }
                    }
                ],
                "Territories@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
                "Territories": [
                    {
                        "@odata.type": "Microsoft.Dynamics.CRM.expando",
                        "value": "cc19f004-4483-ee11-8178-000d3a5c32c3"
                    }
                ],
                "Roles@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
                "Roles": [
                    {
                        "@odata.type": "Microsoft.Dynamics.CRM.expando",
                        "value": "76998e42-744c-f011-877d-6045bdfb899e"
                    }
                ]
            }
        }
    }
    
    

    El siguiente ejemplo demuestra el uso adecuado de las colecciones de entidades. En este caso, especifica MustChooseFromResources.

    {
        "Version": "4",
        "IsWebApi": true,
        "Requirement": {
            "msdyn_fromdate": "2021-07-14T00:00:00Z",
            "msdyn_todate": "2021-07-15T23:59:00Z",
            "msdyn_remainingduration": 60,
            "msdyn_duration": 60,
            "msdyn_latitude": 47.64807,
            "msdyn_longitude": -122.41249,
            "msdyn_worklocation": 690970000,
            "msdyn_TimeGroup@odata.bind": "/msdyn_timegroups(c3dc79ea-d12f-ee11-9cc9-000d3a745a58)",
            "@odata.type": "Microsoft.Dynamics.CRM.msdyn_resourcerequirement"
        },
        "Settings": {
            "ConsiderSlotsWithProposedBookings": false,
            "MovePastStartDateToCurrentDate": true,
            "MaxNumberOfResourcesToEvaluate":500,
            "ConsiderTravelTime": true,
            "MaxResourceTravelRadius": {
                "Value": 20,
                "Unit" : 192350000,
                "@odata.type": "Microsoft.Dynamics.CRM.expando"
            },
            "@odata.type": "Microsoft.Dynamics.CRM.expando"
        },
        "ResourceSpecification": {
            "@odata.type": "Microsoft.Dynamics.CRM.expando",
            "ResourceTypes@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
            "ResourceTypes": [
                {
                    "@odata.type": "Microsoft.Dynamics.CRM.expando",
                    "value": "1"
                },
                {
                    "@odata.type": "Microsoft.Dynamics.CRM.expando",
                    "value": "2"
                }
            ],
            "MustChooseFromResources@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
            "MustChooseFromResources": [
                {
                    "@odata.type": "Microsoft.Dynamics.CRM.expando",
                    "value": "2145a982-f718-ed11-b83e-0022482d79c8"
                }
            ],
            "Constraints": {
                "@odata.type": "Microsoft.Dynamics.CRM.expando",
                "Characteristics@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
                "Characteristics": [
                    {
                        "@odata.type": "Microsoft.Dynamics.CRM.expando",
                        "characteristic": {
                            "@odata.type": "Microsoft.Dynamics.CRM.expando",
                            "value": "67387f9f-12e2-ec11-bb43-000d3aed25f7"
                        },
                        "ratingvalue": {
                            "@odata.type": "Microsoft.Dynamics.CRM.expando",
                            "value": "a1b2c3d4-5678-90ab-cdef-1234567890ab"
                        }
                    }
                ],
                "Territories@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
                "Territories": [
                    {
                        "@odata.type": "Microsoft.Dynamics.CRM.expando",
                        "value": "cc19f004-4483-ee11-8178-000d3a5c32c3"
                    }
                ]
            }
        }
    }