Accueil Blog (en) Gestion des flux de données Acumatica entrants

Gestion des flux de données Acumatica entrants

Le post d’aujourd’hui est un deux fers.  J’espère que l’exemple de code inclus sera intéressant pour le lecteur en ce qu’il résout un problème que je sais s’est produit pour plus d’un développeur et il illustre une méthodologie de traitement des données avec une méthode générique.
Patrick Chen | 28 février 2022

Gestion des flux de données Acumatica entrants

Introduction

Notre produit, SPS Commerce EDI apporte des données EDI dans des tables de préparation dans Acumatica via Le service Web pour une importation ultérieure dans l’ERP.  Plus précisément, les données JSON doivent être désérialisées, puis ajoutées aux objets de données Acumatica.  Étant donné que nous contournons l’interface utilisateur lors du chargement de données dans le produit, il est possible de charger des données de chaîne dans le cache qui dépasseront les spécifications SQL lorsqu’elles seront insérées par l’ORM.  Dans les itérations précédentes, le système Acumatica ORM tronquerait automatiquement ces données pour s’adapter au champ SQL.  Il y a quelques années, cependant, l’ORM a été modifié de sorte qu’il tente d’insérer les données sans vérification et une erreur SQL est générée par la base de données si une spécification de champ est dépassée.  J’avais besoin d’un moyen de rétablir ce contrôle et une éventuelle troncation.  En outre, en raison de la taille de notre produit EDI, j’ai environ 20 flux de données entrants différents à vérifier avec d’autres à venir.  Par conséquent, le défi consistait à valider les données de chaîne entrantes pour plusieurs DAC dans une base de code facile à gérer sans tailles de champ de codage en dur.

Solution

Check_Field_Lengths_InsertUpdate<T> is a generic method which means that the parameter data types are deferred until the method is called.  After I’ve deserialized my JSON data and translated it into DAC objects, I call the method with the cache of the appropriate data view and the list of DAC objects as parameters.  The method then loops through each DAC object accessing the DAC definition via the cache and checking each string field in the object for length.  If necessary, the method truncates the incoming data and then inserts or updates the object (myCache.Update() does both!) via myCache.


GIST: https://gist.github.com/patrick711/9ff5b6e9da90bcc52e14803269be5dd7

Dans la version de production de cette méthode, un avertissement est généré pour l’utilisateur lorsqu’une troncation s’est produite.  Puisqu’il s’agit de données intermédiaires, l’utilisateur a alors la possibilité de corriger les données et de les retraiter.  De cette façon, notre flux de travail est protégé contre les erreurs fatales qui auraient pu faire tomber l’ensemble de la transaction.

Résumé

J’espère que vous avez trouvé cela intéressant et même si vous n’avez pas besoin de valider les données de chaîne, vous serez intéressé par la mise en œuvre de méthodes génériques pour traiter plusieurs types de DAC et garder votre code facile à maintenir.

Joyeux développement!

Auteur du blog

Patrick est le développeur principal de SPS Commerce EDI pour Acumatica. Il est un développeur Acumatica entièrement certifié et travaille avec le produit depuis 2013. Il a plus de 17 ans de développement de logiciels personnalisés dans l’industrie ERP.

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