Estender o Universal Resource Scheduling com restrições de recursos personalizadas
O Universal Resource Scheduling, o mecanismo de agendamento subjacente ao Dynamics 365 Field Service e ao Project Service Automation, é entregue com ampla capacidade de correspondência de recursos para reservar os recursos adequados para um trabalho. Embora a solução Universal Resource Scheduling seja entregue com o Field Service e Project Service, o Universal Resource Scheduling também pode ser usado para agendar qualquer fluxo de trabalho no Dynamics 365. Neste artigo, veremos como as restrições de recursos internos são implementadas e como personalizar a solução Universal Resource Scheduling com restrições personalizadas do recurso.
Recursos, requisitos e restrições
Recursos
A entidade principal do Universal Resource Scheduling é a entidade (bookableresource
) do Recurso. Quando registros Reserva (bookableresourcebooking
) são criados, eles são associados a um registro Recurso. Para garantir que o recurso correto está selecionado, a solução Universal Resource Scheduling é entregue com muitos filtros e restrições integrados para categorizar recursos. São exemplos: Tipo de recurso, indicando se o recurso é usuário, contato, conta, equipamento, etc. Característica, para filtrar recursos pelas habilidades pelas quais se destacam, Região, para atribuir recursos a regiões específicas, Unidade organizacional para modelar uma hierarquia organizacional e muito mais.
Um registro recurso e suas restrições associadas são modelados por meio de atributos ou relações com outras entidades. Por exemplo, Nome e Tipo de Recurso são atributos na entidade Recurso. Características de Recursos e Regiões de Recursos são relacionamentos secundários, pois um recurso pode ser associado a um ou mais deles. Essas entidades são relacionamentos secundários para o Recurso E para a entidade Característica/Região. A Unidade Organizacional é um atributo de pesquisa na entidade Recurso para a entidade Unidade Organizacional.
Requisitos
Outra entidade importante no Universal Resource Scheduling é a entidade (msdyn_resourcerequirement
) do Requisito de Recurso. A entidade Requisito registra um requisito para um trabalho a ser feito. Ela captura parâmetros do trabalho solicitado, como os campos de data Inicial e Final, restringindo o período em que o trabalho pode ser feito; o campo Duração, com o tempo esperado para realização do trabalho; o Local de Trabalho, que indica o local do trabalho solicitado. A entidade Requisito também captura restrições de recursos para restringir quais recursos podem realizar e ser reservados para esse requisito. Como a entidade Recurso, as restrições de recurso são expressadas como atributos na entidade Requisito ou como relacionamentos com outras entidades. Região é um atributo de pesquisa da entidade Requisito para a entidade Região, indicando a região em que o trabalho será feito e, portanto, que precisamos localizar um recurso da mesma região. Característica Requisito é um relacionamento secundário que relaciona o Requisito à entidade Característica, expressando as habilidades exigidas para a conclusão do trabalho e, portanto, o requisito pode ser associado somente a recursos com as habilidades correspondentes.
Restrições entregues no Universal Resource Scheduling
Veja uma lista das restrições entregues com o Universal Resource Scheduling:
- Características - podem ser utilizadas para modelar as habilidades que um recurso tem. Opcional valores também oferece suporte às classificações para avaliar proficiente como um recurso está cada atividade em
- Categorias - recursos podem ser associados a categorias
- Regiões - para atribuir recursos a regiões
- Unidades organizacionais - para modelar uma hierarquia da organização
- Tipo de recurso - define o tipo de recurso
- Equipes - equipes das quais o recurso faz parte
- Unidades de Negócios - unidade de negócios da qual o recurso faz parte
Filtragem no painel de agendamento
O painel de agendamento mostra uma lista de recursos e as reservas a eles atribuídas. O painel Filtro no painel de agendamento permite que você filtre a lista de recursos pelas restrições - por exemplo, selecionando um tipo de recurso Usuário na lista suspensa Tipo de Recurso, a lista de recursos será filtrada pelos que são do tipo Usuário. Do mesmo modo, você pode filtrar recursos correspondendo suas características ou suas regiões.
Usar o painel Filtro para filtrar recursos é um método de encontrar recursos correspondentes. Este método é usado quando você quer mostrar manualmente uma lista de recursos que correspondem a um conjunto específico de restrições.
Localização de recursos disponíveis com o Assistente de Agendamento
Na parte inferior do Painel de Agendamento, você verá uma lista de registros de Requisito. Você pode selecionar um deles e escolher localizar a disponibilidade. Essa ação abre o Assistente de Agendamento. O Assistente de Agendamento usa as restrições capturadas no registro Requisito selecionado para encontrar recursos correspondentes que estejam disponíveis para serem reservados. Somente recursos que correspondem às restrições no Requisito e que estão disponíveis no período solicitado especificado no Requisito são mostrados no painel.
Uma experiência similar está disponível por meio de um botão da faixa "Reservar" disponível na entidade Requisito e outras entidades agendáveis nas exibições de lista ou formulários do Dynamics 365. Quando "Reservar" é clicado, o Assistente de Agendamento é aberto e mostra os recursos que correspondem às restrições do registro Requisito selecionado.
Diferentemente do modo Painel de Agendamento mencionado anteriormente, onde você usa o painel Filtro para filtrar manualmente recursos, no modo Assistente de Agendamento, o painel Filtro preenche automaticamente as restrições do recurso no registro Requisito, e somente os recursos correspondentes são mostrados.
Como a correspondência de restrições funciona
Entidades de restrições
Algumas restrições são especificadas diretamente como atributos na entidade Recurso, enquanto outras são definidas por meio de relacionamentos. Os relacionamentos são necessárias quando uma restrição faz referência a uma segunda entidade mestre.
Vamos considerar um registro Recurso e suas Regiões e Características associadas.
Primeiro, os registros mestre. Temos regiões armazenados na entidade Região:
Região |
---|
Nova York |
Nova Jersey |
Seatle |
Também tempos características na entidade Característica:
Característica |
---|
Gerente de Projeto |
Designer |
Analista financeiro |
Entidade Unidade organizacional:
Unidade Organizacional |
---|
Contoso EUA |
Contoso UE |
Finalmente, temos a entidade Recurso:
Recurso | Tipo de Recurso | Unidade Organizacional |
---|---|---|
Jorge Galt | User | Contoso EUA |
Abraham McCormick | Contato | Contoso UE |
Enquanto um registro Recurso trabalha para capturar restrições com valores únicos, como Tipo de Recurso e Unidade Organizacional acima. Se quisermos associar um Recurso a vários registros Região ou Característica, teremos de usar uma terceira entidade, um relacionamento muitos para muitos (N:N), para armazenar essas associações.
Usamos a entidade Região do Recurso para associar várias regiões para um recurso.
Registros Região de Recursos:
Recurso | Região |
---|---|
Jorge Galt | Nova York |
Jorge Galt | Nova Jersey |
Abraham McCormick | Seattle |
e a entidade Característica de Recurso para armazenar várias características para um recurso.
Registros Característica de Recurso:
Recurso | Característica |
---|---|
Jorge Galt | Designer |
Abraham McCormick | Gerente de Projeto |
Abraham McCormick | Analista financeiro |
Semelhante ao Recurso, um registro Requisito captura restrições de valor único e registros secundários armazenam restrições de vários valores.
Veja a entidade Requisito:
Requisito | Duração | Região |
---|---|---|
Trabalho 1 | 1 h | Nova York |
Trabalho 2 | 1 h | Seatle |
A entidade Característica de Requisito:
Registro Característica de Requisito:
Requisito | Característica |
---|---|
Trabalho 1 | Designer |
Trabalho 2 | Gerente de Projeto |
Trabalho 2 | Analista financeiro |
Às vezes, o requisito pode ter uma restrição modelada como um atributo de pesquisa, enquanto o recurso pode armazenar os atributos de correspondência na tabela N:N. Por exemplo, para Requisito, as restrições de Região são um atributo de pesquisa para a entidade Região. Um Requisito captura uma demanda para trabalhar e a região em que o trabalho será feito. Um registro Recurso, no entanto, pode ser associado a vários registros Região.
Conjuntos de propriedades de restrições
Quando o usuário seleciona valores no painel Filtro e seleciona o botão Pesquisar, os valores são enviados para a API de Correspondência de Recursos. Para restrições de vários valores, o painel Filtro mostra os dados das entidades mestre Região e Característica e inclui os valores selecionados no conjunto de propriedades de restrições.
Aqui está um conjunto de propriedades de exemplo com as restrições enviadas à API de correspondência de recursos:
Nome | Value |
---|---|
ResourceType |
User |
Territories |
Nova York Nova Jersey |
Isso informa à API de correspondência de recursos para encontrar recursos do tipo Usuário associados às regiões Nova York ou Nova Jersey.
No Assistente de Agendamento, as restrições primeiro são recuperadas de um registro Requisito por meio da API de recuperação de restrições de requisito. As restrições recuperadas são preenchidas no painel Filtro e enviadas à API de correspondência de Recursos.
A API de Recuperação de Restrições de Requisito consulta o registro Requisito e todas as restrições secundárias relacionadas (por exemplo, Característica de Requisito). Ele responde com um conjunto de propriedades de restrições expressando todas as restrições capturadas no Requisito selecionado.
Veja uma resposta de exemplo da API de recuperação de restrições de requisito:
Nome | Value |
---|---|
Requirement |
Trabalho 2 |
Duration |
1 h |
Territories |
Seatle |
Characteristics |
Gerente de Projeto Analista financeiro |
A API de correspondência de recurso recebe como entrada o conjunto de propriedades de restrições e consulta restrições correspondentes. Os recursos correspondentes são mostrados no Painel de Agendamento ou no Assistente de Agendamento.
Resumindo as entidades usadas para a correspondência de recursos
- Entidades mestre de exemplo
- Região - mencionado como uma restrição
- Característica - mencionada como uma restrição
- Recurso - atribuído a reservas
- Região de recurso - associa recursos a regiões
- Característica Recurso - associa recursos a características
- Entidades transacionais de exemplo
- Requisito - captura uma demanda para trabalho e faz referência à Região
- Característica Requisito - associa requisitos a características
Resumindo os fluxos de correspondência de recursos
Filtragem manual. Painel Filtro > API de correspondência de recurso
- Um usuário adiciona manualmente restrições no painel Filtro
- As restrições são enviadas à API de correspondência de recurso
- A lista filtrada de recursos é mostrada
Filtragem de requisitos. API de recuperação de restrições de requisito > Painel Filtro > API de correspondência de recursos
- Um usuário encontra disponibilidade de um registro Requisito (do Painel de Agendamento ou do botão Reservar na faixa).
- As restrições são recuperadas por meio da API de recuperação de restrições de requisito e exibidas no painel Filtro.
- As restrições são enviadas à API de correspondência de recurso
- A lista filtrada de recursos é mostrada
Como estender o Universal Resource Scheduling com restrições personalizadas
O Universal Resource Scheduling poderá ser ampliado com restrições de recursos personalizadas. As restrições estendidas funcionam do mesmo modo que as integradas ao Universal Resource Scheduling; elas são modeladas como atributos e relacionamentos no Dynamics 365.
Um guia passo a passo com código de exemplos necessários para cada etapa é descrito em Como estender o Universal Resource Scheduling: localizar recursos por idioma - um guia passo a passo
Restrições personalizadas
Usaremos "idioma" como um cenário de exemplo. Uma organização quer filtrar recursos por idiomas que são falados nela. A organização também quer capturar no registro Requisito o idioma necessário para um trabalho. Essa restrição segue um padrão parecido com a restrição integrada Região. Uma nova entidade mestre Idiomas armazena os diferentes idiomas falados por um recurso. Um registro Recurso pode ser associado a muitos Idiomas por meio de uma entidade de relacionamento muitos para muitos. Na entidade Requisito, criaremos dois novos atributos de pesquisa: Required Language
e Secondary Language
. Ao localizar os recursos disponíveis para um requisito, serão mostrados apenas os recursos associados a Required Language
ou a Secondary Language
.
Aqui descreveremos a restrição de idioma personalizada. Primeiro, temos nossa nova entidade Idioma:
Language |
---|
Inglês |
Espanhol |
e nossa nova entidade secundária muitos para muitos Recurso Idioma:
Recurso | Language |
---|---|
Jorge Galt | Inglês |
Abraham McCormick | Inglês |
Abraham McCormick | Espanhol |
Veja a entidade Requisito com nossos dois novos atributos, Idioma Necessário e Idioma Secundário, representando os idiomas que o recurso necessita falar para ser correspondido com esse requisito:
Requisito | Duração | Região | Idioma Necessário | Idioma Secundário |
---|---|---|---|---|
Trabalho 1 | 1 h | Nova York | Inglês | --- |
Trabalho 2 | 1 h | Seatle | Espanhol | Inglês |
Pontos de extensibilidade
Com base nos fluxos de correspondência de recursos descritos acima, esses são os pontos de extensibilidade que precisamos alterar para que as restrições personalizadas funcionem:
API de recuperação de restrições de requisitos
A API precisa ler nossos novos atributos Idioma Necessário e Idioma Secundário para que quando um usuário encontre disponibilidade para um Requisito, nossas novas restrições sejam recuperadas.
Painel Filtro
Um usuário deve poder selecionar em uma lista de registros Idioma, no painel Filtro, para filtrar recursos correspondentes. Quando localizar disponibilidade para um requisito, o painel Filtro deverá exibir o Idioma Necessário e Idioma Secundário do registro Requisito pré-selecionado na lista de Idiomas.
API de correspondência de recursos
A API terá como entrada as novas restrições de Idioma; ela precisa retornar somente os recursos que falam os idiomas selecionados.
Consultas extensíveis
Internamente, a API de recuperação de restrições de requisitos (Nº 1 acima) e a API de correspondência de recursos (Nº 3 acima) usam FetchXML para consultar dados do Dynamics 365. Os problemas de API de recuperação de restrições de requisitos multiplica consultas para recuperar o registro Requisito e suas restrições secundárias (por exemplo, Característica de Requisito etc.). A API de correspondência de recursos, com base nas restrições de recurso passadas a ela por entrada, construirão dinamicamente a consulta FetchXML correta; assim, apenas registros Recurso que correspondam aos critérios FetchXML especificados serão retornados do Dynamics 365.
Na atualização de julho de 2017 do Universal Resource Scheduling, para oferecer suporte à correspondência de recursos extensível, foi apresentado o Universal FetchXML (UFX). Dois recursos importantes do UFX adicionados ao FetchXML são: 1) Vários conjuntos de resultados, uma única consulta de UFX pode retornar resultados de diversas entidades, e 2) Dynamic FetchXML, uma consulta UFX pode construir dinamicamente FetchXML com base em dados de entrada.
Com UFX, uma única consulta pode ser construída para consultar um registro Requisito e todos os registros secundários. A API de recuperação de restrições de requisito executa uma consulta UFX personalizável para recuperar um Requisito e suas restrições secundárias. Uma consulta pode ser personalizada para recuperar também registros de restrições personalizados.
O pacote de propriedades de restrições retornado da API de recuperação de restrições de requisito é passado como entrada para a API de correspondência de recursos. A API realiza uma consulta UFX personalizável. Com UFX, a consulta usa as restrições de entrada para construir dinamicamente o FetchXML correto para encontrar os recursos correspondentes. Essa consulta UFX, também, pode ser alterada para construir o FetchXML apropriado para retornar somente recursos que correspondam às restrições personalizadas.
Layout extensível de filtro e modelo de recurso
Na atualização de julho de 2017 do Universal Resource Scheduling, o painel Filtro (Nº 2 acima) foi atualizado para oferecer suporte à personalização por meio da definição de layout de XML. O novo layout oferece suporte a controles suspensos para mostrar uma lista de registros das entidades mestre e os típicos controles number
, datetime
e checkbox
. O layout pode ser alterado para permitir que os usuários selecionem registros de entidades de restrições personalizadas. As restrições personalizadas, como as entregues com o Universal Resource Scheduling, são então passadas 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 é renderizada por meio de um modelo de Handlebars.js personalizável. Os resultados da API de Correspondência de Recursos são disponibilizados para o modelo. Portanto, personalizando a consulta executada pela API de correspondência de recursos, dados personalizados podem ser renderizados na célula de recursos.
Um guia passo a passo com código de exemplos necessários para cada etapa é descrito em Como estender o Universal Resource Scheduling: localizar recursos por idioma - um guia passo a passo
Observações adicionais
- O layout do filtro não é configurável atualmente quando uma entidade agendável usa um grupo de requisitos associado em vez de um requisito de recurso.
Consulte também
Notas sobre a versão da extensibilidade do Universal Resource Scheduling