Consumir entidades de Dynamics 365 Finance and Operations desde C#

Consumir Entidades de Dynamics 365 F&O desde C#

En esta ocasión, vengo a compartir una pieza de código que me ha sido muy útil a la hora de consumir entidades de datos de Dynamics 365 Finance and Operations, ya sean tanto entidades estándar, como entidades personalizadas, desde cualquier tipo de aplicación escrita en C#. En mi caso concreto, es una pieza de código escrita para ser consumida desde Azure Functions.

Como muchos de vosotros sabréis, Microsoft tiene a nuestra disposición, ejemplo de código en su repositorio de GitHub para consumir estas entidades utilizando OData Client. Es un ejemplo más que válido, que he utilizado más de una vez, y que además recomiendo encarecidamente para aprender el funcionamiento de las mismas, así como la autenticación a través de Azure Active Directory, pero en mi caso particular, decidí hacer este helper con llamadas http a través de HttpClient estándar de .NET con el objetivo de generar un código mucho más ligero, sin necesidad de generar la gran cantidad de clases proxy que genera el cliente de OData para poder utilizar todas las entidades de Dynamics 365 F&O.

Como ya sabrás a estas alturas de la historia, no soy experto en código C#, ni siquiera estoy cerca de serlo, por lo tanto, si a lo largo de este post ves algún punto de mejora, estaré más que agradecido de que me dejes un comentario con el objetivo de mejorarlo :).

Una consideración a tener en cuenta cuando escribimos código para consumir entidades de datos, es que podemos recibir un error 429 en cualquier momento, debido al throttling priority, por lo tanto, asegúrate desarrollar un patrón de reintentos coherente para gestionarlo.

Sin más dilación, me dispongo a mostrar el código genérico que he escrito para poder utilizar de forma genérica con cualquiera de las entidades existentes en el sistema, que como ya sabes, no son pocas.

Como verás a continuación, he desarrollado un método para cada una de las operaciones que podemos realizar. Estas son GET, POST, PATCH y DELETE.

Autenticación

El primer paso para poder consumir entidades de datos, conseguir el token de acceso a través de la autenticación mediante Azure Active Directory. Para ello, necesitaremos generar un registro de aplicación en nuestro tenant. Para ello, puedes seguir las instrucciones que escribí en este post.

Seguidamente, generamos un contrato de datos, que nos permita interactuar de forma sencilla con la respuesta que obtengamos al obtener el token.

Ahora ya podemos ver, de forma sencilla, el método que utilizaremos para obtener el token de acceso, donde:
domain es tu tenant de Azure, por ejemplo, jatomas.com
clientId es el id de cliente de tu App Registration
clientSecret es el secreto generado en la App Registration
resource la url de tu instancia de F&O (sin la barra final ‘/’)

Una vez que tenemos el token de acceso, ya podemos continuar, realizando la operación que necesitemos. A continuación, os dejo el método que utilizaremos para cada uno de estas operaciones.

GET (Select)

Uso del método GetEntity

En el caso del GET, comentar que hay distintas formas de llamarlo. La que yo estoy utilizando (https://fnourl.com/data/DataEntity(EntityKey=’Value’) la utilizaremos siempre y cuando estemos buscando un registro concreto, a través de su clave de entidad. Sería lo más parecido a los métodos find que utilizamos en X++, pero también tenemos la opción de obtener varios registros filtrando por los campos que queramos, dependiendo de la información con la que contemos, siguiendo la siguiente nomenclatura: https://fnourl.com/data/DataEntity?$filter=Campo1 eq ‘Value’ and Campo2 eq ‘Value’. La diferencia a la hora de obtener los datos es que, en lugar de obtener un objeto único, obtendremos un array con todos los registros que cumplan las condiciones indicadas en el $filter.

POST (Insert)

Uso del método InsertEntity

PATCH (Update)

Uso del método UpdateEntity

DELETE (Delete)

Uso del método DeleteEntity

Conclusión

Hasta aquí el post de hoy, espero que os resulte de utilidad, y como decía al principio, cualquier duda, crítica (constructiva) o mejora del mismo, estaré encantado de leeros en los comentarios. Saludos!

1 comment / 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