Funções Relate e Unrelate

Aplica-se a: Aplicativos de tela Aplicativos baseados em modelo

Os registros relate e unrelate de duas tabelas por meio de um relacionamento um-para-muitos ou muitos-para-muitos.

Descrição

A função Relate vincula dois registros por meio de relacionamentos um para muitos ou muitos para muitos no Microsoft Dataverse. A função Unrelate inverte o processo e remove o vínculo.

Para relacionamentos um-para-muitos, a tabela Many possui um campo de chave estrangeira que aponta para um registro da tabela One. Relate 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 é chamado, o vínculo existente é perdido em favor do novo vínculo. Você também pode definir esse campo usando a função Patch ou um controle Edit form; você não precisa usar a função Relate.

Para relacionamentos muitos para muitos, o sistema que vincula os registros mantém uma tabela de junção oculta. Você não pode acessar esta tabela de junção diretamente; ela pode ser apenas leitura através de uma projeção um para muitos e definida através das funções Relate e Unrelate. Nenhuma das tabelas relacionadas possui uma chave estrangeira.

Os dados da tabela que você especificar no primeiro argumento serão atualizados para refletir a mudança, mas os dados da tabela que você especificar no segundo argumento não. Esses dados devem ser atualizados manualmente com a função Refresh para mostrar o resultado da operação.

Essas funções nunca criam ou excluem um registro. Eles apenas relacionam ou não relacionam dois registros que já existem.

Você pode usar essas funções somente nas fórmulas de comportamento.

Nota

Essas funções fazem parte de um recurso de visualização e seu comportamento está disponível apenas quando o recurso Dados relacionais, conjuntos de opções e outros novos recursos do CDS está ativado. Essa é uma configuração no nível do aplicativo que é ativada por padrão para novos aplicativos. Para encontrar essa opção de recurso, selecione Configurações e, em seguida, selecione Recursos futuros. Seus comentários são muito importantes para nós. Diga-nos o que você pensa nos fóruns da comunidade do Power Apps.

Sintaxe

Relate( Table1RelatedTable, Table2Record )

  • Table1RelatedTable - obrigatório. Para um registro de Table 1, a tabela de registros Table2 relacionados por meio de um relacionamento um-para-muitos ou muitos-para-muitos.
  • Table2Record - obrigatório. O registro Table2 para adicionar ao relacionamento.

Unrelate( Table1RelatedTable, Table2Record )

  • Table1RelatedTable - obrigatório. Para um registro de Table 1, a tabela de registros Table2 relacionados por meio de um relacionamento um-para-muitos ou muitos-para-muitos.
  • Table2Record - obrigatório. O registro Table2 a ser removido do relacionamento.

Exemplos

Considere uma tabela Produtos com os seguintes relacionamentos, conforme visto no visualizador de tabelas do portal do Power Apps:

Nome de exibição do relacionamento Tabela relacionada Tipo de relacionamento
Reserva de produtos Reserva Um para muitos
Produto ↔ Contato Contact Muitos para muitos

Produtos e Reservas são relacionados por meio de um relacionamento um para muitos. Para relacionar o primeiro registro da tabela Reservar com o primeiro registro da tabela Produtos:

Relate( First( Products ).Reservations, First( Reservations ) )

Para remover o relacionamento entre esses registros:

Unrelate( First( Products ).Reservations, First( Reservations ) )

Em nenhum momento criamos ou removemos um registro, apenas o relacionamento entre os registros foi modificado.

Produtos e Contatos são relacionados por meio de um relacionamento muitos para muitos. Para relacionar o primeiro registro da tabela Contatos com o primeiro registro da tabela Produtos:

Relate( First( Products ).Contacts, First( Contacts ) )

Como os relacionamentos muitos para muitos são simétricos, também poderíamos ter feito isso na direção oposta:

Relate( First( Contacts ).Products, First( Products ) )

Para remover o relacionamento entre esses registros:

Unrelate( First( Products ).Contacts, First( Contacts ) )

ou:

Unrelate( First( Contacts ).Products, First( Products ) )

O passo a passo a seguir realiza exatamente essas operações nessas tabelas usando um aplicativo com os controles Gallery e Combo box para a seleção dos registros envolvidos.

Esses exemplos dependem dos dados de amostra que estão sendo instalados em seu ambiente. Criar um ambiente de teste, incluindo dados de amostra ou Adicionar dados de amostra a um ambiente existente.

Um para muitos

Função Relate

Você primeiro criará um aplicativo simples para visualizar e reatribuir as reservas associadas a um produto.

  1. Criar um aplicativo de dados do zero.

  2. Na guia Exibir, selecione Fontes de dados.

  3. No painel Dados, selecione Adicionar dados> selecione Produtos.
    A tabela Produtos faz parte dos dados de exemplo carregados acima.

  4. Na guia Inserir, adicione um controle Gallery vertical em branco.

  5. Certifique-se de que o controle que você acabou de adicionar seja nomeado Gallery1, mova e redimensione-o para preencher o lado esquerdo da tela.

  6. Na guia Propriedades, defina a propriedade Items de Gallery1 como Products e seu Layout como Image and title.

    Configurar ProductsGallery.

  7. Em Gallery1, certifique-se de que o controle Label está nomeado Title1, e defina sua propriedade Text como ThisItem.Name.

    Configurar o rótulo em Gallery1.

  8. Selecione a tela para evitar a inserção do próximo item em Gallery1. Adicione um segundo controle Gallery vertical em branco e verifique se ele recebeu o nome Gallery2.

    Gallery2 mostrará as reservas para qualquer produto selecionado pelo usuário em Gallery1.

  9. Mova e redimensione Gallery2 para preencher o quadrante superior direito da tela.

  10. (opcional) Adicione o controle Label azul acima de Gallery2, como mostra o próximo gráfico.

  11. Na barra de fórmulas, defina a propriedade Items de Gallery2 para Gallery1.Selected.Reservations.

    Configurar itens do Gallery2.

  12. No painel de propriedades, defina Layout de Gallery2 como Título.

    Configurar layout do Gallery2.

  13. Em Gallery2, adicione um controle Combo box, certifique-se de que ele está nomeado como ComboBox1, e depois mova-o e redimensione-o para evitar o bloqueio de outros controles em Gallery2.

  14. Na guia Propriedades, defina a propriedade Items de ComboBox1 como Products.

    Defina a propriedade Items como Products.

  15. Role para baixo na guia Propriedades e defina a propriedade Allow multiple selection de ComboBox1 como Off.

    Defina Permitir múltipla seleção como Desligado.

  16. Na barra de fórmulas, defina a propriedade DefaultSelectedItems de ComboBox1 como ThisItem.'Product Reservation'.

    Definir DefaultSelectedItems como ReserveCombo.

  17. Em Gallery2, defina a propriedade OnSelect de NextArrow2 para esta fórmula:

    Relate( ComboBox1.Selected.Reservations, ThisItem )
    

    Quando o usuário seleciona esse ícone, a reserva atual muda para o produto que o usuário selecionou em ComboBox1.

    Configurar NextArrow2.

  18. Pressione F5 para testar o aplicativo no modo de visualização.

Com esse aplicativo, o usuário pode mover uma reserva de um produto para outro. Para uma reserva em um produto, o usuário pode selecionar um produto diferente em ComboBox1 e depois selecione NextArrow2 para alterar essa reserva.

Demonstrar a função Relate no aplicativo um-para-muitos.

Função Unrelate

Nesse ponto, você pode mover o relacionamento de um registro para outro, mas não pode remover o relacionamento completamente. Você pode usar a função Unrelate para desconectar um registro de reserva de qualquer produto.

  1. Na guia Exibir, selecione Fontes de dados.

  2. No painel Dados, selecione Adicionar fonte de dados>Microsoft Dataverse>Reservas>Conectar.

  3. Em Gallery2, defina a fórmula OnSelect para NextArrow2 nesta fórmula:

    If( IsBlank( ComboBox1.Selected ),
        Unrelate( Gallery1.Selected.Reservations, ThisItem ),
        Relate( ComboBox1.Selected.Reservations, ThisItem )
    );
    Refresh( Reservations )
    

    Ícone Configurar à Direita.

  4. Copie Gallery2 para a área de transferência selecionando-o e depois pressione Ctrl-C.

  5. Cole uma duplicata de Gallery2 para a mesma tela pressionando Ctrl-V e mova-o para o quadrante inferior direito da tela.

  6. (opcional) Se você adicionou um rótulo acima de Gallery2, repita as duas etapas anteriores desse rótulo.

  7. Verifique se a duplicata de Gallery2 está nomeada como Gallery2_1 e defina sua propriedade Items dessa fórmula:

    Filter( Reservations, IsBlank( 'Product Reservation' ) )
    

    Um aviso de delegação aparece, mas não importa com a pequena quantidade de dados neste exemplo.

    Definir a propriedade Items de Gallery2_1.

Com essas alterações, os usuários podem limpar a seleção em ComboBox1 para um contato se essa pessoa não tiver reservado um produto. Os contatos que não reservaram um produto aparecem em Gallery2_1 onde os usuários podem atribuir cada contato a um produto.

Demonstrar as funções Relate e Unrelate no aplicativo um-para-muitos.

Muitos para muitos

Criar um relacionamento muitos-para-muitos

Os dados de exemplo não incluem um relacionamento muitos-para-muitos, mas você criará um entre a tabela Produtos e a tabela Contatos. Os usuários podem relacionar cada produto a mais de um contato e cada contato a mais de um produto.

  1. Nesta página, selecione Dados na barra de navegação esquerda e, em seguida, selecione Tabelas.

    Abrir lista de tabelas.

  2. Altere o filtro da tabela para incluir todas as tabelas.

    Por padrão, as tabelas de exemplo não aparecem.

    Remover filtro de tabela.

  3. Role para baixo, abra a tabela Produto e selecione Relacionamentos.

  4. Selecione Adicionar relacionamento>Muitos para muitos.

  5. Selecione a tabela Contato para o relacionamento.

  6. Selecione Concluído>Salvar tabela.

Contatos Relate e Unrelate com um ou mais produtos

Você criará outro aplicativo que se assemelha ao criado anteriormente neste tópico, mas o novo aplicativo oferecerá um relacionamento de muitos para muitos. Cada contato poderá reservar vários produtos em vez de apenas um.

  1. Em um aplicativo em branco para tablets, crie Gallery1 como o primeiro procedimento descreve neste tópico.

  2. Adicione outro controle Gallery vertical em branco, verifique se ele está nomeado Gallery2 e mova-o para o canto superior direito da tela.

    Posteriormente neste tópico, você adicionará um controle Combo box em Gallery2.

  3. Na barra de fórmulas, defina a propriedade Items de Gallery2 como Gallery1.Selected.Contacts.

    Configurar ContactsGallery - propriedade Items.

  4. Na guia Propriedades, defina Layout como Imagem e título.

    Configurar ContactsGallery - Layout.

  5. Em Gallery2, certifique-se de que o controle Label está nomeado Title2, e defina sua propriedade Text como ThisItem.'Full Name'.

    Nenhum texto aparecerá nesse controle até você concluir este procedimento e atribuir um contato a um produto.

    Mostrar nome do contato.

  6. Exclua NextArrow2, insira um ícone Cancelar e verifique se ele recebeu o nome icon1.

  7. Defina a propriedade OnSelect do ícone Cancelar como esta fórmula:

    Unrelate( Gallery1.Selected.Contacts, ThisItem )
    

    Configurar ícone Cancelar.

  8. Na guia Exibir, selecione Fontes de dados.

  9. No painel Dados, selecione Adicionar fonte de dados>Microsoft Dataverse>Contatos>Conectar.

  10. Em Gallery2, adicione um controle Combo box, certifique se está nomeado com ComboBox1, e defina sua propriedade Items como Contacts.

    Configurar a propriedade Items da caixa de combinação.

  11. Na guia Propriedades, defina Permitir múltipla seleção como Desligado.

    Configurar a propriedade Layout da caixa de combinação.

  12. Insira um ícone Adicionar, e defina sua propriedade OnSelect para esta fórmula:

    Relate( Gallery1.Selected.Contacts, ComboBox1.Selected )
    

    Configurar ícone Adicionar.

Com esse aplicativo, os usuários agora podem se relacionar livremente e não relacionar um conjunto de contatos com cada produto.

  • Para adicionar um contato a um produto, selecione o contato na caixa de combinação na parte inferior da tela e selecione o ícone Adicionar.

  • Para remover um contato de um produto, selecione o ícone Cancelar desse contato.

    Ao contrário de um para muitos, um relacionamento muitos para muitos permite que os usuários associem o mesmo contato a vários produtos.

Demonstrar as funções Relate e Unrelate no aplicativo muitos-para-muitos.

Ao contrário: relacione e não relacione produtos com vários contatos

Relacionamentos muitos para muitos são simétricos. Você pode estender o exemplo para adicionar produtos a um contato e alternar entre as duas telas para mostrar como o relacionamento aparece em qualquer direção.

  1. Defina a propriedade OnVisible de Screen1 como Refresh( Products ).

    Quando você atualiza um relacionamento um-para-muitos ou muitos-para-muitos, apenas os dados da primeira tabela de argumento da chamada a Relate ou Unrelate é atualizada. O segundo deve ser atualizado manualmente se você quiser alternar entre as telas deste aplicativo.

    Defina a propriedade OnVisible para a função Refresh.

  2. Duplicar Screen1.

    A duplicata será nomeada Screen1_1 e formará a base para observar os relacionamentos do lado dos contatos.

    Duplicar uma tela.

  3. Para criar a visão reversa, altere essas fórmulas nos controles 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 será muito semelhante à tela anterior, mas chega ao relacionamento do lado de Contatos.

    Mostrar relacionamento muitos-para-muitos, começando com contatos.

  4. Insira um ícone Setas para baixo e defina a propriedade OnSelect como Navigate( Screen1, None ). Faça a mesma coisa em Screen1 com a fórmula Navigate( Screen1_1, None ).

    Adicionar navegação entre telas.

Com essa nova tela, os usuários podem adicionar um contato a um produto e, em seguida, alternar para a exibição de contatos e ver o produto associado. Os relacionamentos são simétricos e compartilhados entre as duas telas.

Demonstrar relacionamento muitos-para-muitos de ambos os lados.