Menu

Menu

Microsoft Flow Tip: Cómo recuperar un solo valor de una consulta que devuelve múltiples registros

triangle triangle

Cuando comienzas a usar Microsoft Flow para automatizar tareas y mejorar la productividad de tu entorno una de acciones más comunes son las búsquedas de datos en base a filtros. Ya sea enfocado a recorrer registros de Dynamics, listas de Sharepoint, tablas en una base de datos SQL, etc., una de las desventajas de los conectores de Flow es que por norma general no ofrecen la posibilidad de hacer una búsqueda de un solo elemento filtrando por un campo que no sea su campo de identificación (Id).

 

Cuanto necesitamos filtrar un elemento, pero no disponemos de este identificador, tenemos que recurrir a una obtención de todas las filas y aplicar un filtro sobre este de la siguiente manera:

 

Ejemplo de obtención de datos en base a un filtro en Microsoft Flow

En este ejemplo podemos observar que utilizando la acción Obtener Filas de la sección SQL podemos definir no solo el listado de todas las filas de una tabla, en este caso TProvincias, sino que podemos filtrar estos resultados de la consulta. En este caso el filtro está establecido para que devuelva un registro que coincida con un Id obtenido anteriormente en el Flow que en esta tabla no es el Id principal. Además, como tenemos claro que esta consulta solo devolverá un registro limitamos el resultado a este registro asignando el primer puesto a 1.

 

Aquí viene el problema, si intentamos, por ejemplo, insertar esta provincia que hemos obtenido dentro de un registro de Dynamics con la acción Crear un nuevo registro sucederá lo siguiente:

 

 

En el momento en el que asignamos a uno de los campos de la creación del registro uno de los valores recuperados del paso anterior automáticamente se generará una condición de repetición entre todos los valores devueltos.

 

 

Esto ocurre porque al ser una obtención de filas, la salida del paso Obtener Provincia siempre será un array de resultados.

Esto supone una carga extra al proceso que entiende que tendrá que moverse entre múltiples resultados y además una complicación extra a la hora de entender el proceso que realizará el Flow.

Para evitar esto, siempre y cuando nos veamos obligados a utilizar una acción con este tipo de salida podemos recurrir a la operación de datos Compose o en español Redactar.

 

Esta acción nos permitirá quedarnos con aquellos elementos de la salida anterior que nos interesen, en este caso podremos filtrar que solo se recupere el primer elemento (y único) del

array devuelto.

 

Para esto tendremos que utilizar la expresión first en el editor avanzado de expresiones indicando desde donde obtenemos los datos y que valor específico buscamos, en este caso será el campo descripción del valor de salida de la acción Obtener_Provincia.

first(body('Obtener_Provincia')?)?

 

Ahora Podemos comprobar cómo, al usar la salida de esta acción en nuestra creación de registro de Dynamics el bucle no aparecerá quedando una estructura más limpia y mejorando el tiempo de procesado.

 

 

 

Como podemos ver no solo nos ahorramos este bucle sino bucles anidados en caso de necesitar recorrer más de una tabla en busca de estos registros. Ahora podemos ejecutar el proceso y comprobar el resultado:

 

Obtención de provincias

Ejecución de la acción Redactar

 

Esta útil acción de Redactar (Compose), no solo nos permitirá mantener una mejor estructura en nuestro Flow, sino que nos permitirá modelar las salidas de todo tipo de acciones para obtener aquellos resultados que necesitamos obviando los que no, de esta forma se convierte en una excelente solución para múltiples situaciones a lo largo de nuestra travesía por el mundo de la automatización con Microsoft Flow.