Power Automate Tip: Obtener el primer elemento de una colección


A veces, trabajando en Power Automate, nos topamos con una situación donde queremos extraer el primer elemento de una colección sin tener que caer en el iterador "Apply to each".
Spoiler alert: ¡Se puede hacer más fácil y elegante! 😎

Si tenés la certeza de que tu query siempre va a devolver al menos un resultado (ya sea porque lo limitás en la consulta o porque simplemente querés tomar el primer elemento, sin importar cuál sea), podés simplificar el proceso usando una expresión. De esta forma, evitás usar un "Apply to each" y resolvés todo en un solo paso.

Te muestro un ejemplo comparando ambos enfoques: el clásico usando "Apply to each" y el otro, que para mí es mas directo, sin el iterador.


💡Ejemplo práctico: Vamos a consultar la tabla "Casos" en Dataverse utilizando la acción "List Rows" y vamos a topear la consulta diciendole "quiero un solo elemento" en el "Count Row". Y vamos a almacenar el title del caso en una variable.

  • Usando "Apply to each"

Como ves en este caso, no tiene mucho sentido utilizar el iterador cuando sabemos que siempre vamos a estar manipulando un elemento. 


  • Utilizando expresión para obtener el primer elemento:

Para agregar una expresión, recorda hacer foco donde queres mapear el resultado, luego la ventana de "Agregar contenido dinámico" va a aparecer y tenes que ir a la solapa de "Expresión"



Luego, tu flujo va a quedar así:



¿No se ve mejor así?

La sintáxis genérica es la siguiente:


 first(outputs('Step_Name_Get_List_Rows')?['body/value'])?['attribute_name']

Es importante el nombre que le colocas a la acción de "List Rows" en mi caso le dejé el nombre sugerido pero si tu acción se llama "ObtenerCasos", en la expresión anterior tenes que reemplazar "Step_Name_Get_List_Rows" por  "ObtenerCasos".
¿Cómo sería la expresión para el ejemplo de obtener el title del caso?

La expresión final queda asi:


 first(outputs('List_Rows')?['body/value'])?['title']



Seguro esta expresión es mejorable. Se puede agregar un if validando si el Outputs('List_Rows')?['blody/value'] no sea nulo, etc. Pero en esencia, el objetivo de este tip era mostrar una posibilidad de obtener el primer elemento sin depender del "Apply to Each" 






Comentarios