Cuando todo se va poco a poco entrelazando en la Power Platform, cada vez surgen más ideas y necesidades que se acaban convirtiendo en nuevas características y posibilidades. Cuando se anunció que se podría modificar la famosa barra de herramientas de las aplicaciones Model-driven (o Ribbon, como se conoce en inglés y popularmente) utilizando la interfaz unificada, a muchos se nos iluminó la mente. La posibilidad de ejecutar código PowerFx, sin necesidad de pasar por Javascript y la aplicación de XRMToolbox abría la posibilidad al low code y aquellos que trabajamos con Power Platform de un modo más profesional, de ir poco a poco cerrando todos los componentes sin mucho desarrollo de por medio.
Imaginaros ejecutar actualizaciones y llamar flujos de Power Automate con sus botones personalizados. El problema, tal y como mencionó mi compañero Enrique Romero en su blog (Crea botones para llamar a power automate desde el nuevo command designer - Dynamics Box), es que cuando Microsoft lanzó el command designer, se podía llamar un flujo de Power Automate como normalmente lo llamamos desde una Power App. A día de hoy, Microsoft ha retirado esa funcionalidad y si queremos llamar un flujo, pues bueno, se nos complica un poco. La primera opción que tenéis es llamando un flujo por HTTP tal y como apunta Enrique en su blog (no voy a reinventar la rueda publicando aquí lo mismo), el problema que se nos presenta:
- Muchos clientes tienen el conector HTTP restringido en sus entornos (Políticas DLP) y por lo tanto no es una opción ejecutar el flujo con un desencadenante HTTP.
Solución: Vamos a actualizar un campo de control a la table que desencadene el flujo automático.
¡Vamos allá!
Paso 1:
Pensamos desde qué formulario/vista de la model-driven queréis lanzar el flujo. Esto es necesario porque será en esa tabla donde vamos a crear la nueva columna.
Paso 2:
Creamos una columna de tipo "Fecha y hora" en la tabla y la llamamos "Último lanzamiento del flujo". El nombre depende de cada uno, si vais a lanzar varios flujos aseguraros que el campo es fácil de identificar por el nombre:
Paso 3:
Editamos la model-driven app y seleccionando los tres puntos al lado del nombre de la tabla, hacemos click en "Editar barra de comandos" y elegimos qué barra de comandos editar. Yo en este caso selecciono la del formulario principal.
Paso 4:
Utilizando el menú de mano izquierda hacemos click en Nuevo->Comando. Le damos un nombre al botón e incluso podemos personalizarlo con el icono que queramos. Lo importante es que como acción dejemos la opción que viene por defecto "Ejecutar fórmula".
Paso 5:
A continuación vamos a modificar la barra de comando de ese mismo botón, así que donde originalmente pone "true" en el evento OnSelect del botón (tal y como muestra la imagen anterior). Introducimos la siguiente fórmula:
Patch([nombre de la tabla], Self.Selected.Item,{'[nombre de la columna]': Now()})
Esta fórmula básicamente actualiza el campo que recién hemos creado con la hora actual en el momento de hacer click en el botón. Creo que podéis ir intuyendo el funcionamiento: cada vez que alguien le de al botón, el campo se va a actualizar con la fecha y esta es totalmente única (horas, minutos y segundos).
Le damos a "Guardar y publicar" y ya podemos cerrar la pestaña.
Paso 6:
Vamos a crear un nuevo flujo automatizado en la solución, el desencadenante será "Cuando se agrega, modifica o elimina una fila". Y lo rellenaremos de la siguiente manera:
Tipo de cambio: Cuando se modifica
Tabla: vuestra tabla
Ámbito: eso depende de vuestra solución, normalmente "Organización"
Lo importante es ponerle una condición a este flujo, sino cada vez que se modifique algún campo de la tabla saltará el flujo, y en este caso solo queremos que se ejecute cuando se actualice ese campo (Que sabemos que solo se actualiza desde el Ribbon). Haz click en "opciones avanzadas" e introduce el nombre de la columna que has creado en el campo "Seleccionar columnas". Recuerda que debes utilizar el Nombre, no el Nombre para mostrar:
Paso 7:
¡Voilá! Ya tenemos toda la lógica montada. Cada vez que alguien haga click en el botón, el campo se actualizará y eso hará que el flujo se ejecute.
Bonus: Mi recomendación es que para evitar la impaciencia del usuario final, en el mismo Power FX donde se realiza el Patch, mandéis una notificación a la model-driven comunicando al usuario que el flujo se ejecutará por detrás (para que no hagan click múltiples veces e impacten el proceso).
Bonus 2: Mi recomendación es que al terminar el flujo, mandéis una notificación al usuario que actualizó el registro (Modificado Por) informando que el flujo ya ha terminado. Podéis utilizar la tabla de Notificaciones para realizar push de éstas en la aplicación.
Conclusión: Tenemos varias opciones de lanzar un flujo hasta que nos permita llamar a la acción "Run" directamente desde el Power Fx del Command Designer. Como he comentado más arriba esta es mi preferencia pues evita pasar por el conector HTTP y además siempre deja registro en la tabla de cuando se hizo click en el botón. Obviamente si introducís un campos Sí/No en el formulario y ejecutáis el flujo cada vez que el usuario cambie su valor, el funcionamiento sería el mismo pero no del todo:
- Un campos Sí/No no permitiría que varios usuarios ejecutaran el flujo de manera casi simultánea, hasta que el campos no volviera a recuperar su valor antiguo.
- A nivel de experiencia de usuario, el botón es más intuitivo y simple.
0 Comentarios