Funciones Relate y Unrelate

Se aplica a: Aplicaciones de Canvas Aplicaciones basadas en modelos

Registros Relate y Unrelate de dos tablas mediante una relación de uno a varios o de varios a varios.

Descripción

La función Relate enlaza dos registros mediante una relación de uno a varios o de varios a varios en Microsoft Dataverse. La función Unrelate invierte el proceso y elimina el enlace.

Para relaciones uno a varios, la tabla de varios tiene un campo de clave externa que apunta a un registro de la tabla de uno. Relate establece este campo en apuntar a un registro específico de la tabla Uno, mientras que Unrelate establece este campo en en blanco. Si el campo ya está configurado cuando se llama a Relate, el enlace existente se pierde a favor del nuevo enlace. También puede establecer este campo utilizando la función Patch o un control Edit form; no necesita usar la función Relate.

Para relaciones de varios a varios, el sistema que vincula los registros mantiene una tabla de unión oculta. No puede acceder a esta tabla de unión directamente; se puede leer solo a través de una proyección de uno a varios y establecer a través de las funciones Relate y Unrelate. Ninguna tabla relacionada tiene una clave externa.

Los datos de la tabla que especifique en el primer argumento se actualizarán para reflejar el cambio, pero los datos de la tabla que especifique en el segundo argumento no. Esos datos deben actualizarse manualmente con la función Refresh para mostrar el resultado de la operación.

Estas funciones nunca crean o eliminan un registro. Solo relacionan o cancelan la relación de dos registros que ya existen.

Puede usar estas funciones únicamente en fórmulas de comportamiento.

Nota

Estas funciones son parte de una característica en vista previa y su comportamiento solo está disponible cuando se habilita la característica Datos relacionales, conjuntos de opciones y otras características nuevas para CDS. Esta es una configuración de nivel de aplicación que está habilitada de forma predeterminada para las aplicaciones nuevas. Para encontrar este interruptor de función, seleccione Configuración y luego seleccione Próximas funciones. Sus comentarios nos sirven de mucho: denos su opinión en los foros de la comunidad de Power Apps.

Sintaxis

Relacionar( Tabla1TablaRelacionada, Tabla2Registro )

  • Tabla1RelatedTable - Obligatorio. Para un registro de Table1, la tabla de registros Table2 relacionados a través de una relación de uno a varios o de varios a varios.
  • Tabla2Record - Obligatorio. El registro Table2 para agregar a la relación.

No relacionar( Tabla1TablaRelacionada, Tabla2Registro )

  • Tabla1RelatedTable - Obligatorio. Para un registro de Table1, la tabla de registros Table2 relacionados a través de una relación de uno a varios o de varios a varios.
  • Tabla2Record - Obligatorio. El registro Table2 para quitar de la relación.

Ejemplos

Considere una tabla Productos con las siguientes relaciones como se ve en el visor de tablas del portal de Power Apps:

Nombre para mostrar de la relación Tabla relacionada Tipo de relación
Reserva de producto Reserva Uno a varios
Contacto del producto ↔ Contacto Varios a varios

Los productos y las reservas están relacionados a través de una relación de uno a muchos. Relacionar el primer registro de la tabla Reservaciones con el primer registro de la tabla Productos:

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

Para eliminar la relación entre estos registros:

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

En ningún momento creamos o eliminamos un registro, solo se modificó la relación entre los registros.

Los productos y contactos están relacionados a través de una relación de muchos a muchos. Relacionar el primer registro de la tabla Contactos con el primer registro de la tabla Productos:

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

Como las relaciones de varios a varios son simétricas, también podríamos haber hecho esto en la dirección opuesta:

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

Para eliminar la relación entre estos registros:

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

o:

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

El recorrido que sigue hace exactamente estas operaciones en estas tablas utilizando una aplicación con los controles Gallery y Combo box para la selección de los registros involucrados.

Estos ejemplos dependen de los datos de muestra que se instalen en su entorno. Ya sea crear un entorno de prueba que incluya datos de muestra o agregar datos de muestra a un entorno existente.

Uno a varios

Función de relación

Primero creará una aplicación simple para ver y reasignar las reservas asociadas con un producto.

  1. Cree una aplicación de tableta vacía.

  2. En la pestaña Vista, seleccione Orígenes de datos.

  3. En el panel Datos, seleccione Agregar datos> seleccione Productos.
    La tabla Productos es parte de los datos de muestra cargados anteriormente.

  4. En la pestaña Insertar, agregue un control Gallery vertical en blanco.

  5. Asegúrese de que el control que acaba de agregar se llame Gallery1 y luego muévalo y cambie su tamaño para llenar el lado izquierdo de la pantalla.

  6. En la pestaña Propiedades, establezca la propiedad Items de Gallery1 en Productos y su Diseño como Imagen y título.

    Configurar ProductsGallery.

  7. En Gallery1, asegúrese de que el control Label se llama Title1 y luego establezca su propiedad Text en ThisItem.Name.

    Configurar la etiqueta en Gallery1.

  8. Seleccione la pantalla para evitar insertar el siguiente elemento en Gallery1. Agregue un segundo control Gallery vertical en blanco y asegúrese de que se llama Gallery2.

    Galería2 mostrará las reservas para cualquier producto que el usuario seleccione en la Galería1.

  9. Mueva y cambie de tamaño Gallery2 para llenar el cuadrante superior derecho de la pantalla.

  10. (opcional) Agregue el control Label azul sobre Gallery2, como muestra el siguiente gráfico.

  11. En la barra de fórmulas, establezca la propiedad Items de Gallery2 en Gallery1.Selected.Reservations.

    Configurar los elementos de Gallery2.

  12. En el panel de propiedades, establezca el Diseño de Gallery2 en Título.

    Configurar el diseño de Gallery2.

  13. En Gallery2, agregue un control Combo box, asegúrese de que se llama ComboBox1 y luego muévalo y cambie su tamaño para evitar bloquear los otros controles en Gallery2.

  14. En la pestaña Propiedades, establezca la propiedad Items de ComboBox1 en Productos.

    Establecer la propiedad Items en Productos.

  15. Desplácese hacia abajo en la pestaña Propiedades y establezca la propiedad Allow multiple selection de ComboBox1 en Desactivado.

    Establecer Permitir selecciones múltiples en Desactivado.

  16. En la barra de fórmulas, establezca la propiedad DefaultSelectedItems de ComboBox1 en ThisItem.'Product Reservation'.

    Establecer DefaultSelectedItems para ReserveCombo.

  17. En Gallery2, establezca la propiedad OnSelect de NextArrow2 en esta fórmula:

    Relate( ComboBox1.Selected.Reservations, ThisItem )
    

    Cuando el usuario selecciona este icono, la reserva actual cambia al producto que el usuario seleccionó en ComboBox1.

    Configurar NextArrow2.

  18. Presione F5 para probar la aplicación en modo de vista previa.

Con esta aplicación, el usuario puede mover una reserva de un producto a otro. Para una reserva en un producto, el usuario puede seleccionar un producto diferente en ComboBox1 y luego seleccionar NextArrow2 para cambiar esa reserva.

Demostrar la función Relate en una aplicación de uno a varios.

Función desrelacionar

En este punto, puede mover la relación de un registro a otro, pero no puede eliminar la relación por completo. Puede usar la función Unrelate para desconectar un registro de reserva de cualquier producto.

  1. En la pestaña Vista, seleccione Orígenes de datos.

  2. En el panel Datos, seleccione Agregar origen de datos>Microsoft Dataverse>Reservas>Conectar.

  3. En Gallery2, establezca la fórmula OnSelect para NextArrow2 en esta fórmula:

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

    Configurar el icono derecho.

  4. Copie Gallery2 en el portapapeles seleccionándolo y presionando CTRL-C.

  5. Pegue un duplicado de Gallery2 en la misma pantalla presionando Ctrl-V y luego muévalo al cuadrante inferior derecho de la pantalla.

  6. (Opcional) Si agregó una etiqueta sobre Gallery2, repita los dos pasos anteriores para esa etiqueta.

  7. Asegúrese de que el duplicado de Gallery2 se llama Gallery2_1 y luego establezca su propiedad Items en esta fórmula:

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

    Aparece una advertencia de delegación, pero no importará con la pequeña cantidad de datos de este ejemplo.

    Establecer la propiedad Items de Gallery2_1.

Con estos cambios, los usuarios pueden borrar la selección en ComboBox1 para un contacto si esa persona no ha reservado un producto. Los contactos que no han reservado un producto aparecen en Gallery2_1, donde los usuarios pueden asignar cada contacto a un producto.

Demostrar las funciones Relate y Unrelate en una aplicación de uno a varios.

Varios a varios

Crear nueva relación de varios a varios

Los datos de muestra no incluyen una relación de varios a varios, pero creará una entre la tabla Productos y la tabla Contactos. Los usuarios pueden relacionar cada producto con más de un contacto y cada contacto con más de un producto.

  1. Desde esta página, seleccione Datos en la barra de navegación izquierda y luego seleccione Tablas.

    Abrir la lista de tablas.

  2. Cambie el filtro de la tabla para incluir todas las tablas.

    De forma predeterminada, las tablas de muestra no aparecen.

    Quitar el filtro de tablas.

  3. Desplácese hacia abajo, abra la tabla Producto y seleccione Relaciones.

  4. seleccione Agregar relación>Varios a varios.

  5. Seleccione la tabla Contacto para la relación.

  6. Seleccione Hecho>Guardar tabla.

Relacionar y cancelar la relación de contactos con uno o más productos

Creará otra aplicación que se parece a la que creó anteriormente en este tema, pero la nueva aplicación ofrecerá una relación de varios a varios. Cada contacto podrá reservar múltiples productos en lugar de uno solo.

  1. En una aplicación en blanco para tabletas, cree Gallery1 como se describe en el primer procedimiento de este tema.

  2. Agregue otro control Gallery vertical en blanco, asegúrese de que se llama Gallery2 y luego muévalo a la esquina superior derecha de la pantalla.

    Más adelante en este tema, agregará un control Combo box bajo Gallery2.

  3. En la barra de fórmulas, establezca la propiedad Items de Gallery2 en Gallery1.Selected.Contacts.

    Configurar la propiedad ContactsGallery - Items.

  4. En la pestaña Propiedades, establezca Diseño en Imagen y título.

    Configurar ContactsGallery - Layout.

  5. En Gallery2, asegúrese de que el control Label se llama Title2 y luego establezca su propiedad Text en ThisItem.'Full Name'.

    Ningún texto aparecerá en ese control hasta que finalice este procedimiento y asigne un contacto a un producto.

    Mostrar el nombre del contacto.

  6. Elimine NextArrow2, inserte un icono Cancelar y asegúrese de que se llama icon1.

  7. Establezca la propiedad OnSelect del icono Cancelar en esta fórmula:

    Unrelate( Gallery1.Selected.Contacts, ThisItem )
    

    Configurar el icono Cancelar.

  8. En la pestaña Vista, seleccione Orígenes de datos.

  9. En el panel Datos, seleccione Agregar origen de datos>Microsoft Dataverse>Contactos>Conectar.

  10. Bajo Gallery2, agregue un control Combo box, asegúrese de que se llama ComboBox1 y luego establezca su propiedad Items en Contactos.

    Configurar la propiedad Items del cuadro combinado.

  11. En la pestaña Propiedades, establezca Allow multiple selection en Desactivado.

    Configurar la propiedad Layout del cuadro combinado.

  12. Inserte un icono Agregar y establezca su propiedad OnSelect en esta fórmula:

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

    Configurar el icono Agregar.

Con esta aplicación, los usuarios ahora pueden relacionar y cancelar la relación de un conjunto de contactos con cada producto libremente.

  • Para agregar un contacto a un producto, seleccione el contacto en el cuadro combinado en la parte inferior de la pantalla y luego seleccione el icono Agregar.

  • Para eliminar un contacto de un producto, seleccione el icono Cancelar para ese contacto.

    A diferencia de la relación de uno a varios, una relación de varios a varios permite a los usuarios asociar el mismo contacto con múltiples productos.

Demostrar las funciones Relate y Unrelate en una aplicación de varios a varios.

A la inversa: relacionar y cancelar la relación de productos con múltiples contactos

Las relaciones de varios a varios son simétricas. Puede ampliar el ejemplo para agregar productos a un contacto y luego pasar de una pantalla a otra para mostrar cómo aparece la relación desde cualquier dirección.

  1. Establezca la propiedad OnVisible de Screen1 en Refresh( Products ).

    Cuando actualiza una relación de uno a muchos o de muchos a muchos, solo se actualizan los datos de la primera tabla de argumentos de la llamada a Relate o Unrelate. El segundo debe actualizarse manualmente si desea pasar de una pantalla a otra de esta aplicación.

    Establecer la propiedad OnVisible para la función Refresh.

  2. Duplique Screen1.

    El duplicado se llamará Screen1_1 y formará la base para mirar a las relaciones desde el lado de los contactos.

    Duplicar una pantalla.

  3. Para crear la vista inversa, cambie estas fórmulas en los 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 )

    El resultado será muy similar a la pantalla anterior, pero se trata de la relación en el lado de los contactos.

    Mostrar una relación de varios a varios con contactos.

  4. Inserte un icono de flechas arriba abajo y establezca su propiedad OnSelect en Navigate( Screen1, None ). Haga lo mismo en Screen1 con la fórmula Navigate( Screen1_1, None ).

    Agregar navegación entre pantallas.

Con esta nueva pantalla, los usuarios pueden agregar un contacto a un producto y luego pasar a una vista de contactos y ver el producto asociado. Los relaciones son simétricas y se comparten entre las dos pantallas.

Demostrar una relación de varios a varios desde ambos lados.