Trabajar con relaciones de uno a varios

Completado

Las relaciones de uno a varios son las relaciones de Dataverse más habituales con las que trabajará. Esta unidad continúa el escenario relativo a la solución de espacios de trabajo compartidos (hot desking) en Contoso. Para ayudar a explicar cómo trabajar con relaciones en una aplicación de lienzo, los siguientes ejemplos usarán la relación entre las tablas Ubicación y Escritorio. El siguiente diagrama es una visualización de la relación y los datos correspondientes.

Diagrama de la relación de uno a varios, que muestra el registro de ubicación en el lado Uno y varios registros de escritorio que se muestran en el lado Varios de la relación.

Si quiere permitir que un usuario seleccione una ubicación y que los escritorios de esa ubicación se muestren en una galería debajo, puede crear una pantalla similar a la del siguiente ejemplo.

Captura de pantalla de una interfaz de usuario de ejemplo que muestra la lista desplegable Ubicación 1 seleccionada, seguida de una lista de escritorios en la ubicación seleccionada

Al igual que la mayoría de orígenes de datos, puede usar la función Filter() para filtrar los escritorios y mostrar solo los escritorios de la ubicación seleccionada. Su fórmula se parecería a la que se muestra en el siguiente ejemplo.

Captura de pantalla de una fórmula que configura un origen de datos en el ejemplo anterior

Puesto que trabaja con una relación de uno a varios de Dataverse, puede usar la notación de puntos para hacer referencia a los escritorios de la ubicación usando Control.Selected.Desks, como se muestra en la siguiente fórmula.

Captura de pantalla de la fórmula alternativa para la propiedad Items de la galería de escritorio

En este ejemplo, las dos fórmulas generan la misma lista de escritorios relacionados con la ubicación seleccionada. El uso de la notación de puntos es más simple y conciso que el de la función Filter().

Cuando navega por una relación de uno a varios mediante el uso de la sintaxis de notación de puntos, de forma predeterminada, obtendrá todos los registros relacionados. Puede usar un filtro para aplicar más criterios a las filas relacionadas. La siguiente expresión utiliza la relación de uno a varios y también filtra los resultados en el estado activo.

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

Asimismo, puede usar la relación a partir de la fila de escritorio. Considere un ejemplo en el que, en la galería, desea mostrar la dirección de la ubicación de cada escritorio. Tal vez se encuentre familiarizado con el uso de una búsqueda para recuperar el registro de ubicación y luego acceder a la columna de dirección como una propiedad.

Captura de pantalla de una fórmula asignada a la propiedad de texto de un control

En lugar de usar la fórmula Lookup(), puede usar la notación de puntos y la referencia ThisItem.Location.Address.

Captura de pantalla de la fórmula simplificada para asignar la dirección de ubicación del escritorio

No está limitado a un nivel de navegación de relaciones. Por ejemplo, si tiene una ubicación con un contacto principal relacionado y desea mostrar la columna de nombre completo, podría redactar la siguiente fórmula:

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

Al usar la notación de puntos, puede incluir rápidamente datos relacionados, independientemente del lado de la relación desde el que comience.

La manera más sencilla de establecer la relación de uno a varios es mediante un formulario de edición para crear o actualizar la fila relacionada. Cuando agrega la columna de búsqueda al formulario, usa la función Choices() para presentar los posibles valores al usuario. En el siguiente ejemplo se muestra el proceso de agregar una fila de escritorio en el que la columna de búsqueda de ubicación se agrega al formulario.

Captura de pantalla de un formulario de edición para el registro de escritorio, con la búsqueda de ubicación representada mediante un control desplegable

Las propiedades avanzadas del control desplegable muestran cómo la propiedad Items está configurada.

Captura de pantalla de las propiedades avanzadas del control desplegable que se usan para la columna de búsqueda de ubicación.

Al usar la función Choices(), eliminará la necesidad de agregar la tabla de búsqueda como otro origen de datos. El resultado de la función Choices() es una tabla, así que puede agregar más filtrado y ordenación de la siguiente manera:

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

Si ya tenía el valor de búsqueda que quería establecer (por ejemplo, al crear un registro de escritorio desde la pantalla Ubicación), podría establecer la propiedad DefaultSelectedItems en el valor de la tarjeta de datos y luego establecer la propiedad Visible del campo de formulario en Desactivado. Esta configuración permitiría pasar el valor predeterminado cuando se invoca la función SubmitForm().

Captura de pantalla de la expresión que establece el valor predeterminado para la ubicación en la lista desplegable

Si usa la función Patch() para establecer una columna de búsqueda, establezca el valor de la columna en un registro de la tabla principal. En el siguiente ejemplo se muestra el establecimiento de una relación entre una fila de escritorio y una fila de ubicación principal que está seleccionada actualmente en la lista desplegable de ubicaciones.

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

También puede lograr el mismo resultado con la función Relate(). El primer parámetro es la lista de filas (escritorios) relacionadas con la fila principal (ubicación), mientras que el segundo parámetro es la fila (escritorio) que se agregará a esa lista o están relacionadas.

Relate(FilterLocation_1.Selected.Desks,ThisItem)

De igual manera, puede usar la función Unrelate() para desasociar las filas, por ejemplo, eliminando ThisItem (Desk) de los escritorios que están asociados con la ubicación seleccionada FilterLocation_1.Selected.

Unrelate(FilterLocation_1.Selected.Desks,ThisItem)

Cuando se utilice la función Unrelate(), recuerde que se establecerá el valor de la búsqueda principal en el registro relacionado para Nada (o nulo). Evite tener filas huérfanas porque es posible que la aplicación no pueda mostrar la fila sin la asociación principal. En el ejemplo de Contoso, si la lista de escritorios se muestra solo en relación con la ubicación, cualquier escritorio sin una ubicación quedará huérfano e inaccesible a través de la aplicación. Esta situación también puede producirse como efecto secundario de eliminar la fila principal cuando la propiedad de comportamiento de la relación está configurada para eliminar el vínculo a las filas relacionadas.