Filtro OData en SharePoint para objetos en Power Automate

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».

Filtro OData Power Automate 1

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.

Filtro OData Power Automate 2

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.

Filtro OData en SharePoint para objetos en Power Automate

21 comentarios en «Filtro OData en SharePoint para objetos en Power Automate»

  1. Hola… Una pregunta, como saber el nombre real de una columna de una biblioteca que almacena formularios de infopath.
    Gracias por la ayuda y muchos logros para ti

  2. Muchísimas gracias, este artículo me ayudó con un desarrollo en Power Automate que solo me traía las primeras 100 filas. Un capo, saludos!!!

  3. Hola Ángel, primero quiero felicitar te por tus vídeos, he aprendido mucho contigo, no sé si puedas ayudar me con algo. Me gustaría saber cómo filtro el número mayor de una columna sin usar otra variable de comparación, dentro de la acción obtener elemento.

    1. Hola Alejandra!
      Usa la accion de Sort para ordenar tus datos por esa columna, junto con solo traer la primer fila. Con eso obtienes la primer fila mayor de esa columna.
      Saludos

  4. Hola Angel,

    Enhorabuena por tu trabajo, estoy encontrando soluciones muy útiles para algunos proyectos. En mi caso, estoy haciendo una consulta de filtro sobre un Excel y quiero filtrar por dos valores. uno equal y otro startswith.

    He probado con esta expresión, pero no funciona:
    (CodSesion eq ‘MiContenidoDinámico’) and (startswith(Formador, ‘MiOtroContenidoDinámico’))

    Me devuelve este error:
    La cláusula de filtro no es válida: no se admite la operación. Actualmente, solo se admiten los valores únicos «eq», «ne», «contains», «startswith» o «endswith» .

    Gracias por la ayuda!

    1. Hola Samuel!
      Por el momento Power Automate no acepta condicionales AND y OR en Excel, por lo que siempre te va a marcar ese error.
      Las opciones mas sencillas son.
      1. Traer la consulta con un solo filtro y luego filtrar de nuevo en una accion filter
      2. Traer todo y filtrar con filter por los dos valores
      3. Cambiar tu DB a otra fuente como Sharepoint.

      Esas son las opciones que se me ocurren. Recuerda activar la paginación si tienes muchos valores.
      Saludos!

  5. Hola
    primero de todo felicidades, explicas las cosas muy bien…
    Y lo segundo..
    tengo este problema, en el filtro uso la expresion formatdatetime(adddays(utcnow(),+5),’yyyy-MM-dd’) y esto me devuelve 2022-03-27 y el filtro queda asi en las salidas:

    field_10 le ‘2022-03-27’ ( quiero extraer los registros con fecha menor o igual a 5 dias desde hoy ).

    pero en la salida de la tabla HTML me devuelve esto:
    Fecha
    2222-03-23
    2022-06-24
    2022-04-30

    no tiene en cuenta el filtro porque me esta devolviendo el 03-23 que es inferior…

    Sabrias porque?

    1. Hola Arturo!
      Cuéntame, que fuente de datos estas usando? Tu columna de datos son del tipo fecha?
      Ya que, por los valores que pones, parece que esta comparando textos y por eso salen esos numero, pero quiero confirmar 😁

  6. Hola, como estas?
    Primero dejame felicitarte por tus aportes,
    Una duda, me estoy trayendo desde excel registros en una tabla hacia una lista de sharepoint, pero la tabla viene con

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Scroll hacia arriba