Introduction
Lors de l'intégration dans Acumatica en utilisant l'API REST, il est très utile d'utiliser Acumatica.RESTClient.dll. L'équipe de développement d'Acumatica a fourni cet outil dans Github à l'URL suivante : Acumatica/AcumaticaRESTAPIClientForCSharp (github.com)
Une partie de ce dépôt est le code complet d'un outil qui crée tous les modèles pour un point de terminaison donné qui peut être utilisé en conjonction avec le RESTClient. Cet outil s'appelle EndpointModelGenerator.
Téléchargez la dernière version de ce référentiel complet, car les changements de code seront effectués à la fois dansAcumatica.REST.API.Client.sln et dans EndpointModelGenerator.sln.
Dans mon précédent article de blog, Integration Using the REST API Client with Acumatica's Manufacturing Module, je décris comment utiliser les modèles existants pour les points de terminaison DEFAULT et MANUFACTURING. Mais qu'en est-il si vous avez besoin de personnaliser ces points de terminaison ou d'en créer un nouveau ?
Le code EndpointModelGenerator fourni sur Github est une application de bureau C# qui utilise la sortie JSON de la définition Open API d'un point de terminaison de services Web et crée les classes C# associées qui peuvent être utilisées avec RESTClient.dll. Voyons comment cela fonctionne.
Vous devez ouvrir la solution dans Visual Studio 2022, car elle nécessite .Net 6. Construisez et exécutez le projet tel quel, et vous serez invité à effectuer 3 étapes :
- Saisissez le chemin d'accès à un projet Visual Studio qui contiendra les modèles.
- Coller le JSON pour le point d'accès
- Cliquez sur un bouton pour générer les fichiers C# pour les modèles.
C'est assez simple, mais il y a un peu de travail préparatoire à faire.
Conditions préalables
Pour commencer, j'ai étendu le point de terminaison DEFAULT à un nouveau point de terminaison appelé DEVMVPBlog, version 20.200.001. Voir ci-dessous la capture d'écran de ce point de terminaison. Il y a une nouvelle entité dans ce point de terminaison pour les questions d'inventaire, qui est absente du point de terminaison DEFAULT. Tous vos points de terminaison personnalisés à partir de la version 20 ou supérieure fonctionneront de la même manière.
Ensuite, créez un nouveau projet dans la solution Acumatica.REST.Client. Pour cet exemple, le projet est ajouté au dossier Endpoints. Il s'agit d'une bibliothèque de classe C#, et je l'ai nommé Acumatica.DEVMVPBlog_20.200.001 pour garder la même convention de nommage que celle utilisée par les projets de points de terminaison existants. Le projet est créé avec un seul fichier de classe vide, comme indiqué :
Supprimez le fichier Class1.cs car il ne sera pas utilisé, puis enregistrez vos modifications dans la solution.
Ensuite, vous devez retourner au point de terminaison personnalisé, cliquer sur les ellipses (...), et choisir OpenAPI 2.0. Un nouvel onglet sera affiché montrant la représentation JSON de la définition du point de terminaison. (voir les exemples ci-dessous)
Les données JSON pour mon point de terminaison étendu sont TRÈS longues - plus de 95 000 lignes. Elles sont trop volumineuses pour être collées dans la zone de texte de l'EndpointModelGenerator, c'est pourquoi j'ai choisi de modifier la façon dont l'EndpointModelGenerator fonctionne dans le code de base. Ainsi, pour cette étape, j'ai sauvegardé le texte JSON de la page web dans un fichier texte avec l'extension .json.
J'ai ensuite modifié le code de EndpointModelGenerator pour demander à l'utilisateur de rechercher le fichier .json du schéma des points d'extrémité au lieu de le coller directement dans le champ de texte. Ensuite, j'ai modifié le bouton Generate pour ouvrir le fichier et l'utiliser dans le processus de génération lui-même.
Le formulaire se présente maintenant comme suit, les étapes (1), (2) et (3) étant toutes définies comme des boutons.
Les modifications apportées au code du processus Generate sont présentées ici :
GIST: https://gist.github.com/dianecawley/2018d5f1cc4146966848056bd6b45f6f
Exécuter le générateur de modèle
Maintenant que tout est prêt, il est temps d'exécuter le générateur et de voir les résultats.
Étape (1 ) - Cliquez sur Sélectionner un projet. Recherchez le fichier .csproj qui a été créé pour être utilisé avec la nouvelle définition de point final, et cliquez sur Ouvrir.
Remarquez que plusieurs autres zones de texte sont remplies avec les informations nécessaires pour procéder à la génération des modèles.
Étape (2 ) - Cliquez sur Sélectionner le fichier JSON Schema. Naviguez jusqu'au fichier .json qui a été créé à partir de la définition de l'API ouverte d'Acumatica, et cliquez sur Open.
Le chemin d'accès au fichier est indiqué sur le formulaire.
Étape (3 ) - Cliquez sur le bouton Générer le bouton "Générer". C'est ici que tout le travail s'effectue. La zone de texte du journal sera remplie avec chacune des entités du point final au fur et à mesure qu'elles sont traitées.
Vérifier les résultats dans le code RESTAPIClient
Ouvrez la solution Acumatica.REST.API.Client. Remarquez que le projet Acumatica.DEVMVPBlog_20.200.001 a été rempli avec les sous-dossiers API et Model - et toutes les entités dans le point de terminaison ont maintenant les définitions de classe appropriées. J'ai ouvert la classe InventoryIssue car c'est la raison principale de la création du nouveau point de terminaison dans cet exemple.
La construction de la solution créera le fichier Acumatica.DEVMVPBlog_20.200.001.dll, qui peut ensuite être utilisé dans votre projet de code d'intégration.
Utiliser le point final résultant .dll
Ouvrez votre solution d'intégration et ajoutez une référence au point final .dll nouvellement créé (à partir de la construction dans la dernière section).
Ensuite, ajoutez les instructions "using" pour les classes *.Api et *.Model dans la dll référencée. Voir l'exemple ci-dessous.
Voici un extrait de code utilisant l'objet InventoryIssues nouvellement disponible
GIST: https://gist.github.com/dianecawley/842df182253669de0a2d37c429ec1b76
Conclusion
Le générateur de modèles de points de terminaison permet de gagner du temps lorsqu'un point de terminaison personnalisé a été créé dans Acumatica et qu'un logiciel tiers doit utiliser le client API REST pour l'intégration. Même si quelques étapes sont nécessaires dans le processus de création des modèles de points de terminaison, elles sont bien moins nombreuses que l'écriture individuelle des classes. Un grand merci à Dmitrii Naumov pour avoir créé le client API REST ainsi que le générateur de modèles. En tant qu'ISV Acumatica avec un produit connecté, notre équipe gagne du temps en utilisant ces outils.
Bon codage !