Un query de filtro OData es algo a tomar en cuenta pues con ello podemos optimizar nuestros flujos en Power Automate de forma dramática. Juntar todos los objetos y luego usar lógica condicional para hacer lo que buscamos no siempre es suficiente.
Cuando creamos un flujo para SharePoint en Microsoft Flow nos encontraremos muchas veces lidiando con listas de objetos, ya sea añadir objetos, remover objetos o actualizar objetos, todo lo cual es fácil. Una de las cosas más complicadas es la acción Get Items de SharePoint, pues rápido veremos que necesitamos entender la opción de query OData Filter.
Para entenderlo mejor empezaremos por
La manera errónea de hacerlo.
Cuando tenemos listas de objetos nos encontramos con que estamos obteniendo muchos objetos de vuelta, por lo que necesitamos usar condiciones u otras opciones dentro del Flujo para seleccionar solo los objetos correctos.
Siendo ese el caso entonces veremos que nuestro flujo se ve algo así.
La estructura general para buscar es una Condición, así como el primer paso dentro de un control «Aplicar a cada», mientras una de las ramas del control está vacía. En general, esto significa que simplemente juntamos muchos objetos y ahora estamos itinerando a través de muchos objetos, lo cual no es una buena idea.
La forma mejor y correcta de hacerlo con un query de filtro OData.
Dentro de la acción Get Items de SharePoint hay una opción «Filter Query» disponible. Este «Filter Query» se puede usar para seleccionar los objetos correctos, el problema con esta opción es que su síntaxis no es inmediatamente clara. La información del Tooltip tampoco es muy clara a nivel usuario, pero el verdadero problema con la síntaxis es que está mal.
Esto es lo que tendremos:
stringColumn eq 'string' AND numberColumn lt 123
Lo cual no funciona hasta que lo cambiemos al siguiente filtro de query:
(stringColumn eq 'string') and (numberColumn lt 123)
Para poder más sentido a este cambio, vamos a darle un vistazo a la síntaxis. Como regla general, el síntaxis de un query simple es:
fieldname operation value
Los nombres de campo que son usados son los nombres de campo interno tal como son usados por SharePoint. Estos nombres de campo interno pueden ser encontrados dentro de los ajustes de columna en SharePoint. Simplemente iremos a los ajustes para la columna y en el URL encontraremos el nombre del campo.
Las operaciones pueden ser (gracias a un usuario anónimo por la corrección)
- eq: igual
- lt: menor que
- gt: mayor que
- ge: mayor o igual a
- le: menor o igual a
- ne: desigual a.
Esto nos facilita el comparar un valor de campo a un valor real. Aun así, podemos encontrarnos con que necesitamos hacer el query en varios campos. La forma más fácil es haciendo uso de las operaciones «and» y «or».
Finalmente, el valor es el valor con el que vamos a comparar el nombre de campo. Es importante notar que necesitaremos usar apóstrofes (‘) en los valores. Para números, Automate acepta ambos valores con o sin apóstrofes, pero para valores de texto sí es necesario usarles, por lo que bien podemos optar por siempre usar apóstrofes.
Algunas expresiones utiles
Ya que mencionamos las funciones en el Filtro de Query nos sería útil darle un vistazo a las opciones disponibles y las formas potenciales de usarlas. Las siguientes funciones están disponibles dentro de los filtros de queries:
- endswith
- startswith
- substringof
- length
- day
- year
- hour
- minute
- second
Algunos son un tanto obvios, pero veamos algunos ejemplos.
endswith: endswith(MyField, 'test')
Este ejemplo seleccionará todos los objetos en donde MyField termine con «test».
startswith:
startswith(MyField, 'test')
Este ejemplo seleccionará todos los objetos en donde Mail_usuario empiece con «svallejo».
substringof
La función substringof es una que podemos malusar la primera vez que la intentemos, especialmente si estamos familiarizados con las funciones de startswith y endwith. La documnetación que encontremos al usar Google también puede estar mal, por lo que se recomienda leer una documentación más confiable, aunque esa página no parece listar todas las funciones disponibles.
Notemos cómo en el Filter Query tenemos que introducir el texto que estamos buscando seguido por el valor de campo. Por lo tanto, el ejemplo correcto es:
substringof('test',Title)
day, year, hour, minute, second
Cuando trabajamos con fechas, hacer queries por día puede ser útil. Por ejemplo, cuando queremos encontrar todos los objetos que fueron modificados en el primer día del mes, deberíamos poder usar la función day.
Los queries de filtro OData pueden ahorrarnos muchas molestias, sobre todo considerando las limitaciones de itineración en las filas al correr Power Automate.
Cualquier duda nos leemos abajo.