power automate msdyn365fo a fondo

Power Automate & MSDyn365FO: A fondo (II)

Continuamos con la serie de artículos sobre Power Automate y las distintas operaciones que pueden realizarse sobre Microsoft Dynamics 365 Finance and Operations apps.

Como vimos en el artículo anterior, gracias al conector premium de MSDyn365FO para Power Automate, disponemos de una serie de desencadenadores y acciones para interactuar con nuestro sistema. En este nuevo artículo vamos a empezar a hablar de las acciones, concretamente de las distintas acciones de lectura que existen, que son:

Si quieres aprender más sobre el desencadenador disponible, echa un vistazo a este artículo en el que verás un caso práctico de como lanzar un Cloud Flow de Power Automate cuando un evento de negocio ocurre: No-Code: Extender MSDyn365FO con la Power Platform – Juan Antonio Tomás (jatomas.com)

Obtener lista de entidades

La primera acción que vamos a ver es la de Obtener lista de entidades. Esta es una acción bastante sencilla en la que únicamente debemos indicar un parámetro de entrada, que es la URL de la instancia sobre la que se ejecutará.

Power Automate - Obtener lista de entidades
Power Automate – Obtener lista de entidades

El resultado que nos devuelve la ejecución de la misma es bastante precedible, un listado con todas las entidades públicas que tenemos en el sistema, tal y como podemos ver en la siguiente captura.

Power Automate - Obtener lista de entidades - Resultado
Power Automate – Obtener lista de entidades – Resultado

Si vamos a ver el log del IIS sobre el que estamos ejecutando las operaciones, podemos comprobar que la operación que estamos lanzando sobre el sistema no es más que una llamada GET a la url https://jatomas.cloudax.dynamics.com/data/.

Es decir, que el resultado es el mismo que el que obtenemos cuando hacemos una llamada a esa URL desde el propio navegador, solo que en formato JSON.

Lista de entidades obtenida desde el navegador https://cloudax.jatomas.dynamics.com/data
Lista de entidades obtenida desde el navegador https://cloudax.jatomas.dynamics.com/data

Obtener un registro

Si lo que queremos es realizar una consulta sobre un registro concreto de la base de datos, podemos utilizar la acción Obtener un registro. Para ello, necesitamos indicar los siguientes parámetros:

Power Automate - Obtener un registro
Power Automate – Obtener un registro
  • Instancia: Url de la instancia de MSDyn365FO sobre la que queremos actuar.
  • Nombre de entidad: Nombre de la entidad sobre la que queremos realizar la consulta (Clientes, Grupos de clientes, Proveedores, Productos…).
  • Id de objeto: Identificador único del registro que deseamos obtener.

El Id de objeto, por lo general, está formado por el código de la empresa (dataAreaId), seguido de el valor o valores de los campos que componen la clave primaria de la entidad. Podemos consultar los valores que forman este id de objeto de diferentes formas. Por ejemplo, pongamos que queremos obtener un Grupo de clientes concreto. Una opción sería ir a Visual Studio, buscar la DataEntity CustCustomerGroupEntity y ver los campos que forman la PK de la misma.

Clave primaria de la entidad de grupos de clientes desde Visual Studio
Clave primaria de la entidad de grupos de clientes desde Visual Studio

Por otro lado, podemos utilizar un pequeño truco dentro de Power Automate, ejecutando la acción únicamente con el código de empresa en el Id de objeto. Obviamente, la ejecución será errónea, pero en el resultado de la misma nos indica cuales son los valores que tenemos que indicar.

Detalles de error de ejecución
Detalles de error de ejecución

En este caso concreto, debemos indicar el DataAreaId y el CustomerGroupId.

Power Automate - Obtener registro de grupos de clientes
Power Automate – Obtener registro de grupos de clientes

IMPORTANTE: Los valores dentro del Id de objeto, deben ir exactamente en el orden indicado, separados por coma ( , ), y sin espacios entre ellos, tal y como vemos en la imagen anterior.

Una vez completados los parámetros correctamente, podemos ver el resultado de la ejecución en el que obtenemos un JSON con todos los datos del grupo de clientes que hemos indicado.

Power Automate - Obtener un registro - Resultado de ejecución
Power Automate – Obtener un registro – Resultado de ejecución

Vamos de nuevo a revisar el log del IIS para comprobar las operaciones que se realizan durante la ejecución.

Como podemos ver, la ejecución de la acción resulta en una llamada GET sobre la entidad CustomerGroups, pasando por parámetros el código de empresa y el id del grupo de clientes. Aquí podemos comprobar también la importancia del orden de los parámetros. En la primera ejecución el orden no es el correcto, por lo obtenemos un error 404, mientras que en la segunda, la ejecución se realiza de forma satisfactoria y obtenemos un 200.

Limitaciones

Pues sí, esta acción concreta tiene una limitación bastante grande: Solo podemos obtener registros de la empresa que tenemos asociada por defecto en el sistema a través de las preferencias de usuario.

Como todos sabéis, todos los usuarios tienen una empresa a la que se accede por defecto, y que puede ser modificada desde las preferencias del usuario:

Empresa por defecto del usuario
Empresa por defecto del usuario

¿Qué ocurre si hacemos una consulta sobre una empresa que no es la que tenemos asociada? Pues como podemos ver en la siguiente imagen, así como en el log de IIS, al intentar obtener un registro de una empresa diferente, el sistema devuelve un error 404 – Not found.

Power automate - 404 - Not found
Power automate – 404 – Not found

Esto en realidad, no es una limitación de Power Automate como tal, si no un tema relacionado con como gestiona Dynamics 365 las llamadas OData para cambios de empresa. Si realizas la misma llamada directamente en el navegador, verás que el resultado es un array vacío, por lo que tampoco encuentra el registro en cuestión.

¿Cómo podemos solucionar este «problema»? Pues igual que hacemos con X++, para poder consultar datos de distintas empresas, debemos utilizar la sentencia cross-company. Si a la URL anterior, en el navegador, le añades cross-company=true ya te permite realizar búsquedas de las distintas empresas del sistema y filtrar por el dataAreaId, pero, esta acción concreta de Power Automate no nos permite utilizar dicho parámetro, por lo que vamos a ver la última de las acciones de lectura para ver como solventar esta situación.

Muestra los elementos presentes en la tabla

La última de las acciones que vamos a ver hoy es bastante más flexible que la anterior. Por una parte te permite obtener más de un registro de una tabla concreta, y por otra, tiene muchos más parámetros, que ya no tienen tanto que ver con los valores necesarios para buscar un registro en Dynamics 365, sino, con los parámetros u opciones que OData nos brinda para flexibilizar la búsqueda de los mismos.

Power Automate - Muestra los elementos presentes en la tabla
Power Automate – Muestra los elementos presentes en la tabla

Lo primero que vamos a ver al seleccionar esta acción es que necesitamos indicar la instancia sobre la que estamos trabajando, así como la entidad sobre la que vamos a buscar, pero además, podemos ver una serie de opciones avanzadas que nos darán la flexibilidad que mencionábamos.

Power Automate - Opciones avanzadas
Power Automate – Opciones avanzadas

Estas opciones nos van a permitir:

  • Aggregation transformation: Nos permite utilizar transformaciones de agregación de OData como sum, max, average…
  • Filter Query: Realizar filtros por campos específicos utilizando los operadores para el filtrado como eq (equal), greater than (gt)…
  • Order By: Ordenar los resultados que obtenemos por una serie de campos
  • Top Count: Obtener los N primeros registros que cumplan con las condiciones indicadas.
  • Skip Count: Desechar del resultado los N primeros registros obtenidos. (Utilizando esta opción junto con Top Count podemos obtener valores paginados, teniendo en cuenta que tenemos una limitación de 10k registros por llamada).
  • Select Query: Indicar los campos que queremos obtener.
  • Cross Company: Obtener registros de distintas empresas.

Aquí puedes obtener más información sobre el uso de OData en Dynamics 365 F&O apps: Open Data Protocol (OData) – Finance & Operations | Dynamics 365 | Microsoft Docs.

Como podéis ver e imaginar, estamos ante una acción mucho más potente que la anterior, y combinando de forma correcta las distintas opciones que avanzadas que tenemos, podemos conseguir que la obtención de los datos sea mucho más rápida y eficiente. Ej: No es lo mismo hacer un select * from table, que indicar la lista de campos que queremos obtener y que necesitamos.

Siguiendo con el ejemplo anterior, ahora si que somos capaces de obtener el Grupo de clientes de una empresa que no es la que tenemos asociada por defecto utilizando las siguientes opciones avanzadas:

Power Automate - Opciones avanzadas
Power Automate – Opciones avanzadas

A diferencia que con la acción anterior, en este caso podemos esperar obtener más de un registro, por lo que en la acción posterior a esta, Power automate incluye directamente un Apply to each de forma que se ejecute en todos y cada uno de los elementos obtenidos.

Power Automate
Power Automate

Y una vez que ejecutamos el flow, podemos ver como Power Automate «traduce» la ejecución de esta acción a una llamada http en el log de IIS, utilizando los parámetros filter, top, select y cross-company.

Y podemos ver también, como esta última acción se aplica a cada uno de los elementos obtenidos, y el resultado para cada uno de ellos.

Power automate - Opción ejecutada
Power automate – Opción ejecutada

Y con esto lo dejamos por hoy, espero que os haya resultado interesante, y cualquier duda ya sabéis, nos leemos en los comentarios.

Gracias!!

2 comments / Add your comment below

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies