Cómo ordenar arrays en Power Automate

Ahora que hablamos un poco sobre Power Automate y cómo el automatizar procesos nos puede abrir muchas puertas a la hora de incrementar la productividad de procesos manuales que llegan a ser exhaustivos, podemos empezar a trabajar con algunas funciones vitales de Automate.

Una de las preguntas más comúnes que se encuentran al trabajar con arrays es «¿Se puede ordenar un array?», y la respuesta más común es que no se puede. Si bien Power Automate no tiene una manera dedicada para ordenar un array, hay una alternativa que podemos usar y es la que aprenderemos el día de hoy.

Vamos a diseñar este Power Automate como un «auxiliar», esto significa que podremos usarlo en cualquier otro Power Automate que creemos. Podemos ver esto como una forma de usar nuestro trabajo de manera eficiente donde tengamos código que sea compartido por múltiples áreas, o sea que no habrá necesidad de hacerlo una y otra vez. Esto nos será muy útil pues en caso de notar algún error, podremos arreglarlo en un solo lugar en vez de arreglar el mismo error en varios lugares.

Para mostrar esto en acción, tendremos algunas funciones que nos ayudarán con algunas de estas tareas. Entonces digamos que tenemos este montón de números que queremos ordenar. Como ya mencionamos, Power Automate no nos permite hacerlo de manera directa, pero podemos hacer lo siguiente.

POWER AUTOMATE

Si aun no sabes que es, puedes hacer click aquí.

Para mostrar que no es muy complicado hacer esto, aquí tenemos una imágen que nos muestra el proceso entero que se va a realizar:

Power Automate Flujo Completo

Visto así, es incluso algo simple, así que ahora lo analizaremos.

VARIABLES

Tal y como muestran estas imágenes, estaremos definiendo cinco variables:

arrays Power Automate variables

Y las definiremos de esta forma:

  •  Array principal. Aquí estaremos guardando el valor que recivamos dentro de un array. Esta función tendrá sentido más adelante.
  • Array acomodado. Por ahora estará vacía, pero al final contendrá todos los valores ya ordenados.
  • Array temporal. Usaremos este array para almacenar los valores restantes en cada paso del proceso. Por ejemplo, si tenemos un array que encuentra el número 1, se añadirá al array ordenado mientras que los demás irán al array temporal.
  • Valor mínimo. Esta será la variable que siempre contendrá el valor mínimo encontrado.
  • Array vacío. Esta variable es más para conveniencia que otra cosa, pues como hará falta reiniciar algunos de los arrays anteriores, el establecerlos a esta variable los vaciará.

EL PROCESO

El proceso entero será de la siguiente manera:

  • Encontrar el valor mínimo para empezar el array a ordenar y luego en el array temporal.
  • Añadirlo al array ordenado
  • Vaciar el array temporal
  • Añadir todos los demás objetos al array temporal
  • Repetir
ordenar arrays Power Automate 1

1. ENCONTRAR EL VALOR MÍNIMO

El por qué hay una distinción entre el array con todos los objetos y el array temporal es simple. Puesto que queremos que el array temporal tenga todos los elementos sin ordenar restantes, entonces queremos que busque el valor mínimo del grupo sin ordenar y lo analice. Cuando este se vacíe habremos terminado y tendremos el array ordenado.

ordenar arrays Power Automate 2

Para revisar si el array está vacío necesitaremos escribir lo siguiente en la condición:

empty(variables('TEMP_ARRAY'))

Para obtener el valor simple necesitaremos esta línea en flujo Compose:

min(variables('ARRAY_TO_SORT'))

Y para el Compose 2 lo podemos introducir de esta manera:

min(variables('TEMP_ARRAY'))

Lo cual, como podremos notar, es bastante sencillo.

VACIAR EL ARRAY

Una simple variable establecida nos será suficiente:

set variable array

Y ahora revisaremos si no hay errores y el valor mínimo no se encuentra aún en el array ordenado. Con esto, nos aseguramos de que no estamos poniendo valores en el array que no deban estar ahí.

condicion if

ENCONTRAR DUPLICADOS Y MOVER LOS DEMÁS VALORES AL ARRAY TEMPORAL

En un array podemos tener varias veces el mismo número, por lo que necesitaremos asegurarnos de que estamos capturándolos todos. Para esto revisaremos todos los números restantes y para cada uno haremos una de las siguientes opciones:

  • Añadirlo al array ordenado si es el mismo valor que el valor mínimo
  • Añadirlo al array temporal de no serlo
ordenar arrays Power Automate 4

AÑADIR EL VALOR AL ARRAY TEMPORAL

Si el número no es el mismo que el número mínimo, entonces podremos añadirlo al array temporal para que siga siendo analizado.

ordenar arrays Power Automate 3

A primera vista todo esto parecerá confuso, pero en realidad no es tan complicado. En términos simples, necesitamos encontrar una forma de buscar continuamente el valor mínimo y remover todas las veces que se encuentre del array desordenado para luego añadir los demás valores sin ordenar al array temporal y repetir el proceso tantas veces como haga falta.

Y para activarlo…

Para probar que funcione, abre un nuevo flujo de Automate y activalo con un disparador de HTTP. Vas a necesitar una URI, la cual se genero en el proceso de arriba. La puedes obtener de aquí.

metodo http receive

Luego, crea tu Flujo de Power Automate de la siguiente manera:

metodo post http

Claro que, de tener una función o acción dedicada para ordenar arrays las cosas serían bastante más fáciles, pero por ahora habrá que bastarnos con soluciones y métodos temporales como este para lograr estos efectos. Con esto se espera que puedas ir entendiendo mejor las funciones y la importancia de los Power Automates para poder trabajarlos más a fondo en futuras entradas.

Recuerda que tenemos un curso de Power Automate y Power Apps preparado para ti, puedes consultar sus detalles aquí

Cualquier duda nos leemos abajo.

Cómo ordenar arrays en Power Automate

4 comentarios en «Cómo ordenar arrays en Power Automate»

  1. Hola, espero te encuentres muy bien, tengo una consulta: estoy consumiendo una api por paginación a través de un do until, el resultado de cada página lo consolido en una variable a través de un append to array, pero una vez que quiero usar los valores en un select me muestra todo en null, lo que necesito es cargar una lista de sharepoint con la información, me podrías ayudar por favor.

    Muchas gracias y saludos

    1. Hola Cesar.
      Necesitaría checar tu procedimiento completo para poder decirte que esta pasando.
      Puntos centrales aquí.
      1. Checa el Json body de tu accion API, revisa que estes tomando el dato correcto segun la estructura JSON en la variable
      2. Analiza la salida final de tu variable matriz despues del until, esto lo puedes hacer con un compose.
      3. Revisa que en tu select estes tomando de forma correcta los datos de la salida de la matriz.

      Es lo que se me ocurre sin poder ver el flujo, si la estructura de la variable al final el append es donde falla, entonces revisa que no tengas nada que afecte a los valores antes del select.
      Saludos!

  2. Hola, tengo archivos en una carpeta en sharepoint que deseo unirlos en pdf. Los uno en pdf y esta bien, el problema es que no me los muestra en un orden específico, yo quisiera que me los muestre ordenado por el nombre del archivo.
    En power automate cuando uno pone la opcion de shrepoint «mostrar lista de archivos» y selecciono carpeta, al momento de usar el «aplicar a cada uno», esa lista se muestra como ellos quiera y no ordenado por el nombre del archivo.
    Yo sé que eso es un arreglo, como hago para ordenarlo? puede ser antes de la opción «aplicar a cada uno» para que me los retorne ordenado y ya al usar la opción «aplicar a cada uno» ya venga como yo lo quiero.
    Como puedo hacer eso?, estoy en un proyecto y estoy varado por eso. He buscado en internet y todos ordenan por un script en excel, pero no podria hacerlo así ya que una de las variables del arreglo es un contenedor de archivo.
    Muchas gracias

    1. Hola Leandro.
      Usa la acción ‘Seleccionar’ y crea un mapa donde la primer columna sea tu columna ordenante. Ya con eso tienes una nueva salida con las columnas que te importan en el orden que necesitas

      Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll hacia arriba