Compartilhar via


API para pesquisar disponibilidade de recursos

As organizações de serviço de campo precisam agendar o trabalho, normalmente por meio de um agente de serviço diretamente pelo cliente. As reservas costumam ser criadas com base nos recursos disponíveis para a empresa e nos requisitos do trabalho.

Quando você usar pelo menos Dynamics 365 Field Service v8.8.43.51 e o Universal Resource Scheduling v3.12.46.21 para agendar trabalhos, use a API msdyn_SearchResourceAvailability para recuperar todos os recursos elegíveis para o trabalho, para que você possa agendar o trabalho de forma eficiente. No momento em que escrevo, a v3 é a versão mais recente e msdyn_SearchResourceAvailability suporta chamadas de API web.

Observação

Use a versão mais recente da API, pois versões antigas podem usar métodos de autenticação obsoletos.

Parâmetros de entrada

Name Tipo Description Obrigatória Padrão
Versão Cadeia de Caracteres O número de versão da API identifica a versão da API que deve ser chamada. Ele segue o formato de major.minor.patch. A solicitação não precisa conter o número completo da versão.

  • Se apenas uma versão principal for especificada, ele invoca a versão secundária mais alta e a versão de patch disponíveis para essa versão principal.
  • Se as versões principais e secundárias forem especificadas, ele chama a versão de patch mais alta disponível.
  • Se todas as três partes da versão forem mencionadas, ele invocará a versão exata da API especificada.
  • Sim -N/D-
    IsWebApi booleano Defina como True para usar o assistente de agendamento via web API. Sim -N/D-
    Requisito Entity Este atributo especifica o requisito de recurso para o qual a disponibilidade do recurso está sendo recuperada. Espera-se que seja uma entidade do tipo msdyn_resourcerequirement. O requisito pode ser um registro pré-existente do banco de dados ou criado em tempo real com as restrições necessárias. A entidade deve conter todos os detalhes relevantes para sua pesquisa. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.msdyn_requirement. É importante preencher os seguinte atributos:
    1. msdyn_fromdate (DateTime): data de início do requisito no formato ISO
    2. msdyn_todate (DateTime): data de término do requisito no formato ISO
    3. msdyn_remainingduration (Integer): a duração restante do requisito em minutos
    4. msdyn_duration (Integer): a duração total do requisito em minutos
    Sim -N/D-
    Configurações Entity O atributo de configurações ajuda a filtrar ainda mais os recursos recuperados. Especifique configurações como atributos em uma bolsa de entidades. O tipo de entidade não importa. Você pode especificar qualquer nome lógico da entidade. Sim -N/D-
    ResourceSpecification Entity Defina o resourceSpecification atributo como atributos em uma bolsa de entidades. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.expando. No Nenhum

    Entidade de configurações

    A entidade de configurações não é uma entidade que existe no Dataverse; no entanto, é uma coleção de todos os atributos a seguir que ajudam os resultados do filtro da API do assistente de agendamento. Assim, o @odata.type para essa entidade deve ser Microsoft.Dynamics.CRM.expando.

    Name Tipo Description Obrigatória Padrão
    ConsiderSlotsWithLessThanRequiredCapacity booleano Defina isso como True se um intervalo de tempo com menos do que a capacidade necessária (esforço) deve ser considerado ao calcular os intervalos de tempo disponíveis potenciais no calendário do recurso. No Falso
    ConsiderSlotsWithLessThanRequiredDuration booleano Defina isso como True se um intervalo de tempo com menos do que a duração necessária deve ser considerado ao calcular os intervalos de tempo disponíveis potenciais no calendário do recurso. No Falso
    ConsiderSlotsWithOverlappingBooking booleano Defina isso como True se um intervalo de tempo com reservas sobrepostas deve ser considerado ao calcular os intervalos de tempo disponíveis potenciais no calendário do recurso. No Falso
    ConsiderSlotsWithProposedBookings booleano Defina isso como True se um intervalo de tempo com reservas propostas deve ser considerado ao calcular os intervalos de tempo disponíveis potenciais no calendário do recurso. No Falso
    ConsiderAppointments booleano Defina como True para a API de disponibilidade de recursos de pesquisa para respeitar os compromissos existentes do Dataverse como reservas no recurso, desde que as configurações de nível de organização e recurso tenham sido definidas. Compromissos com status Ocupado ou Concluído são considerados indisponíveis para operações de agendamento. No Falso
    ConsiderTravelTime booleano Defina isso como True se um tempo com reservas sobrepostas propostas deve ser considerado ao calcular os intervalos de tempo disponíveis potenciais no calendário do recurso. No Verdadeiro
    ExcludeResourceCharacteristics booleano Defina isso como Verdadeiro para excluir características de recursos para os intervalos de tempo em resposta. No Falso
    MovePastStartDateToCurrentDate booleano Defina isso paraTrue para mover uma data de início no passado para a data atual. No Falso
    UseRealTimeResourceLocation booleano Defina isso como True se o local em tempo real dos recursos deve ser usado ao calcular os intervalos de tempo disponíveis potenciais no calendário do recurso. No Falso
    SortOrder EntityCollection Especifique a ordem de classificação usando uma coleção de entidades. Cada entidade na coleção representa um critério de classificação e só pode classificar Resources a partir da resposta, mas não TimeSlots. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.expando. Estes são os atributos que você precisa preencher:
    1. Name (String): os critérios de classificação
    2. SortOrder (Integer): a direção de classificação (0 para crescente e 1 para decrescente)
    No Nenhum
    MaxResourceTravelRadius Entity Este atributo especifica o máximo que pode ser definido em uma entidade. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.expando. Estes são os atributos que você precisa preencher:
    1. Value (Decimal): o raio
    2. Unit (Integer): a unidade de distância. Consulte o conjunto de opções de unidade msdyn_distance para ver os valores possíveis.
    No 0 km. Se esse for o caso, nenhum recurso será retornado para requisitos no local.
    MaxNumberOfResourcesToEvaluate Integer Este atributo define um limite no número de recursos considerados para a solicitação. No Se esse atributo não for incluído na chamada de API, o sistema usa o Limite de Recuperação de Disponibilidade de Recursos a partir da definição de entidade escalonável, conforme definido nas configurações de Editar para entidades habilitadas. Se incluído na chamada, ele substitui o Limite de Recuperação de Disponibilidade de Recursos definido.
    ConsiderOutlookSchedules booleano Defina isso para True se os cronogramas de Outlook deverem ser considerados. Disponível apenas nas versões 3.1.0 e posteriores. No Falso

    Entidade de especificação de recurso

    Name Tipo Description Obrigatória Padrão
    ResourceTypes EntityCollection Este atributo especifica o tipo de recurso necessário para o requisito. Use uma coleção de entidades para especificar esse atributo. Cada entidade da coleção representa um tipo de recurso reservável. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.msdyn_resourceType. Esse atributo é obrigatório:
    1. Value (Integer): o valor do conjunto de opções que representa o tipo de recurso:
      • 1- Genérico
      • 2- Contato
      • 3- Usuário
      • 4- Equipamento
      • 5- Conta
      • 6- Equipe
      • 7- Instalação
      • 8- Piscinas
    No Todos os tipos de recursos, exceto equipes
    PreferredResources EntityCollection Este atributo especifica o recursos de preferência para o requisito. Adicione recursos a essa coleção de entidades para garantir que estejam no topo da lista de recursos disponíveis. Mesmo recursos que não fazem parte da coleção de entidades estão na lista, mas só depois dos recursos preferidos. No Nenhum
    RestrictedResources EntityCollection Este atributo especifica o recursos que não devem ser considerados para o requisito. Todos os intervalos de tempo desse recurso são filtrados da lista de resultados dessa API. No Nenhum
    MustChooseFromResources EntityCollection Este atributo especifica os únicos recursos que podem estar na lista de recursos disponíveis. Ele filtra e exclui todos os outros resultados com base na lista de saída.
    Restrições Entity Este atributo especifica as restrições adicionais que devem ser aplicadas à recuperação dos recursos disponíveis. No Nenhum
    RetrieveResourcesQueryId GUID A ID da consulta de Recuperação de recursos. No A ID padrão da consulta de Recuperação de recursos.
    BookedResourceId GUID Este atributo especifica o recurso atualmente reservado para o requisito. No Nenhum

    Observação

    Use uma coleção de entidades de recursos que podem ser reservadas para especificar os atributos de recursos Preferidos, Restritos e MustChooseFrom . Cada entidade na coleção representa um recurso Preferencial, Restrito ou MustChooseFrom . Esse atributo é necessário para eles:

    1. Valor (Guid): O ID do recurso reservado do recurso Preferido, Restrito ou MustChooseFrom . O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.msdyn_bookableresource.

    Restrições

    Especifique restrições adicionais por meio de atributos nesta entidade. O tipo de entidade não importa. Você pode especificar qualquer nome lógico da entidade.

    Revise a Consulta de recuperação de recursos nas configurações do quadro de agendamento para identificar quais restrições podem ser aplicadas. Por padrão, ela inclui o seguinte:

    Name Tipo Description
    Características EntityCollection Um conjunto de características que um recurso qualificado deve possuir. Cada entrada contém um characteristic com o ID característico. Opcionalmente, inclua um ratingvalue com o ID do valor de avaliação para filtrar recursos por um nível específico de proficiência.
    Funções EntityCollection Uma coleção de IDs de função que um recurso qualificado deve ter.
    Regiões EntityCollection Uma coleção de IDs de território. Um recurso qualificado deve ser atribuído a um dos territórios.
    UnspecifiedTerritory booleano Em conjunto com a restrição de territórios, especifica que um recurso qualificado deve ser atribuído a um dos territórios ou a nenhum território.
    OrganizationalUnits EntityCollection Uma coleção de IDs de unidades organizacionais. Um recurso qualificado deve ser membro de uma das unidades organizacionais especificadas.
    Teams EntityCollection Uma coleção de IDs de equipe. Um recurso qualificado deve pertencer a uma das equipes (implica que o tipo de recurso é um usuário do sistema).
    BusinessUnits EntityCollection Uma coleção de IDs de unidades de negócios. Um recurso qualificado deve pertencer a uma das unidades de negócios (implica que o recurso é um usuário do sistema).

    Parâmetros de saída

    No nível mais alto, a saída tem estes quatro parâmetros: Os resultados são representados em coleções de entidades e entidades. As respostas podem não incluir todos os atributos descritos aqui, pois o valor nulo ou os valores não ND são omitidos da resposta. Sempre verifique a presença de um atributo antes de tentar acessá-lo.

    Name Tipo Description
    TimeSlots EntityCollection Uma coleção de resultados de intervalo de tempo. Para obter mais informações, consulte a seção de entidade de intervalo de tempo .
    Recursos EntityCollection Uma coleção de resultados de recursos. Os recursos são representados como uma coleção de entidades com os seguintes atributos:
    1. BookableResource (Entity): a entidade de recurso reservável que está disponível para o requisito.
    2. TotalAvailableTime (Double): o tempo total disponível para o recurso realizar o requisito.
    Relacionada Entity Recursos relacionados representam recursos e intervalos de tempo de recursos que não são qualificados diretamente para o requisito solicitado, mas estão relacionados. Por exemplo, se um membro da equipe se qualificar para um requisito, os outros membros dessa equipe serão resultados relacionados.
    1. Intervalos de tempo (EntityCollection): Intervalos de tempo de recursos relacionados. A definição de intervalos de tempo é igual à descrita na seção slots de tempo.
    2. Recursos (EntityCollection): os recursos relacionados. A definição de recursos é igual à descrita na definição de atributo de recursos.
    Exceções Entity Este atributo contém informações sobre qualquer exceção que tenha ocorrido e informações sobre se e onde a pesquisa de recursos foi truncada.
    1. Message (String): mensagem de exceção
    2. ResourcesTruncatedAt (Integer): se o número de recursos exceder o limite de recuperação; o número onde os recursos foram truncados.

    Entidade de intervalos de tempo

    Name Tipo Description
    ID GUID Identificador exclusivo para o intervalo de tempo
    Tipo Integer O tipo de horário. Pode ser um dos seguintes valores:
    • 0: disponível
    • 1: agendado
    • 2: folga
    • 3: intervalo
    StartTime DateTime O horário de início do intervalo de tempo. Se houver viagem para o requisito, esse horário é o início da viagem. Se não, esse horário é o início do requisito.
    ArrivalTime DateTime O horário de chegada do intervalo de tempo. Se houver viagem para o requisito, esse horário é o início do requisito, após a conclusão da viagem. Caso contrário, ela é igual à hora de início do intervalo de tempo.
    EndTime DateTime A hora de término do intervalo de tempo.
    Esforço Integer O esforço ou capacidade do recurso de cumprir os requisitos.
    ResourceRequirement EntityReference O requisito de recurso para o qual os intervalos de tempo estão sendo recuperados.
    Potencial booleano Um valor booliano que indica se o intervalo de tempo tem potencial para atender ao requisito solicitado.
    IsDuplicate booleano Um valor booliano que indica se o intervalo de tempo é duplicado.
    AllowOverlapping booleano Um valor booliano indicando se a sobreposição é permitida.
    Recurso Entity O recurso ao qual o intervalo de tempo pertence. Para obter mais informações, consulte recurso do intervalo de tempo.
    Localização Entity O local tem três atributos:
    1. Location (Entity): tem dois atributos -
      • Latitude
      • Longitude
    2. WorkLocation (Integer): tem três atributos -
      • No local. Os requisitos no local excluem tipos de recurso do pool e da instalação dos resultados.
      • Instalação
      • Independente de Local
    3. LocationSourceSlot (Integer): a fonte de informações de localização tem três atributos -
      • Comum
      • Entidade de GPS personalizada
      • Auditoria móvel
    Viagem Entity Esta entidade contém detalhes de tempo de viagem e informações de distância para um intervalo de tempo. Estes são os atributos:
    1. Distance (Double): a distância da viagem
    2. TravelTime (Double): o tempo de viagem em minutos.
    3. DistanceFromStartLocation (Double): a distância do local de início do recurso.
    4. DistanceFromEndLocation (Double): a distância do local de término do recurso.
    5. DistanceMethodSourceSlot (Inteiro): A fonte ou tipo de cálculo dos valores de distância
      • Serviço de mapa
      • Como o corvo voa
    Próximo Entity Essa entidade contém detalhes sobre o tempo de viagem e a distância até a próxima reserva de intervalo de tempo.
    1. NextScheduleLocation (Entity): o local da próxima reserva. A entidade tem dois atributos:
      • Latitude
      • Longitude
    2. NextScheduleTravelTime (Integer): o tempo de viagem para a próxima reserva em minutos.
    Disponibilidade Entity As informações detalhadas de disponibilidade para um intervalo de tempo. Essa entidade é usada com grupos de tempo.
    1. AvailableIntervals (EntityCollection): uma coleção de intervalos disponíveis. Cada entidade nesta coleção contém detalhes sobre um intervalo de grupo de tempo.
      • StartTime (DateTime): a hora de início.
      • ArrivalTime (DateTime): a hora de chegada.
      • EndTime (DateTime): a hora de término.
      • TimeGroupId (DateTime): a ID do grupo de tempo.
      • TimeGroupDetailStartTime (DateTime): a hora de início do grupo de tempo.
      • TimeGroupDetailEndTime (DateTime): a hora de término do grupo de tempo.
    2. TotalAvailableDuration (Double): a duração total disponível em minutos.
    3. TotalAvailableTime (Double): o tempo total disponível que um recurso tem por dia (em minutos).
    TimeGroup Entity Os detalhes sobre um grupo de tempo.
    1. TimeGroupId (Guid): a ID do grupo de tempo.
    2. TimeGroupDetail (EntityReference): uma referência de entidade ao detalhe do grupo de tempo.
    3. TimeGroupDetailStartTime (DateTime): o detalhe de hora de início do grupo de tempo.
    4. TimeGroupDetailEndTime (DateTime): o detalhe de hora de término do grupo de tempo.

    Dica

    Quando você cria reservas usando a API, use o campo Potencial descrito na tabela. Não usar esse campo pode resultar em reservas sobrepostas ou inadequadas.

    Recurso de intervalo de tempo

    Name Tipo Description
    Recurso EntityReference Uma referência de entidade para o recurso reservável.
    ResourceGroup EntityReference Uma referência de entidade para o grupo de recursos reserváveis.
    BusinessUnit EntityReference Uma referência de entidade à unidade de negócios.
    OrganizationalUnit EntityReference Uma referência de entidade à unidade organizacional.
    ResourceType Integer O tipo de recurso. Veja o atributo ResourceType na entidade BookableResource para obter valores possíveis.
    PoolId GUID O ID do pool do qual o recurso é membro durante o intervalo de tempo.
    CrewId GUID O ID da equipe do qual o recurso é membro durante o intervalo de tempo.
    Características EntityCollection As características do recurso reservável. Cada entidade da coleção contém entidades com características e informações de classificação.
    1. Characteristic (EntityReference): uma referência de entidade à característica.
    2. RatingId (Guid) A ID de classificação da característica.
    3. RatingName (Cadeia de caracteres): o nome da classificação.
    4. RatingValue (Integer): o valor da classificação.
    HasStartLocation booleano Um valor booleano que indica se o recurso tem um local de início.
    HasEndLocation booleano Um valor booleano que indica se o recurso tem um local de término.
    Email Cadeia de Caracteres O endereço de email do recurso.
    Telefone Cadeia de Caracteres O número de telefone do recurso.
    ImagePath Cadeia de Caracteres O caminho para a imagem do recurso.
    Calendarid GUID O ID de calendário do recurso.

    Exemplos

    Neste exemplo, você usa a versão 3 da API do assistente de agendamento, que suporta chamadas da API web, para um requisito com duração de 60 minutos. Ao usar o settings atributo, você filtra os resultados. Você considera dois tipos de recursos para os resultados finais: 1 e 2 (ou seja, genérico e de contato).

    {
        "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"
                    }
                ]
            }
        }
    }
    
    

    O exemplo a seguir demonstra o uso indicado de coleções de entidades. Neste caso, ela 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"
                    }
                ]
            }
        }
    }