Hay una característica interesante en Dynamics 365 F&O que nos permite mandar notificaciones cuando se cambian, crean o eliminan datos: el framework de alertas.

En este post, veremos cómo enviar las alertas como Business events, y enviar emails notificando a los usuarios usando un flujo de Power Automate.

Cuando casi había terminado de escribir el post, encontré este post y vídeo de Scott Gaines donde explica exactamente este mismo escenario. Échale un vistazo para una guía paso a paso más clara: Using Dynamics 365 Finance and Operations Alerts to Trigger Power Automate Flows.

¿Por qué? ¡El estandar ya lo hace!

Hay una funcionalidad estándar que ya lo hace, puedes configurar una alerta y seleccionar un destinatario para el email y añadir un mensaje:

Diálogo de creación de alerta en F&O
Diálogo de creación de alerta en F&O

Entonces, ¿por qué alguien iba a duplicar esa funcionalidad fuera de Dynamics 365 F&O? Ojo, esto sólo es mi opinión, pero el correo electrónico que manda el estándar es más feo que el Fary chupando limones. Mira esto:

Correo de alerta del estándar
Correo de alerta del estándar

Además, ¡no se puede personalizar! Ni poner el logotipo de tu empresa. Aparte de añadir un mensaje fijo en el campo Mensaje al crear la alerta, no puedes añadir placeholders como hacemos en las plantillas de correo electrónico, por ejemplo.

En el pasado, pregunté acerca de esto en el grupo del Programa Dynamics Insider y me dijeron que mandase una idea, así que lo hice, aquí está la idea. Pero después de casi 4 años, no tengo mucha confianza en que esto se implemente, especialmente viendo que podemos hacerlo usando Power Automate.

Business events de alertas

Tenemos dos lotes disponibles para las alertas:

  • Alertas basadas en cambios: incluyen eventos de creación, eliminación o actualización.
  • Alertas por fecha de vencimiento: se activan cuando una fecha supera un límite.

Ambos tipos también están disponibles como Business events en la categoría «Alerts». Cuando se activa una alerta, se emite un evento del mismo tipo que la alerta.

Sin embargo, para que esto funcione, tenemos que marcar el campo «Send externally» al configurar la alerta.

Alerta configurada con el campo send externally marcado
Alerta configurada con el campo send externally marcado

Antes de continuar, vamos a crear una alerta en el formulario de grupos de clientes. Seleccionamos el campo «Terms of payment», el evento «has changed», y en la pestaña «Alert me with» habilitamos el campo «Send externally». Como en la imagen superior.

Power automate

Now we’ll configure the flow. Start by creating a new automated cloud flow, and in the dialog that will open, press the skip button.

As a trigger, search for «Fin & Apps» and you should see the «When a Business Event occurs» trigger. Select your instance, Alerts in the category field, When an alert rule is triggered in the business event field, and the company where you configured the alert in the Legal entity field. In my case, that’s Contoso’s USMF.

Ahora configuraremos el flow en Power Automate. Empezamos por crear un nuevo flujo automatizado y, en el cuadro de diálogo que se abrirá, le damos al botón skip.

Como trigger, busca «Fin & Apps» y deberías ver el trigger «When a Business Event occurs». Selecciona tu instancia de F&O, «Alerts» en el campo category, «When an alert rule is triggered» en el campo «evento»Business event», y la empresa donde configuraste la alerta en el campo «Legal entity». En mi caso, es la USMF de Contoso.

When a business event occurs
When a business event occurs

This trigger will return a JSON body, we need to parse it to be able to have all the JSON memebers as a separate field in the dynamic fields’ dialog in the flow designer.

Add a Parse JSON action, and as the Content field, select the body that’s returning the trigger. Now we must define the schema. The schema is a definition that tells the parse block which fields are expected, and its type. Instead of doing this by hand, we will use the «Generate from sample» button.

Save the flow as it is, and go back to the Business Events workspace. Select the BusinessEventsAlertEvent business event and click the «Download schema» link on the right pane:

Este trigger devolverá un JSON, necesitamos parsearlo para poder tener todos los miembros del JSON como un campo separado en el diálogo de campos dinámicos en el diseñador de flujos.

Añade una acción Parse JSON, y como campo Content, selecciona el cuerpo que devuelve el trigger. Ahora debemos definir el esquema. El esquema es una definición que le dice al bloque Parse JSON qué campos se esperan, y su tipo. En lugar de hacer esto a mano, utilizaremos el botón «Generate from sample».

Guardamos el flujo tal y como está, y volvemos al workspace de Business Events en F&O. Selecccionamos el evento BusinessEventsAlertEvent y clicamos en el enlace «Download schema» en el panel derecho:

Descargar el schema de un business event de F&O
Descargar el schema de un business event de F&O

This will download a JSON file with sample data. Open it and copy the content. Then go back to the Power Automate designer, click the «Generate from sample» button and paste the content of the file into the dialog that opens, and finally click the Done button.

This will generate the schema. Now we need to design a nice email, because that was what I didn’t like in the first place, right? And how will we do this? With our old friends adaptive cards!

Go to the adaptive cards designer, select «Outlook Actionable Messages»and design the one that makes you happy.

Esto descargará un archivo JSON con datos de ejemplo. Abrimos y copiamos el contenido. A continuación, volvemos al diseñador de Power Automate, hacemos clic en el botón «Generarte from sample» y pegamos el contenido del archivo en el cuadro de diálogo que se abre y, por último, hacemos clic en el botón Done.

Esto generará el esquema. Ahora necesitamos diseñar un email bonito, porque eso era lo que no me gustaba al principio, ¿verdad? ¿Y cómo lo haremos? ¡Con nuestras viejas amigas las adaptive cards!

Vamos al diseñador de adaptive cards, seleccionamos «Outlook Actionable Messages «y diseña el que más te guste.

Adaptive card para email de Outlook
Adaptive card para email de Outlook

En mi caso he añadido un logotipo en la esquina superior izquierda, un título en negrita de tamaño grande, un campo de texto y un botón de tipo OpenUrl.

En el diseñador de adaptive cards, puedes copiar y pegar la estructura JSON de la tarjeta desde el «Card payload editor» en la parte inferior de la página. La utilizaremos más adelante, pero primero crearemos el texto que se mostrará en la tarjeta.

Añade un nuevo bloque compose después de la acción Parse JSON, y escribe lo que quieres mostrar en el email. En mi caso, he hecho esto:

Texto de adaptive card en un bloque Compose de PowerAutomate
Texto de adaptive card en un bloque Compose de PowerAutomate

The TableLabel field (which comes from the Parse JSON action) will display the name of the table. The KeyValue1 and KeyValue2 fields display what we define in the TitleField1 and TitleField2 of the table, in the case of the CustGroup table the CustGroup and Name fields.

Next, add another compose block. Here we will use the JSON content of the adaptive card. But wait a second, we can’t just paste it! In order for the email to display the content correctly, we must wrap the JSON content inside this:

El campo TableLabel (que viene de la acción Parse JSON) mostrará el nombre de la tabla. Los campos KeyValue1 y KeyValue2 muestran lo que tengamos en TitleField1 y TitleField2 de la tabla, en el caso de la tabla CustGroup los campos CustGroup y Name.

A continuación, añadimos otro bloque Compose. Aquí utilizaremos el contenido JSON de la tarjeta adaptativa. Pero esperad un segundo, ¡no podemos pegarlo y ya está! Para que el correo electrónico muestre el contenido correctamente, debemos envolver el contenido JSON dentro de esto:

<script type="application/adaptivecard+json">
CONTENIDO JSON
</script>

Así debería verse nuestro bloque Compose:

<script type="application/adaptivecard+json">
{
    "type": "AdaptiveCard",
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.4",
    "body": [
        {
            "type": "ImageSet",
            "images": [
                {
                    "type": "Image",
                    "size": "Small",
                    "url": "URL_OF_LOGO"
                }
            ],
            "imageSize": "Small"
        },
        {
            "type": "Container",
            "items": [
                {
                    "type": "TextBlock",
                    "text": "SUBJECT_FIELD_PARSE_JSON",
                    "wrap": true,
                    "id": "Title",
                    "weight": "Bolder",
                    "size": "Large",
                    "fontType": "Default"
                }
            ]
        },
        {
            "type": "Container",
            "items": [
                {
                    "type": "TextBlock",
                    "text": "OUTPUT_FROM_TEXT",
                    "wrap": true,
                    "id": "Text"
                }
            ]
        },
        {
            "type": "Container",
            "items": [
                {
                    "type": "ActionSet",
                    "actions": [
                        {
                            "type": "Action.OpenUrl",
                            "title": "Go to record",
                            "id": "OpenBtn",
                            "url": "LINK_FIELD_PARSE_JSON"
                        }
                    ],
                    "id": "OpenBtn"
                }
            ]
        }
    ]
}
</script>

Hay 4 cosas que tenemos que cambiar para adaptarlo a nuestros valores:

La URL de tu logo:

La URL de tu logo
URL

El campo Subject que devuelve el paso Parse JSON:

El campo Subject que devuelve el paso Parse JSON
Asunto del mail

La salida (output) de la acción Compose en la que hemos escrito el cuerpo del correo:

La salida (output) de la acción Compose en la que hemos escrito el cuerpo del correo
Cuerpo del mail

Y finalmente el campo Link del Parse JSON:

El campo Link del Parse JSON
Enlace al registro

Por último, añadimos una acción «Send an email (V2)» y completamos el campo From con las personas que deben recibir el correo electrónico. Este valor no viene en el contenido JSON del Business event, tenemos que añadir los destinatarios a mano. Esto puede parecer peor que añadir los emails en la alerta dentro de F&O, pero siempre puedes usar listas de distribución o grupos de email en lugar de añadir todas las direcciones.

A continuación, en el campo Subject ponemos el campo Subject de la acción Parse JSON, y en el campo Body añada el output de la acción compose con el contenido de la adaptive card, la última que hicimos.

Guardamos el flow, vamos al formulario de grupos de clientes y cambiamos el valor de las condiciones de pago de cualquier registro. El flujo se disparará, y deberías recibir un email parecido a este:

Correo con la adaptive card
Correo con la adaptive card

Lo sé, no es mucho más bonito que el estándar, pero gracias a las adaptive cards podemos hacerlo aún mejor. Solo que yo no lo he hecho mejor.

En conclusión, el uso de Power Automate junto con el framework de alertas en Dynamics 365 F&O no sólo mejora la versatilidad y utilidad de las alertas, sino que también ofrece oportunidades para crear notificaciones más personalizadas y visualmente agradables.

¡Suscríbete!

Recibe un correo cuando se publique un nuevo post
Author

Microsoft Dynamics 365 Finance & Operations technical architect and developer. Business Applications MVP since 2020.

Write A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

ariste.info