Introducción
Al integrarse en Acumatica mediante la API REST, resulta muy útil utilizar Acumatica.RESTClient.dll. El equipo de desarrollo de Acumatica ha proporcionado esta herramienta en Github en la siguiente URL: Acumatica/AcumaticaRESTAPIClientForCSharp (github.com)
Parte de este repositorio es el código completo de una herramienta que crea todos los modelos para un punto final determinado que se pueden utilizar junto con RESTClient. Esta herramienta se llama EndpointModelGenerator.
Descargue la última versión de este repositorio completo, ya que los cambios de código se realizarán tanto enAcumatica.REST.API.Client.sl n como en EndpointModelGenerator.sln.
En mi entrada de blog anterior, Integración mediante el cliente de API REST con el módulo de fabricación de Acumatica, describo cómo utilizar los modelos existentes para los puntos finales DEFAULT y MANUFACTURING. Pero, ¿qué sucede si necesita personalizar estos puntos finales o crear un nuevo punto final?
El código EndpointModelGenerator proporcionado en Github es una aplicación de escritorio C# que utiliza la salida JSON de la definición Open API de un Endpoint de Servicios Web y crea las clases C# asociadas que se pueden utilizar con RESTClient.dll. Veamos cómo funciona.
Debe abrir la solución en Visual Studio 2022, ya que requiere .Net 6. Construya y ejecute el proyecto tal cual, y se le pedirá que realice 3 pasos:
- Introduzca la ruta a un proyecto de Visual Studio que contendrá los modelos.
- Pegue el JSON para el endpoint
- Haga clic en un botón para generar los archivos C# de los modelos.
Esto es bastante sencillo, pero hay que hacer algunos preparativos.
Requisitos previos
Para empezar, he extendido el endpoint DEFAULT a uno nuevo llamado DEVMVPBlog, versión 20.200.001. Vea abajo la captura de pantalla de este endpoint. Hay una nueva entidad en este endpoint para Problemas de Inventario, que falta en el endpoint DEFAULT. Cualquiera de sus puntos finales personalizados a partir de la versión 20 o superior funcionará de la misma manera.
A continuación, cree un nuevo proyecto dentro de la solución Acumatica.REST.Client. Para este ejemplo, el proyecto se agrega a la carpeta Endpoints. Se trata de una biblioteca de clases de C# y la he denominado Acumatica.DEVMVPBlog_20.200.001 para mantener la misma convención de nomenclatura que utilizan los proyectos de puntos finales existentes. El proyecto se crea con un único archivo de clase vacío, como se muestra:
Elimine el archivo Class1.cs, ya que no se utilizará, y guarde los cambios en la solución.
A continuación, debe volver al endpoint personalizado, hacer clic en las elipses (...) y elegir OpenAPI 2.0. Aparecerá una nueva pestaña con la representación JSON de la definición del endpoint. (véanse los ejemplos siguientes)
Los datos JSON para mi endpoint extendido son MUY largos - más de 95000 líneas. Es demasiado grande para pegar en el cuadro de texto en el EndpointModelGenerator, así que opté por hacer una modificación a la forma en que el EndpointModelGenerator funciona en el código base. Así que, para este paso, guardé el texto JSON de la página web en un archivo de texto con la extensión .json.
A continuación, modifiqué el código de EndpointModelGenerator para pedir al usuario que busque el archivo de esquema de punto final .json en lugar de pegarlo directamente en el campo de texto. A continuación, cambié el botón Generar para abrir el archivo y utilizarlo en el propio proceso del generador.
El formulario tiene ahora este aspecto, con los pasos (1), (2) y (3) definidos como botones.
Aquí se muestran los cambios en el código del proceso Generar:
GIST: https://gist.github.com/dianecawley/2018d5f1cc4146966848056bd6b45f6f
Ejecutar el generador de modelos
Ahora que todo está preparado, es hora de ejecutar el Generador y ver los resultados.
Paso (1) - Haga clic en Seleccionar proyecto. Busque el archivo .csproj que se creó para utilizarlo con la nueva definición de punto final y haga clic en Abrir.
Observe que otros cuadros de texto se rellenan con la información necesaria para proceder a la generación de los modelos.
Paso (2) - Haga clic en Seleccionar archivo de esquema JSON. Busque el archivo .json que se creó a partir de la definición de Open API de Acumatica y haga clic en Abrir.
La ruta del archivo se muestra en el formulario.
Paso (3) - Haga clic en el botón Generar Generar. Aquí es donde tiene lugar todo el trabajo. El cuadro de texto de registro se irá rellenando con cada una de las entidades del endpoint a medida que se vayan procesando.
Compruebe los resultados en el código RESTAPIClient
Abra la solución Acumatica.REST.API.Client. Observe que el proyecto Acumatica.DEVMVPBlog_20.200.001 se ha rellenado con las subcarpetas API y Modelo, y que todas las entidades del punto final tienen ahora las definiciones de clase adecuadas. He abierto la clase InventoryIssue ya que era la razón principal del nuevo endpoint en este ejemplo.
Al compilar la solución se creará el archivo Acumatica.DEVMVPBlog_20.200.001.dll, que podrá utilizarse en el proyecto de código de integración.
Utilizar el Endpoint .dll resultante
Abra su solución de integración y añada una referencia al endpoint .dll recién creado (a partir de la compilación de la última sección).
A continuación, añada las sentencias 'using' para las clases *.Api y *.Model dentro de la .dll referenciada. Véase el siguiente ejemplo.
A continuación se muestra un fragmento de código que utiliza el nuevo objeto InventoryIssues disponible
GIST: https://gist.github.com/dianecawley/842df182253669de0a2d37c429ec1b76
Conclusión
El generador de modelos de punto final es un verdadero ahorro de tiempo cuando se ha creado un punto final personalizado en Acumatica y un software de terceros necesita utilizar el cliente de la API REST para la integración. Aunque se necesitan algunos pasos en el proceso de creación de los modelos de punto final, son muchos menos que escribir las clases individualmente. Muchas gracias a Dmitrii Naumov por crear el cliente API REST y el generador de modelos. Como ISV de Acumatica con un producto conectado, nuestro equipo ahorra tiempo utilizando estas herramientas.
¡Feliz codificación!