Si estas buscando cómo invocar un endpoint de la webapi de Dataverse utilizando Power Automate, en este sencillo post te muestro cómo.
Primero, el contexto y los pre-requisitos:
Contexto: Supongamos que necesitas invocar una custom api
(Action) configurada dentro de Dynamics 365 o bien una acción estándar, por
ejemplo “Actualizar campos roll up”. Sabemos que Microsoft tiene expuesto
mediante un servicio REST varios métodos para poder interactuar y realizar
operaciones CRUD o bien invocar alguna función. Como todo servicio, hay una
capa de seguridad y un esquema que debemos respetar. En este post veremos como
en simples pasos podemos cumplir con esto.
Pre-Requisitos:
- Es recomendable consumir la api utilizando un usuario de servicio (Application User)
- El Application User debe tener asignado roles adecuados para invocar la api. Generalmente, se suele utilizar “Administrador de Sistema”. En caso de que no querer exponer todos los permisos de un administrador, se puede configurar un rol ad-hoc o bien utilizar “System Customizer”.
- Para probar esto por primera vez, te conviene crear una custom action. Por ejemplo: una custom action que al invocarla cree un contacto nuevo. Siempre iniciar con algo fácil.
NOTA: Si no sabes cómo crear un “Application User”, ingresá a este post que hice hace un tiempo te va a servir. 😉
Paso 1:
Antes de invocar nuestra action, necesitamos obtener un
token de autenticación. Esto es como si un usuario quisiera acceder a Dynamics 365,
lo primero que debería hacer es loguearse. Entonces, vamos a elegir una acción
del tipo “HTTP Request”. El nombre de la acción es irrelevante en este punto
donde estamos probando pero se sugiere colocarle un nombre descriptivo. En mi
caso elegí “RequestOAuth2Token”
Lo que se puede ver en la imagen es la configuración del request tal como lo haríamos usando Postman.
Parámetros necesarios:
- Grant_type: es el tipo de flujo de autenticación que vamos a utilizar. En este caso vamos a usar el flujo más básico: client_credentials.
- Resource: es la URL del entorno. Recordá colocar la región adecuada, en el ejemplo, se ve que la URL corresponde a un entorno localizado en USA. Si tu entorno es de Sudamérica, colocar crm2, si es de Europa crm4, etc.
- Client_id: ID de la aplicación registrada (application user).
- Client_secret: Secreto de la aplicación registrada. Sería como la password de un usuario común.
Antes de continuar con el paso 2, ejecutá el flujo tal como está. Si todos los pasos ejecutaron correctamente (tilde verde) significa que vamos bien. Si da error, seguramente pueda ser:
- Request mal configurado.
- Usuario de servicio no tiene permisos suficientes.
- Usuario de servicio mal configurado en el AD.
Paso 2:
El siguiente paso, es configurar otro HTTP Request luego de la acción que obtiene el token. Es decir, una vez que nuestro usuario de servicio (application user) se autenticó, tenemos el token que nos va a permitir invocar cualquier acción de Dynamics (siempre y cuando, nuestro usuario de aplicación tenga los roles adecuados).
Manos a la obra...
Como URI, debemos colocar URL del entorno/api/data/v9.1/{nombre_de_la_custom_action}
En el ejemplo que muestro, realicé una action sencilla para
la entidad Account.
Lo más importante es enviar como parámetro el token que obtuvimos
antes, caso contrario nos va a devolver un “Unauthorized” error. Los otros
headers, colocarlos tal cual se muestra en la imagen.
Estos son todos los pasos para poder invocar cualquier
método de la api de Dynamics. Si la custom action devuelve parámetros como
resultados, deberán configurar el Flow de manera adecuada para poder parsear la
respuesta y hacer las operaciones necesarias con dichos resultados. El objetivo
de este artículo es mostrar de manera muy sencilla como debería invocarse un método
de la api desde afuera.
Dicho esto, quiero agregar que estos pasos no solo aplican para Power Automate, sino que también pueden ser replicados para invocar la api de Dynamics externamente. La api se comporta como cualquier endpoint REST. El resto, es historia conocida.
Comentarios
Publicar un comentario