Partilhar via


Expandir o Universal Resource Scheduling com restrições de recursos personalizadas

O Universal Resource Scheduling, o motor de agendamento subjacente ao Dynamics 365 Field Service e ao Project Service Automation, é fornecido com capacidades de correspondência de recursos abrangentes para reservar os recursos corretos por uma tarefa. Embora a solução Universal Resource Scheduling seja fornecida com o Field e o Project Service, o Universal Resource Scheduling também pode ser utilizado para agendar qualquer fluxo de trabalho no Dynamics 365. Neste artigo vamos ver a forma como as restrições de recursos incorporadas são implementadas e como personalizar o Universal Resource Scheduling com restrições de recursos personalizadas.

Recursos, requisitos e restrições

Recursos

Fundamental para o Universal Resource Scheduling é a entidade de Recurso (bookableresource). Quando registos de Reserva (bookableresourcebooking) são criados, são associados a um registo de Recurso. Para assegurar que o recurso correto está selecionado, o Universal Resource Scheduling é fornecido com muitos filtros incorporados e restrições pelos quais categorizar os recursos. Exemplos: Tipo de Recurso, que indica se o recurso é um Utilizador, Contacto, Conta, Equipamento, etc., Características, para filtrar recursos por competências em que são eficientes, Território, para atribuir recursos a regiões específicas, Unidade Organizacional para modelar uma hierarquia de organização, e muito mais.

Um registo de Recurso e as restrições associadas são modelados através de atributos ou relações com outras entidades. Por exemplo, Nome e Tipo de Recurso são atributos na entidade de Recurso. Características de Recurso e Territórios de Recurso são relações subordinadas, uma vez que um recurso pode ser associado a mais do que uma delas. Estas entidades são relações subordinadas para ambas as entidades de Recurso E Característica/Território. Unidade organizacional é um atributo de pesquisa na entidade de Recurso para a entidade Unidade Organizacional.

Requisitos

Outra entidade importante no Universal Resource Scheduling é a entidade de Requisito de Recurso (msdyn_resourcerequirement). A entidade de Requisito regista um requisito de trabalho para ser efetuada. Captura parâmetros sobre o trabalho pedido, tais como os campos de data De e Para, restringindo o período de tempo no qual o trabalho pode ser efetuado; o campo Duração para a duração esperada da tarefa; a Localização de Trabalho que indica o local do trabalho pedido. A entidade de Requisito também captura restrições de recursos para restringir que recursos podem satisfazer e ser agendados para este requisito. Tal como a entidade de Recurso, as restrições de recursos são expressas como atributos na entidade de Requisito ou como relações com outras entidades. Território é um atributo de pesquisa da entidade de Requisito para a entidade de Território que indica o território em que o trabalho será efetuado e, consequentemente, é necessário localizar um recurso no mesmo território. Característica de Requisito é uma relação subordinada que relaciona a entidade de Requisito com a de Característica expressando as competências necessárias para concluir o trabalho e, por conseguinte, o requisito pode ser correspondido a apenas recursos com competências correspondentes.

Restrições fornecidas com o Universal Resource Scheduling

A seguinte é a lista das restrições que são fornecidos com o Universal Resource Scheduling:

  • Características – Podem ser utilizadas para modelar as competências que um recurso tem. Também é compatível com valores de classificação opcionais para avaliar quão eficiente um recurso é em cada competência
  • Categorias – Recursos podem ser associados a categorias
  • Territórios – Para atribuir recursos a região territoriais
  • Unidades Organizacionais – Para modelar uma hierarquia da organização
  • Tipo de Recurso – Define o tipo de recurso
  • Equipas – As equipas a que um recurso pertence
  • Unidades de Negócio – A unidade de negócio de que o recurso faz parte

Filtrar no Quadro da Agenda

O Quadro da Agenda mostra uma lista de recursos e as reservas que lhes estão atribuídas. O painel Filtro no Quadro da Agenda permite-lhe filtrar a lista de recursos pelas respetivas restrições, por ex.: selecionar um tipo de recurso de Utilizador na lista pendente Tipo de Recurso irá filtrar a lista de recursos para os utilizadores que são do tipo Utilizador. Do mesmo modo, poderá filtrar recursos combinando características ou territórios.

Utilizar o painel Filtro para filtrar recursos é um método de localizar recursos correspondentes. Este método é utilizado quando pretende mostrar manualmente uma lista de recursos correspondente a um conjunto específico de restrições.

Localizar recursos disponíveis com o Assistente da Agenda

Na parte inferior do Quadro da Agenda, irá encontrar uma lista de registos de Requisito. Pode selecionar um deles e optar por localizar a disponibilidade. Esta ação abre o Assistente da Agenda. O Assistente da Agenda utiliza as restrições capturadas no registo de Requisito selecionado para localizar recursos correspondentes que estão disponíveis para serem agendados. Apenas os recursos que correspondem às restrições no Requisito, e que estão disponíveis no período de tempo pedido especificado nesse Requisito, são apresentados no quadro.

Uma experiência de utilização semelhante está disponível através de um botão de friso "Reservar" disponível na entidade Requisito e outras entidades agendáveis em vistas de lista ou formulário do Dynamics 365. Quando clica em "Livro", o Assistente da Agenda é aberto mostrando recursos que correspondem às restrições do registo de Requisito selecionado.

Ao contrário do Quadro da Agenda mencionado anteriormente, onde utiliza o painel Filtro para filtrar manualmente recursos, no modo Assistente da Agenda, o painel Filtro preenche automaticamente as restrições de recursos do registo de Requisito e apenas os recursos correspondentes são apresentados.

Como funciona a correspondência de restrições

Entidades de restrições

Algumas restrições estão especificadas como atributos diretamente na entidade de Recurso, enquanto outras são definidas através de relações. As relações são necessárias quando uma restrição se está a referir a uma outra, entidade principal.

Vamos considerar um registo de Recurso e as respetivas restrições Território e Características associadas.

Primeiro, os registos principais. Temos territórios armazenados na entidade de Território:

Território
Lisboa
Braga
Porto

Também temos características na entidade de Característica:

Característica
Gestor de Projeto
Estruturador
Analista Financeiro

Entidade de Unidade Organizacional:

Unidade Organizacional
Contoso EUA
Contoso EU

Por fim, temos a entidade de Recurso:

Recurso Tipo de Recurso Unidade Organizacional
Jorge Galt User Contoso EUA
Abraham McCormick Contacto Contoso EU

Apesar de um único registo de Recurso funcionar para captura de restrições de valor único, tal como o Tipo de Recurso e a Unidade Organizacional acima. Se queremos associar um Recurso a vários registos de Território ou Característica, tem de utilizar uma terceira entidade, uma relação muitos-para-muitos (N:N), para armazenar essas associações.

Utilizamos a entidade de Território de Recurso para associar vários territórios a um recurso.

Registos de Território de Recurso:

Recurso Território
Jorge Galt Lisboa
Jorge Galt Braga
Abraham McCormick Porto

e a entidade de Características de Entidade para armazenar várias características para um recurso.

Registos da Característica de Recurso:

Recurso Característica
Jorge Galt Estruturador
Abraham McCormick Gestor de Projeto
Abraham McCormick Analista Financeiro

De forma semelhante a Recurso, um registo de Requisito captura restrições de valor único e registos subordinados armazenam restrições de valores múltiplos.

Eis a entidade de Requisito:

Necessidade Duração Território
Tarefa 1 1 h Lisboa
Tarefa 2 1 h Porto

A entidade Característica de Requisito:

Registos de Característica de Requisito:

Necessidade Característica
Tarefa 1 Estruturador
Tarefa 2 Gestor de Projeto
Tarefa 2 Analista Financeiro

Por vezes, o requisito pode ter uma restrição modelada como um atributo de pesquisa, enquanto o recurso pode armazenar os atributos correspondentes na tabela N:N. Por exemplo, para Requisito, a restrição de Território é um atributo de pesquisa para a entidade de Território. Um Requisito captura uma necessidade de trabalho e o território em que o trabalho será efetuado. No entanto, um registo de Recurso pode ser associado a muitos registos de Território.

Conjuntos de propriedade de restrições

Quando o utilizador seleciona valores no painel Filtro e seleciona o botão Procurar, os valores são enviados para a API de Correspondência de Recursos. Para restrições com valores múltiplos, o painel Filtro mostra os dados das entidades principais de Território e Característica, e inclui os valores selecionados no conjunto de propriedade de restrições.

Segue-se um conjunto de propriedades de exemplo com restrições enviadas para a API de Correspondência de Recursos:

Nome Value
ResourceType User
Territories Lisboa
Braga

Isto diz à API de Correspondência de Recursos para localizar recursos de tipo de Utilizador que estão associado aos territórios Lisboa ou Braga.

Quando no Assistente da Agenda, as restrições primeiro são obtidas a partir um registo de Requisito através da API Obter Restrições de Requisito API. As restrições recuperadas são então pré-preenchidas no painel Filtro e enviadas para a API de Correspondência de Recursos.

A API Obter Restrições de Requisito consulta o registo de Requisito e todas as restrições subordinada relacionados (por exemplo, Característica de Requisito). Responde com um conjunto de propriedade de restrições que expressa todas as restrições de recurso capturadas no Requisito selecionado.

Segue-se uma resposta de exemplo da API Obter Restrições de Requisito:

Nome Value
Requirement Tarefa 2
Duration 1 h
Territories Porto
Characteristics Gestor de Projeto
Analista Financeiro

A API de Correspondência de Recursos recebe como entrada o conjunto de propriedade de restrições e consulta por recursos correspondentes. Os recursos correspondentes, em seguida, são mostrados no Quadro da Agenda ou Assistente da Agenda.

Resumo das entidades utilizadas para a correspondência de recursos

  • Entidades principais de amostra
    • Território – referido como uma restrição
    • Característica – referido como uma restrição
    • Recurso – atribuído a Reservas
    • Território de Recursos – associa Recursos a Territórios
    • Características de Recurso – associa Recursos a Características
  • Entidades transacionais de amostra
    • Requisito – captura um pedido de trabalho e referencia Território
    • Características de Requisito – associa Requisitos a Características

Resumo de fluxos de correspondência de recursos

  • Filtragem manual. Painel Filtro > API de Correspondência de Recursos

    1. Um utilizador adiciona manualmente restrições no painel Filtro
    2. As restrições são enviadas para a API de Correspondência de Recursos
    3. A lista de recursos filtrada é apresentada
  • Filtragem de requisitos. API Obter Restrições de Requisitos > Painel Filtro > API de Correspondência de Recursos

    1. Um utilizador localiza a disponibilidade de um registo de Requisito (no Quadro da Agenda ou do livro Botão no friso).
    2. As restrições são obtidas através da API Obter Restrições de Requisitos e são apresentadas no painel Filtro.
    3. As restrições são enviadas para a API de Correspondência de Recursos
    4. A lista de recursos filtrada é apresentada

Expandir o Universal Resource Scheduling com restrições personalizados

É possível expandir o Universal Resource Scheduling com restrições de recurso personalizadas. Restrições expandidas funcionam da mesma forma que as criadas no Universal Resource Scheduling, são modeladas como atributos e relações no Dynamics 365.

Guia passo a passo com exemplos de códigos necessários para cada passo é descrito em Expandir Universal Resource Scheduling: localizar recursos por idioma – guia passo a passo

Restrições personalizadas

Utilizaremos "idioma" como um cenário de exemplo. Uma organização pretende filtrar recursos pelo idioma que falam. Também querem capturar no registo de Requisito o idioma necessário para uma tarefa. Esta restrição segue um padrão semelhante à restrição de Território incorporada. Uma nova entidade principal Idioma armazena os diferentes idiomas que um recurso pode falar. Um registo de recurso pode ser associado a vários Idiomas através de uma entidade de relação muitos-para-muitos. Na entidade Requisito, vamos criar dois novos atributos de pesquisa: Required Language e Secondary Language. Quando localizar recursos disponíveis para um requisito, só recursos associados com o Required Language ou Secondary Language serão mostrados.

Aqui, iremos descrever a restrição de idioma personalizada. Em primeiro lugar, temos nossa nova entidade de Idioma:

Language
Inglês
Espanhol

e a nova entidade subordinada muitos-para-muitos Recurso de Idioma:

Recurso Language
Jorge Galt Inglês
Abraham McCormick Inglês
Abraham McCormick Espanhol

Segue-se a entidade de Requisito com os nossos dois novos atributos, Idioma Requerido e Idioma Secundário, que representam os idiomas que o recurso precisa de falar para ser correspondido a este requisito:

Necessidade Duração Território Idioma Requerido Idioma Secundário
Tarefa 1 1 h Lisboa Inglês ---
Tarefa 2 1 h Porto Espanhol Inglês

Pontos de extensibilidade

Com base nos fluxos de correspondência de recursos descritos acima, estes são os pontos de extensibilidade de que necessitamos para modificar para que as nossas restrições personalizadas funcionem:

  1. API Obter Restrições de Requisitos

    A API precisa de ler os nossos novos atributos Idioma Requerido e Idioma Secundário, para que quando um utilizador localiza disponibilidade de um Requisito, as nossas novas restrições são obtidas.

  2. Painel Filtro

    Um utilizador deverá ser capaz de selecionar a partir de uma lista de registos de Idioma no painel Filtro para filtrar por recursos correspondentes. Quando localizar disponibilidade de um Requisito, o painel Filtro deve mostrar o Idioma Requerido e Idioma Secundário do registo de Requisito pré-selecionado na lista de Idiomas.

  3. API de Correspondência de Recursos

    A API obterá como entrada as novas restrições de Idioma; necessita de devolver apenas recursos que falam os idiomas selecionados.

Consultas extensíveis

Internamente, a API Obter Restrições de Requisitos (ponto 1 acima) e a API de Correspondência de Recursos (ponto 3 acima) utilizam FetchXML para consultar dados do Dynamics 365. A API Obter Restrições de Requisitos emite várias consultas para obter o registo de Requisito e as respetivas restrições subordinadas (por exemplo, Característica de Requisito, etc.). A API de Correspondência de Recursos, com base nas restrições de recurso recebidas como entrada, irá construir dinamicamente a consulta FetchXML correta para que sejam devolvidos apenas registos de Recurso correspondentes aos critérios FetchXML especificados do Dynamics 365.

Na atualização de julho de 2017 do Universal Resource Scheduling, para dar suporte à correspondência de recursos extensível, o Universal FetchXML (UFX) foi introduzido. Dois recursos importantes que o UFX adiciona ao FetchXML são: 1) vários conjuntos de resultados, uma única consulta UFX pode devolver resultados de várias entidades e 2) FetchXML dinâmico, uma consulta de UFX pode, dinamicamente, construir FetchXML com base nos dados de entrada.

Com UFX, uma única consulta pode ser criada para consultar um registo de Requisito e todos os seus registos subordinados. A API Obter Restrições de Requisitos executa uma consulta de UFX personalizável para obter um Requisito e as respetivas restrições subordinadas. A consulta pode também ser personalizada para obter registos de restrição personalizada.

O conjunto de propriedades de restrições devolvido da API Obter Restrições de Requisitos é transmitido como entrada para a API de Correspondência de Recursos. A API executa uma consulta UFX personalizável. Com o UFX, a consulta utiliza as restrições de entrada para construir dinamicamente o FetchXML correto para localizar recursos correspondentes. Também esta consulta UFX pode ser modificada para construir o FetchXML adequado para devolver apenas recursos correspondentes às restrições personalizadas.

Esquema de Filtro Extensível e Modelo de Recursos

Na atualização de julho de 2017 para o Universal Resource Scheduling, o painel Filtro (ponto 2 acima) foi atualizado para suportar a personalização através de uma definição do esquema XML. O novo esquema suporta controlos pendentes para mostrar uma lista de registos a partir de entidades principais e os controlos típicos number, datetime e checkbox. O esquema pode ser modificado para permitir que os utilizadores selecionem registos de entidades de restrição personalizadas. As restrições personalizadas, como as que veem com o Universal Resource Scheduling, são então transmitidas como entrada para a API de Correspondência de Recursos.

Outro ponto de extensibilidade do lado do cliente disponibilizado na atualização de julho de 2017 é a célula de recursos. A célula de recursos é apresentada através de um modelo personalizável Handlebars.js. Os resultados da API de Correspondência de Recursos são disponibilizados para o modelo. Por conseguinte, através da personalização da consulta efetuada pela API de Correspondência de Recursos, os dados personalizados podem ser processados na célula de recursos.

Guia passo a passo com exemplos de códigos necessários para cada passo é descrito em Expandir Universal Resource Scheduling: localizar recursos por idioma – guia passo a passo

Notas adicionais

  • O esquema do filtro não é atualmente configurável quando uma entidade agendável utiliza um grupo de requisitos associado em vez de um requisito de recursos.

Consulte também

Universal Fetch XML

Notas de versão da extensibilidade do Universal Resource Scheduling