Power Apps: filtros de galería con varios menús desplegables

Los filtros son una parte importante de cualquier diseño de galería de Power Apps ya que le permiten al usuario seleccionar unos cuantos criterios y rápidamente mostrar resultados que coincidan con dichos criterios en pantalla. Saber cómo filtrar de manera amigable es importante ya que es la única forma de revisar toda una lista de SharePoint. La comparación que tenga la búsqueda no nos dará resultados más allá del límite de delegación de 2000 filas.

El día de hoy vamos a aprender a filtrar una galería de Power Apps con múltiples menús desplegables incluyendo una opción «todo».

APLICACIÓN DE DÍA LIBRE PAGADO

Esta es usada por empleados de una compañía para pedir un día libre de trabajo. De esta forma, los gerentes pueden ver los detalles de todas las peticiones hechas por los empleados.

Power Apps filtros galería 0

Crearemos una nueva lista de SharePoint llamada «Día Libre Pagado» que incluya las columnas: FechaTiempoLibre(Date), TipoTiempoLibre(Text), Status(Text) y Empleado(Text).

FechaTiempoLibreEmpleadoTipoTiempoLibreStatus
1/1/2021Sebastian VPersonalEnviado
4/1/2021Ivan VVacacionesAprobado
5/1/2021Ivan VVacacionesAprobado
9/1/2021Ivan VVacacionesRechazado
12/1/2021Sebastian VPersonalEnviado
13/1/2021Claudia OVacacionesAprobado
15/1/2021Claudia OPersonalRechazado
18/1/2021Claudia OPersonalRechazado
19/1/2021Claudia OEnfermedadAprobado
21/1/2021Sebastian VPersonalEnviado

Abriremos Power Apps Studio y crearemos una nueva aplicación de lienzo en blanco. Añadiremos una conexión a la lista «Día Libre Pagado» de SharePoint y después insertaremos una galería dentro de la pantalla con «Día Libre Pagado» como la fuente de datos y mostrará la fecha, nombre del empleado, tipo del día libre y el estado de la petición.

Ahora colocaremos un set de menús desplegables combobox arriba de la galería. A cada desplegable le daremos un nombre: Tipo (drp_Type), Estado (drp_Status) y Empleado (drp_Employee). Una vez tengamos esto, nuestra app deberá verse de la siguiente forma:

Power Apps filtros galería 3


AÑADIENDO VALORES A LOS MENÚS DESPLEGABLES

Ahora que tenemos el diseño de la app nos enfocaremos en llenar nuestros menús con valores. El menú de Tipo tiene cuatro opciones justo como podemos ver a continuación incluyendo un valor en blanco en la primera posición.

Como solo hay tres posibles Tipos podemos usar este código en la propiedad de Objetos del menú Tipo para llenarlo con valores:

[Blank(), "Personal", "Enfermedad", "Vacaciones"]

El menú de Estado también tendrá cuatro opciones:

De la misma forma, solo tenemos tres posibles estados incluidos en el diseño de la app, por lo que los codificaremos en la propiedad de Objetos del menú Estado así como hicimos anteriormente.

[Blank(), "Enviado", "Aprobado", "Rechazado"]

En este caso el menú de Empleado solo nos mostrará 3 nombres, pero esto cambiará conforme el número de empleados en la compañía.

Dado que la lista de empleados puede cambiar con el tiempo, podemos usar este código en la propiedad de Objetos del menú desplegable para mostrar los nombres únicos mostrados en la columna de Empleados de la lista de SharePoint:

Ungroup(
Table(
{MyTables: Table({Result: Blank()})},
{MyTables: RenameColumns(
Distinct('Día Libre Pagado', Empleado),
"Result", "Value")
}
),
"MyTables"
)

NOTA: Dado que el código usado para el menú desplegable de empleados incluye la función DISTINCT, ya no será compatible con delegar. Si nuestra lista de SharePoint tiene más de 2000 filas entonces deberemos utilizar otro método (el cual veremos más adelante) para cambiar el tipo de datos de Empleado a Persona y en su lugar usaremos un selector de personas Combobox.

Todos los menús desplegables ahora tienen opciones que nos aparecerán cuando demos click.

Power Apps filtros galería 2

FILTRANDO LA GALERÍA

El paso final será usar los filtros para la galería de Power Apps usando los valores actuales seleccionados en cada menú, tal y como se muestra aquí:

Power Apps filtros galería 1

Podemos lograr esto usando una sola función FILTER en la propiedad de Objetos de la galería. Este patrón de código sí es compatible con delegar. Cuando un menú desplegable tenga un valor filtraremos la galería basado en la selección; de otro modo, si el menú tiene un valor en blanco nos mostrará todas las opciones para esa columna:

Filter(
     'Día Libre Pagado',
     drp_Type.Selected.Value=Blank() Or TipoTiempoLibre=drp_Type.Selected.Value,
     drp_Status.Selected.Value=Blank() Or Status=drp_Status.Selected.Value,
     drp_Employee.Selected.Value=Blank() Or Empleado=drp_Employee.Selected.Value
 )

FILTRAR GALERÍA CON UN SELECTOR DE PERSONAS

Como mencionamos antes, el menú desplegable de empleados puede ser reemplazado con un Selector de Personas, y así es cómo lo vamos a hacer:

Primero actualizaremos la columna de Empleado a tipo de Persona en la lista «Día Libre Pagado» de SharePoint. Dejaremos los demás datos tal y como están.

FechaTiempoLibreEmpleadoTipoTiempoLibreStatus
1/1/2021Sebastian VPersonalEnviado
4/1/2021Ivan VVacacionesAprobado
5/1/2021Ivan VVacacionesAprobado
9/1/2021Ivan VVacacionesRechazado
12/1/2021Sebastian VPersonalEnviado
13/1/2021Claudia OVacacionesAprobado
15/1/2021Claudia OPersonalRechazado
18/1/2021Claudia OPersonalRechazado
19/1/2021Claudia OEnfermedadAprobado
21/1/2021Sebastian VPersonalEnviado

Ahora añadiremos el conector Office365Users a nuestra app:

Crearemos un ComboBox llamado «cmb_Employee» y lo colocaremos al lado de los menús desplegables de Tipo y Estado.

Y escribiremos el siguiente código en las propiedades de cmb_Employee:

DisplayFields: ["Display Name"]
SearchFields: ["Display Name"]
Items: Office365Users.SearchUser({searchTerm: Self.SearchText, top: 100})
IsSearchable: true
SelectMultiple: false

Luego cambiaremos las propiedades de Objeto de la Galería a este código:

Filter(
     'Día Libre Pagado',
     drp_Type.Selected.Value=Blank() Or TipoTiempoLibre=drp_Type.Selected.Value,
     drp_Status.Selected.Value=Blank() Or Status=drp_Status.Selected.Value,
     cmb_Employee.Selected.DisplayName=Blank() Or Empleado=cmb_Employee.Selected.DisplayName
 )

Y con esto el selector de personas funciona junto a los demás filtros de galería en Power Apps.

Cualquier duda nos leemos abajo.

Power Apps: filtros de galería con varios menús desplegables

4 comentarios en «Power Apps: filtros de galería con varios menús desplegables»

  1. Hola, gracias por tu aportación tan valiosa para aquellas personas que vamos introduciéndonos a este tema, trate de reproducir este ejercicio en un desarrollo que estoy haciendo pero no me sale, esta es la sintaxis: Filter(Marcas_Tabla,
    FiltroProceso.Selected.Value=Blank() Or Proceso=FiltroProceso.Selected.Value,
    FiltroMarca.Selected.Value=Blank() Or ‘Clave/Nombre de marca’=FiltroMarca.Selected.Value)

    Me podrías ayudar en ver en que estoy fallando. Gracias

    1. Hola.
      Tu formula es muy rara. Exactamente que intentas hacer?
      Los Or no siempre funcionan del todo bien y no se el resultado que esperas.
      Lo comun seria
      Filter(
      Marcas_Tabla,
      Or(FiltroProceso.Selected.Value=Blank(), Proceso=FiltroProceso.Selected.Value),
      Or(FiltroMarca.Selected.Value=Blank(), ‘Clave/Nombre de marca’=FiltroMarca.Selected.Value)
      )
      Esto puede causar muchas delegaciones asi como esta, y eso puede afectar el rendimiento y resultados de la app.
      Otra forma posible (suponiendo es lo que buscas) puede ser:
      Filter(
      Marcas_Tabla,
      If(IsBlank(FiltroProceso.Selected.Value), true, Proceso=FiltroProceso.Selected.Value),
      If(IsBlank(FiltroMarca.Selected.Value), true, ‘Clave/Nombre de marca’=FiltroMarca.Selected.Value)
      )

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll hacia arriba