Una de las funciones de app más requeridas es Search, el problema es que la función Search de Power Apps tiene una limitante mayor debido a la delegación y es que no puede encontrar resultado alguno más allá de la fila 2000 en una tabla . Con eso en mente, ¿cómo es que podemos desarrollar búsquedas en Power Apps y ayudar a usuarios a encontrar la información que necesitan? El día de hoy veremos todo sobre la función Search en Power Apps y cómo podemos resolver sus problemas de advertencia de delegación.
APP DE BÚSQUEDA DE INVENTARIO DE CARROS
Para estos ejemplos vamos a usar una app para vendedores en una agencia de automóviles para determinar cuáles son los carros disponibles en inventario. Puedes conseguir un archivo con todos estos datos en esta página.
Para crear esta app vamos a crear una nueva lista de SharePoint llamada ‘Car Sales Inventory’ con las siguientes columnas:
- Año (número)
- Fabricante (texto de una sola línea)
- Modelo (texto de una sola línea)
En mi caso, yo escogí toda la data historica de la página, en esta sección.
Por lo que mi tabla se ve así.
Iniciaremos una nueva app en blanco en Power Apps Studio. Vamos a crear una barra de título con una entrada de texto en la parte superior en donde el usuario podrá escribir palabras clave para desarrollar una búsqueda.
Añadiremos la lista de SharePoint que creamos como una fuente de datos y después insertaremos una galería en la pantalla y la usaremos en la propiedad Items:
Vamos a escribir el siguiente código en la propiedad de texto de la etiqueta, lo cual hará que la galería nos muestre el año, fabricante y modelo de cada automóvil.
Concatenate(ThisItem.make," ",ThisItem.model," ",Text(ThisItem.year))
ESCRIBIENDO UNA FUNCIÓN SEARCH CON UNA ADVERTENCIA DE DELEGACIÓN
Actualizaremos el código en la propiedad Items de la galería para que incluya la función Search. Las columnas de fabricante y modelo pueden ser buscadas ya que son texto, pero la columna de año no ya que es un número.
Search('Car Sales Inventory', txt_Search.Text, "Make", "Model")
Cuando un usuario escribe sus términos de búsqueda en la barra de búsqueda, la galería que se encuentra abajo se actualizará para solo mostrar los resultados que coincidan.
La función Search producirá una advertencia de delegación ya que no está incluida en la lista de funciones delegables para SharePoint. Esto significa que por defecto solo las primeras 500 filas serán buscadas y regresadas o bien solo las primeras 2000 filas si incrementamos el límite en las opciones avanzadas.
Ahora veamos las soluciones. Existen dos posibles alternativas de delegación para la función Search.
1. DELEGACIÓN STARTSWITH PARA LA FUNCIÓN SEARCH
Si bien la función Search no puede ser delegada en SharePoint, la función StartsWith sí. Esto significa que podemos crear una barra de búsqueda que mire al inicio de cada palabra y muestre todos los resultados en la galería. El problema con esto es que cada palabra que sea encontrada en medio de una columna de texto no será regresada cuando busquemos.
Para usar la solución de delegación con StartsWith para Search vamos a usar este código en la propiedad Items de la galería:
Filter(Cars_Models,StartsWith(make,inpBuscar.Text) Or StartsWith(model,inpBuscar.Text))
DELEGACIÓN DATAVERSE EN OPERADOR PARA LA FUNCIÓN SEARCH
Si requerimos de capacidades de búsqueda completas entonces la solución final sería cambiar la fuente de datos de SharePoint a Dataverse for Teams] (el cual tampoco requiere de licencia premium). El operador IN puede ser delegado a Dataverse y podemos revisar los contenidos de una columna para una secuencia de texto que coincida. Esta función aun se encuentra en Vista Previa, por lo que debemos habilitarla yendo a Archivo > Opciones Avanzadas > Próximas Funciones > Vista Previa.
Luego de que cambiemos la fuente de datos a Dataverse for Teams y subamos nuestros datos de inventario podremos escribir una función FILTER como esta en la propiedad Items de la galería para hacer una búsqueda.
Filter(Cars_Models,inpBuscar.Text in make Or inpBuscar.Text in model)
Por desgracia, Dataverse for Teams esta disponible solo para apps en la Web, sin poder usarlas aún en un equipo celular, y solo para grupos selectos.
Cualquier duda nos leemos abajo.