Récemment, j'ai souvent entendu d'autres développeurs dire qu'il était très difficile, voire impossible, d'utiliser ASP.NET Web API et MVC directement avec Acumatica. Cependant, ce n'est pas aussi difficile que nous sommes amenés à le croire. En fait, je vais partager avec vous dans mon article comment vous pouvez utiliser ces technologies et les intégrer dans votre code avec la plateforme de développement Acumatica.
ASP.NET Web API
Acumatica utilise Autofac pour l'injection de dépendances, ce qui permet d'enregistrer des contrôleurs provenant de différentes bibliothèques. Ceci peut être réalisé relativement simplement de la manière suivante :
GIST : https://gist.github.com/sampetrosov/566e676cafc9eaa3a05f050b137bc8b6
`config.MapHttpAttributeRoutes();` permet d'utiliser `RouteAttributes` sur notre contrôleur et ` builder.RegisterApiControllers(Assembly.GetExecutingAssembly());` enregistre toutes les classes héritées de ApiController.
Tout d'abord, voyons comment nous pouvons définir un simple point de terminaison REST de l'API Web qui acceptera certaines données et créera les enregistrements correspondants dans Acumatica ERP (Enterprise Resource Planning). Nous avons besoin d'un mécanisme d'autorisation pour obtenir le nom d'utilisateur et le mot de passe afin de se connecter à Acumatica. J'utiliserai une méthode d'autorisation simple telle qu'illustrée dans le code ci-dessous :
GIST : https://gist.github.com/sampetrosov/0384f2a9500e1f59c5c6cd5fd1b115ec
Il suppose que la société, le nom d'utilisateur et le mot de passe seront transmis sous la forme d'une chaîne "company:username:password" encodée avec base64. Et comme vous pouvez le voir dans le code, Company est optionnel et requis seulement si vous avez plusieurs locataires dans Acumatica. Je vais utiliser un modèle simple pour accéder aux comptes commerciaux dans Acumatica et y ajouter des enregistrements comme suit :
GIST : https://gist.github.com/sampetrosov/f7df2fe0e8cc9923a96713a1f0ef53dd
Comme vous pouvez le constater, certaines parties du programme sont simplifiées ou omises. Par exemple, la validation des données entrantes pour le Business Account. Maintenant que nous disposons d'un modèle, nous pouvons définir l'ApiController, ce qui peut être fait très simplement de la manière suivante :
GIST : https://gist.github.com/sampetrosov/d29fd9c18078db3ffedcf944bb07b636
Comme vous l'avez peut-être déjà remarqué, il s'agit d'un contrôleur d'API Web ordinaire et c'est tout ce dont nous avons besoin pour accepter les requêtes.
Contrôleurs MVC et vues Razer
Voyons maintenant comment nous pouvons réaliser quelque chose comme des contrôleurs MVC et des vues Razor. En termes simples, la différence fondamentale entre un contrôleur API et un contrôleur MVC est qu'un contrôleur API exige que tous les résultats renvoyés en tant que réponse soient sérialisés.
Dans ce cas, nous pouvons donc utiliser un contrôleur d'API et nous contenter d'effectuer la compilation et la sérialisation du html/cshtml avant de le renvoyer. J'utiliserai le RazorEngine(Antaris/RazorEngine : Open source templating engine based on Microsoft's Razor parsing engine (github.com) ) pour compiler les fichiers .cshtml et utiliser la syntaxe razor.
J'ajouterai mes vues dans le dossier "Frames/IIG/" et les chargerai à partir du code en tant que texte. Dans le cas d'un point de terminaison MVC, nous supposons que l'utilisateur doit ouvrir la page dans le navigateur et fournir un jeton qui peut être généré par une entrée dans Acumatica et envoyé par email.
Nous afficherons les données correspondantes après avoir transmis les informations d'autorisation. Ci-dessous, vous pouvez voir que nous avons ajouté quelques actions à notre contrôleur API pour effectuer notre autorisation dans notre code :
GIST: https://gist.github.com/sampetrosov/ea3739474ee44477f489fbcb29a80547
Le résultat est que l'action Get affichera la page contenant le formulaire d'autorisation, comme le montre la capture d'écran ci-dessous :
L'action POST tentera d'effectuer l'autorisation et de renvoyer le résultat de la manière suivante :
Dans mon cas particulier, j'utilise simplement "company:username:password" encodé en base64 comme jeton. Cependant, pour des scénarios réels, vous devriez probablement ajouter des branches, des horodatages et d'autres identifiants d'enregistrement pour filtrer et afficher uniquement les enregistrements auxquels ce jeton est assigné.
Vous voyez donc qu'il n'est pas du tout difficile d'utiliser ASP.NET Web API et MVC directement avec Acumatica.
Sur GitHub, j'ai fourni le code source complet et le lien du paquet d'installation que vous pouvez utiliser dans votre propre code :
https://github.com/sampetrosov/Acumatica-CustomController.git
Nous espérons que ces informations vous ont été utiles dans votre travail de développement et qu'elles vous ont facilité la tâche en ce qui concerne l'utilisation de l'API Web ASP.NET et de MVC.
Bon codage !