Accueil Blog (en) Intégration à l’aide du client API REST avec le module de fabrication d’Acumatica

Intégration à l’aide du client API REST avec le module de fabrication d’Acumatica

Le cas d’utilisation de cet article consiste à créer un processus d’intégration unique qui peut créer des transactions d’inventaire, telles que des ajustements de stock et des transactions de fabrication, telles que la saisie de main-d’œuvre, même si ces deux types de transactions sont définis dans des points de terminaison différents.
Diane Cawley | 13 décembre 2022

Intégration à l’aide du client API REST avec le module de fabrication d’Acumatica

Introduction

La plupart des intégrations avec Acumatica qui utilisent l’API REST utilisent les modules financiers et de distribution standard, et donc le point de terminaison DEFAULT .  Dans cet article, je voudrais discuter de l’utilisation du client API REST Acumatica pour C # et des différentes transactions qui peuvent être traitées à l’aide du point de terminaison MANUFACTURING.

Dans cet article, le code sera un projet C # qui fait référence à l’Acumatica.RESTClient.dll.  La version Acumatica utilisée dans le code est pour la version 2022 R2.

Intégration du module de fabrication

Lors de l’intégration d’une application tierce au module de fabrication, plusieurs transactions sont souvent nécessaires :

  • Questions importantes
  • Déplacer l’entrée
  • Entrée dans la main-d’œuvre

Le cas d’utilisation de cet article consiste à créer un processus d’intégration unique qui peut créer des transactions d’inventaire, telles que des ajustements de stock et des transactions de fabrication, telles que la saisie de main-d’œuvre, même si ces deux types de transactions sont définis dans des points de terminaison différents.

Pour commencer, vous pouvez d’abord télécharger le référentiel GitHub connexe à ce lien:

Il y a quelques informations intéressantes dans ce référentiel GitHub, y compris un exemple d’application console.  Le fichier readme.md contient également une explication rapide du contenu de ce référentiel.

J’ai créé une solution Visual Studio et installé les packages NuGet suivants :

  • JsonSubTypes (> = 1.8.0)
  • Newtonsoft.Json (> = 13.0.1)
  • RestSharp (> = 107.1.1)
  • System.Text.Json (>= 6.0.1)

Ensuite, j’ai installé les 3 paquets Acumatica NuGet spécifiquement nécessaires à l’intégration d’Acumatica.  J’ai choisi les versions les plus récentes dans tous les cas.

Intégration à l’aide du client API REST avec le module de fabrication d’Acumatica

Une fois que ces packages sont en place, l’étape suivante consiste à ajouter les instructions « en utilisant ».  Notez que je veux inclure à la fois l’Acumatica.Default.... et Acumatica.Manufacturing.... références car j’ai besoin que les deux points de terminaison soient disponibles.

L’ESSENTIEL

Dans les sessions de formation de l’Université Acumatica, I310, I320 et I330, les exemples sont tous montrés à l’aide d’appels postiers.  Bien que cela fonctionne, il est long et peu élégant de configurer les commandes REST et de les exécuter strictement avec des appels HTTPS.   Étant donné que les espaces de noms Api et Model du point de terminaison sont utilisés dans notre solution, nous pouvons tirer parti de la sérialisation et rendre le code beaucoup plus lisible.

Notre première tâche consiste à créer puis à publier une transaction d’ajustement de stock.  L’appel du facteur pour créer la transaction est un PUT de base et ressemble à ceci:

Intégration à l’aide du client API REST avec le module de fabrication d’Acumatica

Toutefois, à l’aide de RESTClient, nous pouvons utiliser les modèles associés au point de terminaison DEFAULT ; qui dans ce cas est l’InventoryAdjusment  et le InventoryAdjustmentDetail.

Pour nous connecter, nous instancions l’authApi, puis demandons un AccessToken à l’aide de l’id client et du secret de l’application connectée, ainsi qu’un nom d’utilisateur et un mot de passe valides.

L’ESSENTIEL

Si nous regardons le fichier journal des demandes, qui est généré par RESTClient, nous pouvons voir qu’après la création du jeton, la commande PUT est configurée pour correspondre à ce que nous voyions dans Postman, et l’action release est exécutée en tant que commande POST.  Notez que l’URL de la commande a été automatiquement générée à l’adresse de point de terminaison DEFAULT appropriée. Cela est dû à l’objet InventoryAdjustmentApi.

Demande

Méthode: Mettre

URL: ceci

Body: {"Date":{"value":"2022-12-22T00:00:00"},"Details":[{"InventoryID":{"value":"AALEGO500"},"LocationID":{"value":"R1S1"},"LotSerialNbr":{"value":""},"Qty":{"value":7.000000},"ReasonCode":{"value":"INADJUST"},"UOM":{"value":"EA             "},"WarehouseID":{"value":"WHOLESALE"}}],"Hold":{"value":false}}

—————————————–

Réponse

Code d’état : OK

Content: {"id":"1e0607b7-7a86-ed11-8688-020017045e71","rowNumber":1,"note":{"value":""},"Date":{"value":"2022-12-22T00:00:00+00:00"},"Details":[],"Hold":{"value":false},"ReferenceNbr":{"value":"000159"},"custom":{},"_links":{"self":"/AcumaticaDB2022R2/entity/Default/22.200.001/InventoryAdjustment/1e0607b7-7a86-ed11-8688-020017045e71","files:put":"/AcumaticaDB2022R2/entity/Default/22.200.001/files/PX.Objects.IN.INAdjustmentEntry/adjustment/1e0607b7-7a86-ed11-8688-020017045e71/{filename}"}}

—————————————–

Demande

Méthode: Post

Body: {"entity":{"Date":{"value":"2022-12-21T17:00:00-07:00"},"Details":[],"Hold":{"value":false},"ReferenceNbr":{"value":"000159"},"note":{"value":""},"id":"1e0607b7-7a86-ed11-8688-020017045e71","rowNumber":1,"custom":{}}}

—————————————–

Réponse

Code d’état : Accepté

Contenu :

—————————————–

Alors maintenant, nous voulons créer une transaction de main-d’œuvre manufacturière, basée sur les données de la base de données tierce.    Dans cet exemple, nous créons les objets LaborEntry et LaborEntryDetail , avec les champs de données appropriés.  Ensuite, nous enregistrons la transaction à l’aide d’une commande PUT et la libérons à l’aide du POST.

En utilisant le même objet de configuration de la connexion initiale, et donc le même jeton que dans l’exemple d’ajustement d’inventaire, le code est ci-dessous.  Notez qu’il y a deux différences intéressantes: (1) le temps de travail doit être formaté en HH: MM (ou JJ: HH: MM si plus de 24 heures); et (2) cet exemple inclut également le remplissage d’un attribut sur l’ordre de fabrication appelé MACHINE.

L’ESSENTIEL

Voici le journal des demandes associé pour la transaction ci-dessus (moins le POST).  Voyez comment l’URL est configurée pour regarder le point de terminaison DE FABRICATION au lieu du PAR DÉFAUT, ce qui était le cas avec l’ajustement de stock.   Cela ne nécessitait aucun code spécifique dans l’application principale elle-même.  Le RESTClient s’est occupé de ce détail.

Demande

Méthode: Mettre

URL : https://acu.savantwmscloud.com/

Body: {"Date":{"value":"2022-12-27T00:00:00"},"Description":{"value":"Labor"}, "Details":[{"EmployeeID":{"value":"EP00000002"},"LaborTime":{"value":"00:05"},"LaborType":{"value":"Direct"},"Location":{"value":"1"},"LotSerialNbr":{"value":""},"OperationNbr":{"value":"0010"},"OrderType":{"value":"RO"},"ProductionNbr":{"value":"AM000002"},"Quantity":{"value":1.0},"Shift":{"value":"0001"},"Warehouse":{"value":"WHOLESALE"}}],"Hold":{"value":true}}

—————————————–

Réponse

Code d’état : OK

Content: {"id":"ca4b97c9-7b86-ed11-8688-020017045e71","rowNumber":1,"note":null,"BatchNbr":{"value":"AMB000040"},"Date":{"value":"2022-12-27T00:00:00+00:00"},"Description":{"value":"Labor"}, "Details":[],"Hold":{"value":true},"custom":{},"_links":{"self":"/AcumaticaDB2022R2/entity/MANUFACTURING/21.200.001/LaborEntry/ca4b97c9-7b86-ed11-8688-020017045e71","files:put":"/AcumaticaDB2022R2/entity/MANUFACTURING/21.200.001/files/PX.Objects.AM.LaborEntry/batch/ca4b97c9-7b86-ed11-8688-020017045e71/{filename}"}}

—————————————–

Demande

Méthode: Mettre

URL : https://acu.savantwmscloud.com/

Body: {"BatchNbr":{"value":"AMB000040"},"Date":{"value":"2022-12-26T17:00:00-07:00"},"Description":{"value":"Labor"},"Details":[],"Hold":{"value":false},"id":"ca4b97c9-7b86-ed11-8688-020017045e71","rowNumber":1,"custom":{}}

—————————————–

Réponse

Code d’état : OK

Content: {"id":"ca4b97c9-7b86-ed11-8688-020017045e71","rowNumber":1,"note":null,"BatchNbr":{"value":"AMB000040"},"Date":{"value":"2022-12-27T00:00:00+00:00"},"Description":{"value":"Labor"},"Hold":{"value":false},"custom":{},"_links":{"self":"/AcumaticaDB2022R2/entity/MANUFACTURING/21.200.001/LaborEntry/ca4b97c9-7b86-ed11-8688-020017045e71","files:put":"/AcumaticaDB2022R2/entity/MANUFACTURING/21.200.001/files/PX.Objects.AM.LaborEntry/batch/ca4b97c9-7b86-ed11-8688-020017045e71/{filename}"}}

—————————————–

Conclusion

L’utilisation de RESTClient dans votre code d’intégration peut éliminer beaucoup d’efforts manuels dans la mise en forme des appels d’API REST, et en utilisant les modèles pour les points de terminaison DEFAULT ou MANUFACTURING , il y a moins de place pour l’erreur car les types de données et les champs sont déjà définis.   Il est facile d’utiliser plusieurs définitions de point de terminaison dans un ensemble de code, et le RESTClient triera l’URL et le corps appropriés pour les appels d’API REST sans avoir besoin de demander plusieurs jetons.   L’utilisation d’un seul jeton réduira le nombre de sessions de connexion simultanées et réduira le nombre total d’appels d’API à Acumatica.   Ceci est également important en raison des restrictions de licence Acumatica.

Bon codage!

Articles connexes

Auteur du blog

Diane Cawley est cofondatrice et architecte en chef de Savant Software, qui fournit des solutions de chaîne d’approvisionnement depuis 1995. Elle est titulaire d’un baccalauréat en informatique et d’un MBA de l’Université d’État de l’Arizona. Elle dirige les équipes de développement et de mise en œuvre et est responsable de l’évolution continue des produits ainsi que de son intégration avec les systèmes ERP tels que Acumatica. Diane est MVP Acumatica depuis 2018. Elle a participé à tous les Hackathons annuels à ce jour. Elle travaille avec le framework Acumatica avec une concentration sur les API depuis la version 5.1 et a développé plusieurs intégrations complexes entre WMS de Savant et Acumatica. En dehors du travail, Diane et son mari aiment voyager à travers le monde et apprendre de nouvelles choses en assistant à diverses rencontres - en particulier celles liées à l’IoT et à la robotique.

Recevez des mises à jour de blog dans votre boîte de réception.