Funções Relate e Unrelate no Power Apps

Relacione e anule a relação de duas entidades 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 as relações um-para-muitos, a entidade Many tem um campo de chave externa que aponta para um registo da entidade One. Relate define este campo para apontar para um registo específico da entidade One, enquanto Unrelate define este campo como blank. 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 entidade relacionada tem uma chave externa.

Os dados da entidade que especificar no primeiro argumento serão atualizados para refletir a alteração, mas os dados para a entidade que especificar 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 localizar esta de funcionalidade, selecione o menu Ficheiro, selecione Definições da aplicação e, em seguida, selecione Definições avançadas. O seu feedback é muito importante para nós. Dê-nos a sua opinião nos fóruns da comunidade do Power Apps.

Sintaxe

Relate( Entity1RelatedTable, Entity2Record )

  • Entity1RelatedTable - Required. Para um registo do Entity1, a tabela de registos Entity2 relacionados através de uma relação um-para-muitos ou muitos-para-muitos.
  • Entity2Record - Obrigatório. O registo Entity2 a adicionar à relação.

Unrelate( Entity1RelatedTable, Entity2Record )

  • Entity1RelatedTable - Required. Para um registo do Entity1, a tabela de registos Entity2 relacionados através de uma relação um-para-muitos ou muitos-para-muitos.
  • Entity2Record - Obrigatório. O registo Entity2 para remover da relação.

Exemplos

Considere uma entidade Products com as seguintes relações, tal como se vê no visualizador de entidades do portal do Power Apps:

Nome a apresentar da relação Entidade relacionada Tipo de relação
Reserva de produtos Reserva Um-para-muitos
Product ↔ Contacto Contacto Muitos para muitos

Produtos e Reservas estão relacionados através de uma relação um-para-muitos. Para relacionar o primeiro registo da entidade Reservas com o primeiro registo da entidade 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.

Produtos e Contactos estão relacionados através de uma relação muitos-para-muitos. Para relacionar o primeiro registo da entidade Contacts com o primeiro registo da entidade 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 executa exatamente estas operações nessas entidades ao utilizar uma aplicação com os controlos 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 Relate

Primeiro, crie uma aplicação simples para ver e reatribuir as reservas associadas a um produto.

  1. Crie uma aplicação de tablet de raiz.

  2. No separador Ver, selecione Origens de dados.

  3. No painel Dados, selecione Adicionar origem de dados > Common Data Service > Produtos > Ligar.

    A entidade Produtos faz parte dos dados de exemplo carregados acima.

    Adicionar a entidade Produtos como uma origem de dados

  4. No separador Inserir, adicione um controlo de Gallery vertical em branco.

  5. 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ã.

  6. No separador Propriedades, defina a propriedade Items de Gallery1 para Produtos e o respetivo Esquema para Imagem e título.

    Configurar ProductsGallery

  7. Em Gallery1, certifique-se de que o controlo Label é denominado Title1 e, em seguida, defina a respetiva propriedade Text como ThisItem.Name.

    Configurar a etiqueta em Gallery1

  8. 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.

    Gallery2 mostrará as reservas para qualquer produto que o utilizador selecione em Gallery1.

  9. Mova e redimensione Gallery2 para preencher o quadrante superior direito do ecrã.

  10. (opcional) Adicione o controlo Label azul acima de Gallery2, como mostra o gráfico seguinte.

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

    Configurar os itens de Gallery2

  12. No painel de propriedades, defina o Esquema de Gallery2 para Título.

    Configurar o Esquema de Gallery2

  13. 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.

  14. No separador Propriedades, defina a propriedade Items de ComboBox1 como Produtos.

    Definir a propriedade Set Items para Produtos

  15. Desloque-se para baixo no separador Propriedades e defina a propriedade Permitir seleções múltiplas de ComboBox1 como Desativado.

    Definir Permitir seleções múltiplas como Desativado

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

    Definir DefaultSelectedItems para ReserveCombo

  17. 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.

    Configurar NextArrow2

  18. 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.

Demonstrar a função Relate na aplicação um para muitos

Função Unrelate

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.

  1. No separador Ver, selecione Origens de dados.

  2. No painel Dados, selecione Adicionar origem de dados > Common Data Service > Reservas > Ligar.

  3. 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 )
    

    Configurar ícone Direito

  4. Copie Gallery2 para a Área de transferência ao selecioná-la e ao premir Ctrl-C.

  5. Cole um duplicado de Gallery2 no mesmo ecrã ao premir Ctrl-V e, em seguida, mova-a para o quadrante inferior direito do ecrã.

  6. (opcional) Se tiver adicionado uma etiqueta acima de Gallery2, repita os dois passos anteriores para essa etiqueta.

  7. 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.

    Definir a propriedade Items de Gallery2_1

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.

Demonstrar as funções Relate e Unrelate numa aplicação um para muitos

Muitos para muitos

Criar uma relação muitos-para-muitos

Os dados de exemplo não incluem uma relação muitos-para-muitos, mas criará uma entre a entidade Products e a entidade Contacts. Os utilizadores podem relacionar cada produto com mais de um contacto e cada contacto com mais de um produto.

  1. A partir desta página, selecione Dados na barra de navegação esquerda e, e, seguida, selecione Entidades.

    Abrir lista de entidades

  2. Altere o filtro de entidade para incluir todas as entidades.

    Por predefinição, as entidades de exemplo não são apresentadas.

    Remover filtro de entidades

  3. Desloque-se para baixo, abra a entidade Produto e selecione Relações.

    Separador Relações para a entidade Produto

  4. Selecione Adicionar relação > Muitos para muitos.

    Adicionar relação muitos para muitos

  5. Selecione a entidade Contacto para a relação.

    Selecionar a entidade Contacto

  6. Selecione Concluído > Guardar entidade.

    Lista de relações para a entidade Produtos

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.

  1. Numa aplicação em branco para tablets, crie Gallery1 como o primeiro procedimento neste tópico descreve.

  2. 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.

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

    Configurar ContactsGallery

  4. No separador Propriedades, defina o Esquema como Imagem e título.

    Configurar ContactsGallery

  5. 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.

    Mostrar nome do contacto

  6. Elimine NextArrow2, insira um ícone Cancelar e certifique-se de que tem o nome icon1.

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

    Unrelate( Gallery1.Selected.Contacts, ThisItem )
    

    Configurar ícone Cancelar

  8. No separador Ver, selecione Origens de dados.

  9. No painel Dados, selecione Adicionar origem de dados > Common Data Service > Contactos > Ligar.

  10. Em Gallery2, adicione um controlo Combo box, certifique-se de que tem o nome ComboBox1 e, em seguida, defina a propriedade Items como Contacts.

    Configurar a propriedade Items da caixa de combinação

  11. No separador Propriedades, defina Permitir seleções múltiplas como Desativado.

    Configurar a propriedade Layout da caixa de combinação

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

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

    Configurar o ícone Adicionar

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.

Demonstrar as funções Relate e Unrelate numa aplicação muitos para muitos

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.

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

    Quando atualiza uma relação um-para-muitos ou muitos para muitos, só são atualizados os dados da entidade do primeiro argumento da chamada Relate ou Unrelate. O segundo tem de ser atualizado manualmente se pretender alternar entre os ecrãs desta aplicação.

    Definir propriedade OnVisible para a função Refresh

  2. Duplicar Screen1.

    O duplicado será denominado Screen1_1 e formará a base para olhar para as relações do lado dos contactos.

    Duplicar um ecrã

  3. 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.

    Mostrar relação muitos-para-muitos a começar pelos contactos

  4. 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 ).

    Adicionar navegação entre ecrãs

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.

Demonstrar relação muitos-para-muitos de qualquer um dos lados

Nota

Pode indicar-nos as suas preferências no que se refere ao idioma da documentação? Responda a um breve inquérito. (tenha em atenção que o inquérito está em inglês)

O inquérito irá demorar cerca de sete minutos. Não são recolhidos dados pessoais (declaração de privacidade).