Hace unas semanas, preparando la sesión para el Global Power Platform Bootcamp 2021, me di cuenta que la serie de artículos que había escrito sobre Power Automate & MSDyn365FO estaba incompleta…, me había dejado una de las opciones que tiene disponible el conector de Dynamics 365 Finance and Operations apps sin analizar: Ejecutar acción
Ejecutar acción
Desde la opción de ejecutar acción tenemos la posibilidad de ejecutar código X++ que exponemos a través de las entidades de datos de Dynamics 365 F&O. Exponer acciones OData a través de estas es bastante sencillo, veamos un ejemplo.
He creado una data entity de test que contiene la tabla CustGroup como origen de datos. Ahora, vamos a crear un método para obtener la descripción del grupo de clientes dado su código. Como podéis imaginar, es un código bastante sencillo.
1 2 3 4 5 |
[SysODataAction("CustGroupName", false)] public static Description getDescription(CustGroupId _custGroupId) { return CustGroup::find(_custGroupId).Name; } |
Una vez creado el método, lo único que necesitamos para exponerlo como un endpoint OData es decorar el propio método con el atributo SysODataAction, indicando el nombre que queremos dar a la acción, y si esta acción es un método de instancia o no.
Ahora, solo queda consumir la acción desde un flujo de Power Automate, lo cual es bastante sencillo.
Como siempre, comenzamos indicando la instancia de Dynamics 365 Finance and Operations sobre la que queremos ejecutar la acción, lo que nos permitirá elegir a posteriori la acción concreta que queremos ejecutar.
Una vez que hemos seleccionado tanto la instancia como la acción (Entidad-Acción), Power Automate obtiene los parámetros que necesitamos para poder ejecutarla utilizando el servicio MetadataService. Como podéis ver en la captura de pantalla, nos aparece el parámetro con el nombre exacto que le hemos dado en el método (_custGroupId).
Para finalizar, solo tenemos que indicar el Grupo de clientes y ejecutar el flujo de trabajo para ver si funciona correctamente.
Una vez ejecutado, podemos ver como se obtiene el nombre o descripción del grupo de trabajo que hemos pasado por parámetros.
Vamos a consultar el log del IIS para comprobar que, como podemos imaginar, lo que está haciendo es una llamada tipo POST sobre la acción CustGroupName (nombre que indicamos en el atributo SysODataAction) de la entidad AXZTests.
1 |
21-04-11 17:33:40 POST /data/AXZTests/Microsoft.Dynamics.DataEntities.CustGroupName ja.tomas@axazure.com - 200 |
Limitaciones
Tal y como nos ocurría en otras acciones, en esta ocasión también se ejecuta el código sobre la empresa que tiene asociada el usuario en las opciones de usuario, pero recordad que esta vez estamos ejecutando código X++ directamente, por lo que contamos con una mayor flexibilidad. Si necesitamos ejecutar estas acciones de manera independiente en distintas empresas, podríamos, por ejemplo, añadir el código de empresa a los parámetros de la acción, y jugar con el changeCompany dentro de la misma. ¡Problema solucionado! 😎