Trabalhar com relacionamentos um para muitos

Concluído

Os relacionamentos um para muitos são os relacionamentos mais comuns com os quais você trabalhará no Dataverse. Esta unidade continua o cenário em relação à solução de espaços de trabalho compartilhados (compartilhamento de mesa) na Contoso. Para ajudar a explicar como trabalhar com relacionamentos em um aplicativo de tela, os exemplos a seguir usarão o relacionamento entre as tabelas Local e Mesa. O diagrama a seguir é uma visualização do relacionamento e dos dados correspondentes.

Se deseja permitir que um usuário selecione um local e que as mesas desse local sejam mostradas em uma galeria abaixo, você pode criar uma tela semelhante ao exemplo a seguir.

Como acontece com a maioria das fontes de dados, você pode usar a função Filter() para filtrar as mesas e mostrar apenas as mesas do local selecionado. Sua fórmula seria semelhante ao exemplo a seguir.

Como está trabalhando com um relacionamento um para muitos do Dataverse, você pode usar a notação de ponto para fazer referência às mesas do local usando Control.Selected.Desks, conforme mostrado na fórmula a seguir.

Nesse exemplo, as duas fórmulas produzem a mesma lista de mesas relacionadas ao local selecionado. O uso da notação de ponto é mais simples e conciso do que o uso da função Filter().

Ao navegar em um relacionamento um para muitos usando a sintaxe de notação de ponto, por padrão, você obterá todos os registros relacionados. Você pode usar um filtro para aplicar mais critérios às linhas relacionadas. A expressão a seguir usa o relacionamento um para muitos e também filtra os resultados no status ativo.

Filter(FilterLocation_1.Selected.Desks, Status= 'Status (Desks)'.Active)

Além disso, você pode usar o relacionamento começando na linha de mesas. Considere um exemplo em que, na galeria, você deseja mostrar o endereço do local de cada mesa. Você pode estar familiarizado com o uso de uma pesquisa para recuperar o registro de local e, em seguida, acessar a coluna de endereço como uma propriedade.

Em vez de usar a fórmula Lookup(), você pode usar a notação de ponto e fazer referência a: ThisItem.Location.Address

Você não está limitado a um nível de navegação de relacionamento. Por exemplo, se há um local que tem um contato principal relacionado e você deseja mostrar a coluna do nome completo, pode criar a seguinte fórmula:

ThisItem.Location.'Primary Contact'.'Full Name'

Usando a notação de ponto, você pode incluir rapidamente os dados relacionados, independentemente do lado do relacionamento em que você está começando.

A maneira mais simples de estabelecer o relacionamento um para muitos é usar um formulário de edição para criar ou atualizar a linha relacionada. Quando você adiciona a coluna de pesquisa ao formulário, ela usa a função Choices() para apresentar os valores possíveis ao usuário. O exemplo a seguir mostra o processo de adição de uma linha de mesa em que a coluna de pesquisa de local é adicionada ao formulário.

As propriedades avançadas no controle suspenso mostram como a propriedade Items é configurada.

Usando a função Choices(), você eliminará a necessidade de adicionar a tabela de pesquisa como outra fonte de dados. O resultado da função Choices() é uma tabela; portanto você pode adicionar filtragem e classificação da seguinte maneira:

Filter(Choices([@Desks].contoso_Location), Status='Status (Locations)'.Active)

Se já tiver o valor de pesquisa que deseja definir (por exemplo, ao criar um registro de mesa na tela Local), você poderá definir a propriedade DefaultSelectedItems no valor do cartão de dados e, depois, definir a propriedade Visible do campo do formulário como Off. Essa configuração permitirá que o valor padrão seja passado quando a função SubmitForm() for chamada.

Se você estiver usando a função Patch() para definir uma coluna de pesquisa, defina o valor da coluna como um registro da tabela principal. O exemplo a seguir mostra o estabelecimento de um relacionamento entre uma linha de mesa e uma linha de local principal que está atualmente selecionada na lista suspensa de locais.

Patch(Desks, ThisItem, {Location:FilterLocation_1.Selected})

Você também pode obter o mesmo resultado usando a função Relate(). O primeiro parâmetro é a lista de linhas (mesas) relacionadas à linha principal (local), e o segundo parâmetro é a linha (mesa) a ser adicionada a essa lista ou relacionada.

Relate(FilterLocation_1.Selected.Desks,ThisItem)

Da mesma forma, você pode usar a função Unrelate() para desassociar as linhas, por exemplo, removendo ThisItem(Desk) das mesas que estão associadas ao local FilterLocation_1.Selected.

Unrelate(FilterLocation_1.Selected.Desks,ThisItem)

Ao usar a função Unrelate(), lembre-se de que ela definirá o valor da pesquisa principal no registro relacionado como Nothing (ou nulo). Evite linhas órfãs, pois o aplicativo pode não ter a capacidade de exibir a linha sem a associação principal. No exemplo da Contoso, se a lista de mesas for exibida apenas como relacionada ao local, qualquer mesa sem um local ficará órfã e inacessível por meio do aplicativo. Essa situação também pode ocorrer como um efeito colateral da exclusão da linha principal quando a propriedade de comportamento de relacionamento é configurada para remover o link para linhas relacionadas.