Gestionar excepciones en Power Automate
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Hola a tod@s, en la siguiente entrada vengo a presentaros como gestionar las excepciones dentro de los flujos de Power Automate.
El caso, es que hay muchos ejemplos similares por internet, de cómo se estructura las excepciones, para controlar los errores inesperados de nuestros flujos. Pero estos flujos, se me quedaban un poco escasos en sus explicaciones, ya que no cubren del todo las necesidades para los proyectos en los que participo. En la mayoría de mis flujos, son utilizados desde aplicaciones de PowerApps, que necesitan devolver a la aplicación ciertos valores de retorno, aunque se produzca algún error.
Por ello, os traigo unas estructuras de gestión las excepciones en los flujos de Power Automate, a través de ejemplos muy sencillos y ejecutados desde una aplicación de PowerApps, con retorno de valores.
División entre cero
Para este ejemplo de gestión de excepción, y pidiendo disculpas a Microsoft, se va a simular que, desde una aplicación de PowerApps, no es capaz de ejecutar el comando 'DIV' para obtener el cociente de una división. Al no disponer de esta función, se va a utilizar los flujos de Power Automate, para hacer esta operación matemática.
Como se sabe, este tipo de operaciones matemáticas, cuando el divisor, es cero, el resultado de la operación da un error. Por este motivo y para controlar el error provocado, se va a encapsular esta operación matemática en una estructura de 'Try-Catch-Finally' dentro del flujo de Power Automate.
Para este ejemplo, se ha adaptado la estructura clásica de 'Try-Catch-Finally', que hay en todos los lenguajes de programación de hoy en día, y aquí no iba a ser diferente.
Las secciones 'Try-Catch-Finally', son componentes de tipo 'Ámbito', para agrupar las diferentes acciones del flujo de Power Automate, en cada una de las fases de su estructura.
-
En la sección 'Try', se ejecutan las acciones del cálculo del cociente y resto de la división, guardando los resultados en sus correspondientes variables de retorno del flujo de Power Automate
-
La sección 'Catch',se ejecuta al producirse un error no controlado en alguna de las acciones de la sección 'Try', los valores de retorno se establecen como valores nulos, en la Power Automate.
Además, en este caso, se indica que el flujo no se ha ejecutado correctamente a través de una variable de retorno. Esto es como emular las funciones 'TryParse' de C# de muchos conversores de datos que hay, que indican el resultado de la conversión.
-
En la sección 'Finally', si fuera necesario en la lógina de negocio, se establece la continuación de acciones en el flujo de Power Automate, con los valores establecidos en las secciones 'Try' o 'Catch' ejecutadas anteriormente.
Para este ejemplo, no era necesario, realizar más acciones dentro de esta sección.
Para que el correcto funcionamiento de cada sección de la estructura 'Try-Catch-Finally', hay que configurar correctamente cada sección o acción con referencia a la sección o acción anterior del flujo de Power Automate.
De esta forma, se podrá establecer que secciones o acciones se ejecutan o no según los resultados de ejecución de las secciones o acciones anteriores. Para establecer este tipo de condiciones hay que ir a la opción 'Configurar ejecución posterior' de cada sección o acción y establecer la que corresponda en cada momento.
Por defecto, todas las secciones o acciones, se ejecutarán, siempre y cuando la sección o acción anterior, se haya ejecutado correctamente.
Para esta estructura de 'Try-Catch-Finally', la configuración de ejecución de las secciones o acciones, con las anteriores secciones o acciones es la siguiente:
-
La sección 'Try', solo se ejecuta cuando la acción anterior, se haya ejecutado correctamente.
-
La sección 'Catch', solo se ejecuta cuando en la sección 'Try', se haya producido algún error en alguna de sus acciones, no controladas en el flujo de Power Automate.
-
La sección 'Finally', se ejecutará cuando se de alguna de las siguientes casuísticas:
-
Cuando la sección 'Catch' se ha ejecutado correctamente, al haberse ejecutado tras un error en la sección 'Try'
-
Cuando la sección 'Catch' no se ha ejecutado, ya que en la sección 'Try' no se ha producido ningún error no controlado.
-
A continuación, se muestra ejecuciones del flujo de Power Automate, tanto para cuando se produce un error inesperado, como para cuando toda la ejecución principal se ejecuta correctamente.
Hay que indicar que este tipo de flujos de Power Automate, se sigue conectando y utilizando de igual manera que otros flujos de Power Automate en las aplicaciones de PowerApps.
A continuación, se muestra la conexión del flujo en la PowerApps, que, tras su ejecución, se guarda los resultados obtenidos en una variable de contexto, para luego ser utilizados en otros componentes de la aplicación de PowerApps.
Enviar una solicitud HTTP a SharePoint
Para este ejemplo, debido a que no hay unas mecánicas desde PowerApps, que permita saber si el usuario de ejecución de la PowerApps, pertenece a un grupo concreto de SharePoint dentro de una colección de sitios determinados, esta comprobación se puede realizar a través de un flujo de Power Automate.
Para realizar, este tipo de comprobaciones, es necesario utilizar la acción 'Enviar una solicitud HTTP a SharePoint' que permite hacer consultas a SharePoint a través de su 'Api Rest'.
NOTA IMPORTANTE: Para hacer esta comprobación de usuarios en grupos de SharePoint, se va a usar una consulta 'Api Rest', que puede dar errores, dependiendo de las configuraciones establecidas en grupo de SharePoint de la colección de sitios. Pero hay otra consulta 'Api Rest', que cubre esta necesidad y que no provocarían este error y no requiere de esta estructura de gestión de errores en Power Automate.
Para este ejemplo, la estructura de gestión de excepciones, no es una estructura clásica de 'Try-Catch-Finally', lo que se va a aplicar es una paralelización del flujos y se ejecutar la rama correspondiente según los resultados de ejecución de la sección o acción anterior.
-
En la acción 'Enviar una solicitud HTTP a SharePoint - Get User In Group', al preguntar por si el usuario actual, este agregado a un grupo de SharePoint en esa colección de sitios, provocará un error por no estar agregado. Este error, se produce debido a que la configuración del grupo al que se pregunta, tiene seleccionada la opción en la configuración 'Integrantes del grupo' en la configuración '¿Quién puede ver la participación del grupo?' en la sección 'Configuración del grupo'
-
En la sección 'Status Error - Catch' de la paralelización de acciones, se procede a gestionar el error, que en este caso se ha optado por mandar un correo por ejemplo a la cuenta del CAU de Briconsejos SharePoint, para que atienda el error. Esto dependerá de la lógica de negocio que se requiera en cada situación.
-
En la sección 'Status Success' de la paralelización de acciones, se procede a gestionar la respuesta correcta del servicio de Api Rest, para determinar si el usuario pertenece o no al grupo indicado.
-
La acción 'Responder a una instancia de PowerApps o a un flujo' está destinado a devolver los resultados obtenido en el flujo Power Automate a la aplicación de PowerApps.
Para el correcto funcionamiento de cada sección o acción de la estructura que gestiona los errores inesperados, hay que configurar correctamente cada sección o acción con referencia a la sección o acción anterior del flujo.
De esta forma, se podrá establecer que secciones se ejecutan o no según los resultados de ejecución de las secciones o acciones anteriores. Para establecer este tipo de condiciones hay que ir a la opción 'Configurar ejecución posterior' de cada sección o acción y establecer la configuración que corresponda en cada momento.
Por defecto, todas las secciones o acciones, se ejecutarán, siempre y cuando la sección o acción anterior, se haya ejecutado correctamente.
Para esta estructura de gestión de errores no controlados, la configuración de ejecución de las secciones o acciones, con las anteriores secciones o acciones son las siguientes:
-
La acción 'Enviar una solicitud HTTP a SharePoint - Get User In Group', solo se ejecutará cuando la acción anterior, se haya ejecutado correctamente.
-
La sección 'Status Error - Catch', solo se ejecuta cuando en la acción 'Enviar una solicitud HTTP a SharePoint - Get User In Group', se produzca algún error en la respuesta del servicio Api Rest de SharePoint.
-
La sección 'Status Success', se ejecuta cuando la acción 'Enviar una solicitud HTTP a SharePoint - Get User In Group', no genero ningún error en su acción.
-
La acción 'Responder a una instancia de PowerApps o a un flujo', se ejecuta cuando se de alguna de las siguientes casuísticas:
-
Cuando la sección 'Status Error - Catch' se ha ejecutado correctamente, al haberse producido un error en la acción 'Enviar una solicitud HTTP a SharePoint - Get User In Group' y la sección 'Status Success' no haberse ejecutado por el error.
-
Cuando la sección 'Status Success', se ha ejecutado correctamente, al no haberse producido ningún error en la acción 'Enviar una solicitud HTTP a SharePoint - Get User In Group' y al omitirse por tanto las acciones de la sección 'Status Error - Catch'
-
NOTA IMPORTANTE: Al volver a unificar los distintos flujos, la 'Configurar ejecución posterior' dependerá del número de ramificaciones realizadas y su configuración para cada ramificación. En mi caso, me costó conseguir las configuraciones correctas, ya que había una rama que no estaba correctamente configurada en esta sección, debido a que el interfaz de usuario que se proporciona, no refresca las opciones marcadas al cambiar de sección a configuración.
A continuación, se muestra ejecuciones del flujo de Power Automate, tanto para cuando se produce un error inesperado, como para cuando no se produce ningún problema en su ejecución.
Hay que indicar que este tipo de flujos de Power Automate, se sigue conectando y utilizando de igual manera que otros flujos de Power Automate en las aplicaciones de PowerApps.
A continuación, se muestra la conexión del flujo en la PowerApps, que, tras su ejecución, se guarda el resultado obtenido en una variable de contexto a nivel global, para luego ser utilizados en otros componentes de la aplicación de PowerApps.
NOTA: No sé por qué no me funciona la devolución de datos desde la Power Automate a la aplicación de PowerApps, en formato 'Boolean', así que lo devuelvo en formato 'Text' y luego hago una comparación del texto devuelto, para almacenar el resultado en la variable de contexto global en formato 'Boolean'.
Antes de terminar con la entrada, recordaros que en los flujos de Power Automate, en la herramienta 'Comprobador de flujo' se va notificando de avisos, donde se pueden producir errores inesperados y que sería conveniente tenerlos en cuenta en el flujo por si hubiera que crear estructuras para tratar las excepciones.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones