Accueil Blog Gestion des flux de données entrants dans Acumatica

Gestion des flux de données entrants Acumatica

Le billet d'aujourd'hui est un double billet. J'espère que l'exemple de code inclus sera intéressant pour le lecteur dans la mesure où il résout un problème qui, je le sais, s'est posé à plus d'un développeur et où 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 entrants Acumatica

Introduction

Notre produit, SPS Commerce EDI apporte des données EDI dans des tables de préparation dans Acumatica via un 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. Comme nous contournons l'interface utilisateur lorsque nous chargeons des données dans le produit, il est possible de charger dans le cache des données sous forme de chaînes 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 ORM Acumatica tronquait automatiquement ces données pour les adapter au champ SQL. Cependant, il y a quelques années, l'ORM a été modifié de telle sorte qu'il tente d'insérer les données sans vérification et qu'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 troncature. De plus, en raison de la taille de notre produit EDI, j'ai environ 20 flux de données entrants différents à vérifier et d'autres sont à venir. Par conséquent, le défi consistait à valider les données de chaînes entrantes pour plusieurs CED dans une base de code facile à gérer sans coder en dur la taille des champs.

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 troncature s'est produite. Comme il s'agit de données provisoires, l'utilisateur a la possibilité de corriger les données et de les retraiter. De cette manière, notre flux de travail est protégé contre les erreurs fatales qui auraient pu interrompre toute la transaction.

Résumé

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

Bon développement !

Auteur du blog

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

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