Partilhar via


API de disponibilidade de recursos de pesquisa

As organizações do Field Service precisam de agendar trabalho, muitas vezes, através de um agente de suporte diretamente pelo cliente. Normalmente, as reservas são criadas com base nos recursos disponíveis para a empresa e nos requisitos do trabalho.

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

Nota

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

Parâmetros de entrada

Nome Tipo Descrição Obrigatório Predefinido
Versão Cadeia O número de versão da API identifica a versão da API que deve ser invocada. Segue o formato de major.minor.patch. O pedido não tem de conter o número completo da versão.

  • Se apenas uma versão principal for especificada, invoca a versão mais alta menor e de patch disponível para essa versão principal.
  • Se forem especificadas ambas versões principais e menores, invoca a versão de patch mais alta disponível.
  • Se as três partes da versão forem mencionadas, invoca a versão exata da API especificada.
  • Sim -N/A-
    IsWebApi booleano Define para True para usar o assistente de agendamento através da API web. Sim -N/A-
    Necessidade Entidade Este atributo especifica o requisito de recursos para o qual a disponibilidade de recursos está a ser obtida. Espera-se que esta seja uma entidade de tipo msdyn_resourcerequirement. O requisito pode ser um registo pré-existente da base de dados ou um criado no momento com as restrições necessárias. A entidade deve conter todas as especificidades que são relevantes para a sua pesquisa. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.msdyn_requirement. Seguem-se alguns atributos importantes a preencher:
    1. msdyn_fromdate (DateTime): Data De do requisito em formato ISO
    2. msdyn_todate (DateTime): Data Para do requisito em formato ISO
    3. msdyn_remainingduration (Número Inteiro): A duração remanescente do requisito em minutos
    4. msdyn_duration (Número Inteiro): A duração total do requisito em minutos
    Sim -N/A-
    Definições Entidade O atributo de definições ajuda a filtrar ainda mais os recursos obtidos. Especifique definições como atributos num entity bag. O tipo de entidade não importa. Pode especificar o nome lógico de qualquer entidade. Sim -N/A-
    ResourceSpecification Entidade Defina o resourceSpecification atributo como atributos num entity bag. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.expando. Não Nenhum

    Entidade de definições

    A entidade de definições não é uma entidade que exista no Dataverse; no entanto, é uma coleção de todos os seguintes atributos que ajudam a API do assistente da agenda a filtrar os resultados. Assim, o @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.expando.

    Nome Tipo Descrição Obrigatório Predefinido
    ConsiderSlotsWithLessThanRequiredCapacity booleano Defina isto como True se um intervalo de tempo com menos do que a capacidade (esforço) requerida deve ser considerado ao calcular os possíveis intervalos de tempo disponíveis no calendário do recurso. Não Falso
    ConsiderSlotsWithLessThanRequiredDuration booleano Defina isto como True se um intervalo de tempo com menos do que a duração requerida deve ser considerado ao calcular os possíveis intervalos de tempo disponíveis no calendário do recurso. Não Falso
    ConsiderSlotsWithOverlappingBooking booleano Defina isto como True se um intervalo de tempo com reservas sobrepostas deve ser considerado ao calcular os possíveis intervalos de tempo disponíveis no calendário do recurso. Não Falso
    ConsiderSlotsWithProposedBookings booleano Defina isto como True se um intervalo de tempo com reservas propostas deve ser considerado ao calcular os possíveis intervalos de tempo disponíveis no calendário do recurso. Não Falso
    ConsiderAppointments booleano Defina isto como True para que a API de disponibilidade de recursos de pesquisa respeite compromissos existentes do Dataverse como reservas no recurso, desde que as definições de organização e de recursos tenham sido definidas. As consultas com os estados Ocupado ou Concluído são consideradas indisponíveis para operações de agendamento. Não Falso
    ConsiderTravelTime booleano Defina isto como True se um tempo de viagem deve ser considerado ao calcular os possíveis intervalos de tempo no calendário do recurso. Não Verdadeiro
    ExcludeResourceCharacteristics booleano Defina isto como Verdadeiro para excluir as características dos recursos nos intervalos de tempo em resposta. Não Falso
    MovePastStartDateToCurrentDate booleano Defina isto como True para mover uma data de início no passado para a data atual. Não Falso
    UseRealTimeResourceLocation booleano Defina isto como True se a localização em tempo real dos recursos deve ser usada ao calcular possíveis intervalos de tempo no calendário do recurso. Não 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. Seguem-se os atributos que precisa de preencher:
    1. Name (Cadeia): Os critérios de ordenação
    2. SortOrder (Número Inteiro): A direção da ordenação (0 para ascendente e 1 para descendente)
    Não Nenhum
    MaxResourceTravelRadius Entidade Este atributo especifica o máximo que pode ser definido numa entidade. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.expando. Seguem-se os atributos que precisa de preencher:
    1. Value (Decimal): O raio
    2. Unit (Número Inteiro): A unidade de distância. Consulte o conjunto de opções de unidade msdyn_distance para obter valores possíveis.
    Não 0 quilômetros. Se for esse o caso, não são obtidos recursos para os requisitos no local.
    MaxNumberOfResourcesToEvaluate Número inteiro Este atributo define um limite para o número de recursos que são considerados para o pedido. Não Se este atributo não estiver incluído na chamada API, o sistema utiliza o Limite de Recuperação de Disponibilidade de Recursos a partir da definição de entidade agendada, conforme definido nas definições de Editar para entidades ativadas. Se incluído na chamada, ele substitui o Limite de Recuperação de Disponibilidade de Recursos definido.
    ConsiderOutlookSchedules booleano Defina isto para True se os horários de Outlook deverem ser considerados. Disponível apenas nas versões 3.1.0 e posteriores. Não Falso

    Entidade de especificação do recurso

    Nome Tipo Descrição Obrigatório Predefinido
    ResourceTypes EntityCollection Este atributo especifica o tipo de recursos requerido pelo requisito. Use uma coleção de entidades para especificar este atributo. Cada entidade na coleção representa um tipo de recurso reservável. O @odata.type para esta entidade deve ser Microsoft.Dynamics.CRM.msdyn_resourceType. Este atributo é obrigatório:
    1. Value (Número Inteiro): O valor do conjunto de opções que representa o tipo de recurso:
      • 1 – Genérica
      • 2 – Contacto
      • 3 – Utilizador
      • 4 – Equipamento
      • 5 – Conta
      • 6 – Equipa
      • 7 – Instalações
      • 8 – Conjuntos
    Não Todos os tipos de recursos, exceto equipas
    PreferredResources EntityCollection Este atributo especifica os recursos preferidos para o requisito. Adicione recursos a esta coleção de entidades para garantir que estão no topo da lista de recursos disponíveis. Mesmo os recursos que não fazem parte da coleção de entidades estão na lista, mas só depois dos recursos preferidos. Não Nenhum
    RestrictedResources EntityCollection Este atributo especifica os recursos que não devem ser considerados para o requisito. Todos os intervalos de tempo deste recurso são filtrados da lista de resultados desta API. Não Nenhum
    MustChooseFromResources EntityCollection Este atributo especifica os únicos recursos que podem estar na lista de recursos disponíveis. Filtra todos os outros resultados da lista de saída.
    Restrições Entidade Este atributo especifica as restrições adicionais que devem ser aplicados à obtenção dos recursos disponíveis. Não Nenhum
    RetrieveResourcesQueryId GUID O ID da consulta de Recursos de Obtenção. Não O ID da Consulta de Recursos de Obtenção predefinida.
    BookedResourceId GUID Este atributo especifica o recurso atualmente reservado para o requisito. Não Nenhum

    Nota

    Use uma coleção de entidades de recursos reservables para especificar os atributos de recursos Preferenciais, Restritos e MustChooseFrom . Cada entidade na coleção representa um recurso Preferencial, Restrito ou MustChooseFrom . Este atributo é obrigatório para eles:

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

    Restrições

    Especifique restrições adicionais através de atributos nesta entidade. O tipo de entidade não importa. Pode especificar o nome lógico de qualquer entidade.

    Consulte a Consulta de Recursos de Obtenção nas definições do quadro da agenda para identificar quais as restrições que podem ser aplicadas. Por predefinição, inclui o seguinte:

    Nome Tipo Descrição
    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 valor de avaliação ID para filtrar recursos por um nível de proficiência específico.
    Funções EntityCollection Uma coleção de IDs de funções que um recurso qualificado tem de ter.
    Territórios EntityCollection Uma coleção de IDs de territórios. Um recurso qualificado tem de ser atribuído a um dos territórios.
    UnspecifiedTerritory booleano Em combinação com a restrição de territórios, especifica que um recurso qualificado tem de 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 tem de ser membro de uma das unidades organizacionais especificadas.
    Teams EntityCollection Uma coleção de IDs de equipas. Um recurso qualificado tem de pertencer a uma das equipas (implica que o tipo de recurso é um utilizador do sistema).
    BusinessUnits EntityCollection Uma coleção de IDs de unidades de negócio. Um recurso qualificado tem de pertencer a uma das unidades de negócio (implica que o recurso é um utilizador do sistema).

    Parâmetros de saída

    Ao mais alto nível, a saída tem os seguintes quatro parâmetros. Os resultados estão representados em coleções de entidades e em entidades. As respostas não podem incluir todos os atributos descritos aqui como valores nulos ou valores NA são omitidos da resposta. Verifique sempre a presença de um atributo antes de tentar aceder-lhe.

    Nome Tipo Descrição
    TimeSlots EntityCollection Uma coleção de resultados de intervalos 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 (Entidade): A entidade de recurso reservável que está disponível para o requisito.
    2. TotalAvailableTime (Duplo): O tempo total disponível para o recurso executar o requisito.
    Relacionada Entidade Os recursos relacionados representam recursos e intervalos de tempo de recursos que não estão diretamente qualificados para o requisito pedido, mas estão relacionados. Por exemplo, se um membro da equipa se qualificar para um requisito, os outros membros dessa equipa seriam resultados relacionados.
    1. Timeslots (EntityCollection): Intervalos de tempo de recursos relacionados. A definição de intervalos de tempo é a mesma descrita na secção de intervalos de tempo.
    2. Resources (EntityCollection): Os recursos relacionados. A definição de recursos é a mesma descrita na definição de atributos de recursos.
    Exceções Entidade Este atributo contém informações sobre qualquer exceção que ocorreu e informações sobre se e onde a pesquisa de recursos foi truncada.
    1. Message (Cadeia): Mensagem de exceção
    2. ResourcesTruncatedAt (Número Inteiro): Se o número de recursos excedeu o limite de obtenção; o número em que os recursos foram truncados.

    Entidade de intervalos de tempo

    Nome Tipo Descrição
    ID GUID Identificador exclusivo do intervalo de tempo
    Tipo Número inteiro O tipo de horário. Pode ser um dos seguintes valores:
    • 0: Disponível
    • 1: Agendado
    • 2: Inativo
    • 3: Pausa
    StartTime DateTime A hora de início do intervalo de tempo. Se houver viagem para o requisito, esta hora é a de início da viagem. Se não, esta é a hora de início do requisito.
    ArrivalTime DateTime A hora de chegada do intervalo de tempo. Se houver viagens para o requisito, este tempo é o início do requisito, depois de a viagem estar concluída. Caso contrário, é o mesmo que a hora de início do intervalo de tempo.
    EndTime DateTime A hora de fim do intervalo de tempo.
    Esforço Número inteiro O esforço ou capacidade do recurso para executar os requisitos.
    ResourceRequirement EntityReference O requisito de recurso para o qual os intervalos de tempo estão a ser obtidos.
    Potencial booleano Um valor booleano que indica se o intervalo de tempo tem potencial para cumprir o requisito pedido.
    IsDuplicate booleano Um valor booleano que indica se o intervalo de tempo é um duplicado.
    AllowOverlapping booleano Um valor booleano que indica se a sobreposição é permitida.
    recurso Entidade O recurso ao qual o intervalo de tempo pertence. Para obter mais informações, consulte recurso do intervalo de tempo.
    Localização Entidade A localização tem três atributos:
    1. Location (Entidade): Tem dois atributos -
      • Latitude
      • Longitude
    2. WorkLocation (Número Inteiro): Tem três atributos -
      • No local. Os requisitos no local excluem dos resultados os tipos de recursos de conjunto e de instalação.
      • Instalações
      • Localização Desconhecida
    3. LocationSourceSlot (Número Inteiro): A origem das informações de localização tem três atributos -
      • Comum
      • Entidade de GPS personalizada
      • Auditoria móvel
    Viagens Entidade Esta entidade contém detalhes de informações sobre o tempo de viagem e distância para um intervalo de tempo. Os seguintes são os atributos:
    1. Distance (Duplo): A distância de viagem
    2. TravelTime (Duplo): O tempo de viagem em minutos.
    3. DistanceFromStartLocation (Duplo): A distância desde a localização inicial do recurso.
    4. DistanceFromEndLocation (Duplo): A distância desde a localização final do recurso.
    5. DistanceMethodSourceSlot (Inteiro): A fonte ou tipo de cálculo dos valores de distância
      • Serviço de Mapas
      • Em linha reta
    Seguinte Entidade Esta entidade contém detalhes sobre o tempo de viagem e distância para a próxima reserva de intervalo de tempo.
    1. NextScheduleLocation (Entidade): A localização da próxima reserva. A entidade tem dois atributos:
      • Latitude
      • Longitude
    2. NextScheduleTravelTime (Número Inteiro): O tempo de viagem para a próxima reserva em minutos.
    Disponibilidade Entidade As informações de disponibilidade detalhadas para um intervalo de tempo. Esta 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): O tempo de fim.
      • TimeGroupId (DateTime): O ID do grupo de tempo.
      • TimeGroupDetailStartTime (DateTime): A hora de início do grupo de tempo.
      • TimeGroupDetailEndTime (DateTime): A hora de fim do grupo de tempo.
    2. TotalAvailableDuration (Duplo): A duração total disponível em minutos.
    3. TotalAvailableTime (Duplo): O tempo total disponível que um recurso tem num dia (em minutos).
    TimeGroup Entidade Os detalhes sobre um grupo de tempo.
    1. TimeGroupId (Guid): O ID do grupo de tempo.
    2. TimeGroupDetail (EntityReference): Uma referência de entidade para o detalhe do grupo de tempo.
    3. TimeGroupDetailStartTime (DateTime): A hora de início de detalhe do grupo de tempo.
    4. TimeGroupDetailEndTime (DateTime): A hora de fim de detalhe do grupo de tempo.

    Sugestão

    Ao criar reservas usando a API, utilize o campo Potencial descrito na tabela. A não utilização desse campo poderá levar a reservas sobrepostas ou inadequadas.

    Recurso do intervalo de tempo

    Nome Tipo Descrição
    recurso EntityReference Uma referência de entidade ao recurso agendável.
    ResourceGroup EntityReference Uma referência de entidade ao grupo de recurso agendável.
    BusinessUnit EntityReference Uma referência de entidades para a unidade de negócio.
    OrganizationalUnit EntityReference Uma referência de entidade para a unidade organizacional.
    ResourceType Número inteiro O tipo do recurso. Consulte o atributo ResourceType na entidade BookableResource para obter valores possíveis.
    PoolId GUID O ID do conjunto do qual o recurso é membro pela duração do intervalo de tempo.
    CrewId GUID O ID da equipa do qual o recurso é membro pela duração do intervalo de tempo.
    Características EntityCollection As caraterísticas do recurso reservável. Cada entidade na coleção contém entidades com caraterísticas e informações de classificação.
    1. Característica (EntityReference): Uma entidade que faz referência à caraterística.
    2. RatingId (Guid) O ID de classificação para a caraterística.
    3. RatingName (Cadeia): O nome da classificação.
    4. RatingValue (Número Inteiro): O valor da classificação.
    HasStartLocation booleano Um valor booleano que indica se o recurso tem uma localização inicial.
    HasEndLocation booleano Um valor booleano que indica se o recurso tem uma localização final.
    Email Cadeia O endereço de e-mail do recurso.
    Telefone Cadeia O número de telefone do recurso.
    ImagePath Cadeia O caminho para a imagem do recurso.
    CalendarId GUID O ID do calendário do recurso.

    Exemplos

    Neste exemplo, utiliza-se a versão 3 da API do assistente de agendamento, que suporta chamadas web API, para um requisito com duração de 60 minutos. Ao usar o settings atributo, filtras os resultados. Considera dois tipos de recursos para os resultados finais: 1 e 2 (ou seja, genérico e de 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"
                    }
                ]
            }
        }
    }
    
    

    O exemplo que se segue demonstra a utilização adequada de coleções de entidades. Neste 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"
                    }
                ]
            }
        }
    }