Funções Relate e Unrelate
Aplica-se a: Aplicativos de tela Aplicativos controlados por modelo
Registos de relacionar anular relação de duas tabelas através de uma relação um-para-muitos ou muitos-para-muitos.
Descrição
A função Relate associa dois registos através de uma relação um-para-muitos ou muitos-para-muitos no Microsoft Dataverse. A função Unrelate anula o processo e remove a ligação.
Para um a muitos Relações, a tabela Muitos tem um campo de chaves estrangeiras que aponta para um registo da tabela Um. Relacionar define esse campo para apontar para um registro específico da tabela One, enquanto Unrelate define esse campo como em branco. Se o campo já estiver definido quando Relate for chamado, a hiperligação existente é perdida a favor da nova ligação. Também pode definir este campo ao utilizar a função Patch ou um controlo Edit form; é necessário utilizar a função Relate.
Para as relações muitos para muitos, o sistema que liga os registos mantém uma tabela de associação oculta. Não é possível aceder diretamente a esta tabela de associação; só pode ser lida através de uma projeção um-para-muitos e definida através das funções Relate e Unrelate. Nenhuma tabela relacionada tem uma chave estrangeira.
Os dados para a tabela que especifica no primeiro argumento serão atualizados para refletir a alteração, mas os dados da tabela que especifica no segundo argumento não. Esses dados têm de ser atualizados manualmente com a função Refresh para mostrar o resultado da operação.
Estas funções nunca criam ou eliminam um registo. Só se relacionam ou anulam a relação de dois registos que já existem.
Pode utilizar estas funções apenas em fórmulas de comportamento.
Nota
Estas funções fazem parte de uma funcionalidade de pré-visualização e o respetivo comportamento só está disponível quando a funcionalidade Dados relacionais, conjuntos de opções e outras funcionalidades novas para o CDS está ativada. Trata-se de uma definição a nível da aplicação que está ativada por predefinição para novas aplicações. Para encontrar este comutador de funcionalidade, selecione Definições e, em seguida, selecione Funcionalidades futuras. Os seu comentários são muito importantes para nós. Dê-nos a sua opinião nos fóruns da comunidade do Power Apps.
Sintaxe
Relacionar( Table1RelatedTable,Table2Record )
- Table1RelatedTable - Obrigatório. Para um registo da Table1, a tabela de registos da Table2 relacionada através de uma relação de um para muitos ou muitos.
- Table2Record - Obrigatório. O registo Table2 para acrescentar à relação.
Não relacionado( Table1RelatedTable,Table2Record )
- Table1RelatedTable - Obrigatório. Para um registo da Table1, a tabela de registos da Table2 relacionada através de uma relação de um para muitos ou muitos.
- Table2Record - Obrigatório. O registo Table2 para remover da relação.
Exemplos
Considere uma tabela de Produtos com as seguintes relações, como visto no visualizador de tabela do portal Power Apps:
Nome a apresentar da relação | Tabela relacionada | Tipo de relação |
---|---|---|
Reserva de produtos | Reserva | Um-para-muitos |
Contato com o produto ↔ | Contacto | Muitos para muitos |
Os Produtos e Reservas estão relacionados através de uma relação um-para-muitos. Para relacionar o primeiro registo da tabela Reservas com o primeiro registo da tabela Produtos:
Relate( First( Products ).Reservations, First( Reservations ) )
Para remover a relação entre estes registos:
Unrelate( First( Products ).Reservations, First( Reservations ) )
Em nenhuma altura criámos ou removemos um registo, apenas a relação entre registos foi modificada.
Os Produtos e Contactos estão relacionados através de uma relação Muitos-para-Muitos. Para relacionar o primeiro registo da tabela Contactos com o primeiro registo da tabela Produtos:
Relate( First( Products ).Contacts, First( Contacts ) )
Como as relações muitos-para-muitos são simétricas, também poderíamos ter feito esta ação na direção oposta:
Relate( First( Contacts ).Products, First( Products ) )
Para remover a relação entre estes registos:
Unrelate( First( Products ).Contacts, First( Contacts ) )
ou:
Unrelate( First( Contacts ).Products, First( Products ) )
O percurso que se segue faz exatamente estas operações nestas tabelas usando uma app com controlos de Gallery e Combo box para selecionar os registos envolvidos.
Estes exemplos dependem dos dados de exemplo que estão a ser instalados no seu ambiente. Seja criar um ambiente de avaliação que inclua dados de exemplo ou adicionar dados de exemplo para um ambiente existente.
Um-para-muitos
Função Relacionar
Primeiro, crie uma aplicação simples para ver e reatribuir as reservas associadas a um produto.
Crie uma aplicação de tablet de raiz.
No separador Ver, selecione Origens de dados.
No painel Dados, selecione Adicionar dados> e selecione Produtos.
A tabela Produtos faz parte dos dados da amostra carregados acima.No separador Inserir, adicione um controlo de Gallery vertical em branco.
Certifique-se de que o controlo que acabou de adicionar é denominado Gallery1 e, em seguida, mova e redimensione-o para preencher o lado esquerdo do ecrã.
No separador Propriedades, defina a propriedade Items de Gallery1 para Produtos e o respetivo Esquema para Imagem e título.
Em Gallery1, certifique-se de que o controlo Label é denominado Title1 e, em seguida, defina a respetiva propriedade Text como ThisItem.Name.
Selecione o ecrã para evitar inserir o item seguinte em Gallery1. Adicione um segundo controlo Gallery vertical em branco e certifique-se de que é denominado Gallery2.
A Galeria2 mostrará as reservas para qualquer produto que o utente selecionar na Galeria1.
Mova e redimensione Gallery2 para preencher o quadrante superior direito do ecrã.
(opcional) Adicione o controlo Label azul acima de Gallery2, como mostra o gráfico seguinte.
Na barra de fórmulas, defina a propriedade Items de Gallery2 como Gallery1.Selected.Reservations.
No painel de propriedades, defina o Esquema de Gallery2 para Título.
Em Gallery2, adicione um controlo Combo box, certifique-se de que é denominado ComboBox1 e, em seguida, mova-o e redimensione-o para evitar bloquear os outros controlos em Gallery2.
No separador Propriedades, defina a propriedade Items de ComboBox1 como Produtos.
Desloque-se para baixo no separador Propriedades e defina a propriedade Allow multiple selection de ComboBox1 como Desativado.
Na barra de fórmulas, defina a propriedade DefaultSelectedItems de ComboBox1 como ThisItem.'Product Reservation'.
Em Gallery2, defina a propriedade OnSelect de NextArrow2 para esta fórmula:
Relate( ComboBox1.Selected.Reservations, ThisItem )
Quando o utilizador seleciona este ícone, a reserva atual muda para o produto que o utilizador selecionou em ComboBox1.
Prima F5 para testar a aplicação no modo de pré-visualização.
Com esta aplicação, o utilizador pode mover uma reserva de um produto para outro. Para uma reserva de um produto, o utilizador pode selecionar um produto diferente em ComboBox1 e, em seguida, selecionar NextArrow2 para alterar essa reserva.
Função Desrelacionar
Neste ponto, pode mover a relação de um registo para outro, mas não pode remover totalmente a relação. Pode utilizar a função Unrelate para desligar um registo de reserva de qualquer produto.
No separador Ver, selecione Origens de dados.
No painel Dados, selecione Adicionar origem de dados>Microsoft Dataverse>Reservas>Ligar.
Em Gallery2, defina a fórmula OnSelect para NextArrow2 para esta fórmula:
If( IsBlank( ComboBox1.Selected ), Unrelate( Gallery1.Selected.Reservations, ThisItem ), Relate( ComboBox1.Selected.Reservations, ThisItem ) ); Refresh( Reservations )
Copie Gallery2 para a Área de transferência ao selecioná-la e ao premir Ctrl-C.
Cole um duplicado de Gallery2 no mesmo ecrã ao premir Ctrl-V e, em seguida, mova-a para o quadrante inferior direito do ecrã.
(opcional) Se tiver adicionado uma etiqueta acima de Gallery2, repita os dois passos anteriores para essa etiqueta.
Certifique-se de que o duplicado de Gallery2 é denominado Gallery2_1 e, em seguida, defina a respetiva propriedade Items para esta fórmula:
Filter( Reservations, IsBlank( 'Product Reservation' ) )
É apresentado um aviso de delegação, mas não importa com a pequena quantidade de dados neste exemplo.
Com estas alterações, os utilizadores podem limpar a seleção em ComboBox1 para um contacto se essa pessoa não tiver reservado um produto. Os contactos que não tiverem reservado um produto aparecem em Gallery2_1, em que os utilizadores podem atribuir cada contacto a um produto.
Muitos para muitos
Criar uma relação muitos-para-muitos
Os dados da amostra não incluem uma relação de muitos a muitos, mas vai criar uma entre a tabela Produtos e a tabela Contactos. Os utilizadores podem relacionar cada produto com mais de um contacto e cada contacto com mais de um produto.
A partir desta página, selecione Dados na barra de navegação esquerda e, em seguida, selecione Tabelas.
Mude o filtro de tabela para incluir todas as tabelas.
Por predefinição, as tabelas de amostras não aparecem.
Desloque-se para baixo, abra a tabela Produto e selecione Relações.
Selecione Adicionar relação>Muitos para muitos.
Selecione a tabela de Contacto para a relação.
Selecione Concluído>Guardar tabela.
Relacionar e anular a relação de contactos com um ou mais produtos
Irá criar outra aplicação semelhante à que criou anteriormente neste tópico, mas a nova aplicação oferecerá uma relação muitos-para-muitos. Cada contacto conseguirá reservar vários produtos em vez de apenas um.
Numa aplicação em branco para tablets, crie Gallery1 como o primeiro procedimento neste tópico descreve.
Adicione outro controlo Gallery vertical em branco, certifique-se de que tem o nome Gallery2 e, em seguida, mova-o para o canto superior direito do ecrã.
Posteriormente neste tópico, irá adicionar um controlo Combo box em Gallery2.
Na barra de fórmulas, defina a propriedade Items de Gallery2 como Gallery1.Selected.Contacts.
No separador Propriedades, defina o Esquema como Imagem e título.
Em Gallery2, certifique-se de que o controlo Label é denominado Title2 e, em seguida, defina a respetiva propriedade Text como ThisItem.'Full Name'.
Nenhum texto aparecerá nesse controlo até concluir este procedimento e atribuir um contacto para um produto.
Elimine NextArrow2, insira um ícone Cancelar e certifique-se de que tem o nome icon1.
Defina a propriedade OnSelect do ícone Cancelar como esta fórmula:
Unrelate( Gallery1.Selected.Contacts, ThisItem )
No separador Ver, selecione Origens de dados.
No painel Dados, selecione Adicionar origem de dados>Microsoft Dataverse>Contactos>Ligar.
Em Gallery2, adicione um controlo Combo box, certifique-se de que tem o nome ComboBox1 e, em seguida, defina a propriedade Items como Contacts.
No separador Propriedades, defina Permitir seleções múltiplas como Desativado.
Insira um ícone Adicionar e defina a respetiva propriedade OnSelect para esta fórmula:
Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
Com esta aplicação, os utilizadores podem relacionar e anular a relação livremente de um conjunto de contactos a cada produto.
Para adicionar um contacto a um produto, selecione o contacto na caixa de combinação na parte inferior do ecrã e, em seguida, selecione o ícone Adicionar.
Para remover um contacto de um produto, selecione o ícone Cancelar para esse contacto.
Ao contrário da relação um-para-muitos, uma relação muitos-para-muitos permite que os utilizadores associem o mesmo contacto a vários produtos.
Ao inverso: relacionar e anular a relação dos produtos com vários contactos
As relações muitos para muitos são simétricas. Pode ampliar o exemplo para adicionar produtos a um contacto e, em seguida, alternar entre os dois ecrãs para mostrar como é apresentada de qualquer uma das direções.
Defina a propriedade OnVisible de Screen1 como Refresh( Products ).
Quando atualiza uma relação de um a muitos ou de muitos, apenas os dados da primeira tabela de argumentos da chamada Relacionar ou Anular relação são atualizados. O segundo tem de ser atualizado manualmente se pretender alternar entre os ecrãs desta aplicação.
Duplicar Screen1.
O duplicado será denominado Screen1_1 e formará a base para olhar para as relações do lado dos contactos.
Para criar a vista inversa, altere estas fórmulas nos controlos de Screen1_1:
- Screen1_1.OnVisible =
Refresh( Contacts )
- Gallery1_1.Items =
Contacts
- Title1_1.Text =
ThisItem.'Full Name'
- Label1_1.Text =
"Selected Contact Products"
- Gallery2_1.Items =
Gallery1_1.Selected.Products
- Title2_1.Text =
ThisItem.Name
- Icon1_1.OnSelect =
Unrelate( Gallery1_1.Selected.Products, ThisItem )
- ComboBox1_1.Items =
Products
- Icon2_1.OnSelect =
Relate( Gallery1_1.Selected.Products, ComboBox1_1.Selected )
O resultado vai ser muito semelhante ao do ecrã anterior, mas a a relação é do lado dos Contactos.
- Screen1_1.OnVisible =
Introduza um ícone de Setas Arrows descendentes e define a respetiva propriedade OnSelect como Navigate( Screen1, None ). Faça o mesmo no Screen1 com a fórmula Navigate( Screen1_1, None ).
Com este novo ecrã, os utilizadores podem adicionar um contacto a um produto e, em seguida, passar para uma vista dos contactos e ver o produto associado. As relações são simétricas e partilhadas entre os dois ecrãs.