21 febrero, 2024

SELECCIONAR ELEMENTOS DE UNA GALERIA Y MOSTRALOS CON UN FILTRO EN OTRA GALERIA

Hola a todos!

He estado con dudas sobre si publicar sobre este tema, pero finalmente me he decidido ha hacerlo, la razón es que puede ser de utilidad en determinados casos y creo que es interesante mostrarlo.

Se trata del siguiente ejemplo, imaginad que tenéis que mostrar una galería con muchos datos, y que la pantalla de Power Apps no os llegará para mostrar todo. Es posible que incluso tengáis el programa desarrollado en varias pantallas.

Pues bien, una solución a este problema es mostrar la información en varias galerías, en la primera una sería de Ítems y en la segunda el resto ( incluso en una tercera).

Os pongo el ejemplo de los datos de la plantilla de una almacén, donde ha construido dos galerías para mostrar la información:

Y lo que queremos hacer es que cuando seleccionemos a algunas personas en la lista de arriba, se muestren filtradas en la lista de abajo. Y la premisa es que vayamos acumulando la selección y se vaya mostrando en la galería de abajo. Ojo, esto es importante porque si fuese mostrar únicamente una sola persona en la selección sería un planteamiento de código distinto.

Además queremos que se coloree el ítem seleccionado en la Galería superior y los seleccionados en la inferior (que serán todos)

Por lo tanto, lo primero que vamos a hacer es ocuparnos del color:

Para ello en la propiedad TemplateFill de la primera galería vamos a escribir este código:

If(
    Checkbox2.Value;
    RGBA(
        224;
        241;
        225;
        1
    );
    RGBA(
        0;
        0;
        0;
        0
    )
)

Y en la segunda galería, en la misma propiedad, este código:

If(
    LookUp(
        Gallery3.AllItems;
        ID = ThisItem.ID
    ).Checkbox2.Value;
    RGBA(
        224;
        241;
        225;
        1
    );
    RGBA(
        0;
        0;
        0;
        0
    )
)

Es decir, buscamos en la primera galería los elementos seleccionados y si la condición es true los coloreamos.

El para dar respuesta a la otra necesidad, la de los datos filtrados, vamos a colocar este código en la propiedad Items de la segunda galería:

If(
    CountIf(
        Gallery3.AllItems;
        Checkbox2.Value
    ) > 0;
    SortByColumns(
        Filter(
            PERSONAS;
            ID in Filter(
                Gallery3.AllItems;
                Checkbox2.Value = true
            ).ID
        );
        "Title";
        SortOrder.Ascending
    );
    SortByColumns(
        PERSONAS;
        "Title";
        SortOrder.Ascending
    )
)

Que dice lo siguiente, si existe algún elemento filtrado en la galería 3 (la primera), se mostrarán los datos que que tengan el checkbox activado y los datos ordenados alfabéticamente. En caso contrario, se mostrará todo.

El asunto de este código es que he tenido que utilizar la función IN de Power Apps, que es una función que NO delega y por lo tanto dependiendo del número de los elementos de nuestra galería puede ser problemática o no. Por ello, antes de implementar este código, analizad si se adecúa a vuestros requerimientos.

Finalmente este es el resultado:

De esta forma, podemos ver claramente el resto de información de las personas que hemos seleccionado.

No obstante estoy investigando si existe otra alternativa sin advertencias de delegación.

Y esto es todo, espero que sea de utilidad.

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies