Où sont ces données dans le monde?

Stéphane Bélanger | Le 5 mai 2021

Où sont ces données dans le monde?

L’INTRODUCTION

Il y a quelque temps, on m’a confié la tâche d’analyser l’exigence de supprimer un entrepôt qui avait été créé lors d’une implémentation.  Le client ne voulait plus utiliser l’entrepôt défini.  Mais malheureusement, parce qu’il avait été utilisé pour quelques transactions de test, il ne pouvait pas être supprimé (en raison de l’intégrité référentielle évidente) même s’il était « vide » pour autant que l’utilisateur pouvait voir.

Dès le départ, vous pouvez voir que cette demande est beaucoup plus complexe que ce que le client avait demandé. Dans ce cas, non seulement nous devons supprimer cet entrepôt, mais pour ce faire, nous devons également faire ce qui suit:

  • Supprimer certains des enfants de l’entrepôt (par exemple, les emplacements d’entrepôt) qui ne sont plus nécessaires;
  • Mettre à jour certaines des tables en utilisant l’entrepôt comme clé étrangère (certaines lignes transactionnelles) pour remplacer l’ID d’entrepôt par un autre ID d’entrepôt afin de simuler le fait que l’ID d’entrepôt n’a jamais été « transigé »;
  • Agrégez certains tableaux statistiques en utilisant l’entrepôt dans le cadre de la clé primaire pour simuler que l’ID d’entrepôt n’a jamais été utilisé dans de tels calculs statistiques (tels que Total Qty On Hand par article / entrepôt).  Maintenant, cela pourrait nécessiter une solution différente pour différentes tables, mais au moins cela permettrait à l’ID d’entrepôt de disparaître sans causer de dommages (par exemple, un reste de Qty On Hand doit être ajouté à un autre entrepôt).

En outre, vous remarquerez peut-être que ce processus nous oblige à sélectionner un autre entrepôt qui deviendra la cible ou le bénéficiaire de nos mises à jour en cas de besoin.  Dans ce cas, le SiteID de l’entrepôt à supprimer était 36 et sa cible était 4.

Maintenant, même si la structure de la base de données vous est familière, il n’est pas nécessairement facile de trouver toutes les références à la valeur de l’entrepôt - même si vous connaissez (ou pensez savoir) toutes les tables.  Par conséquent, afin de gagner du temps à rechercher les lignes, j’ai décidé de créer une requête SQL dynamique qui m’aiderait à trouver n’importe quel champ avec un certain modèle de nom (SiteID est la valeur de champ interne de l’entrepôt) et avec une valeur donnée (36).  Maintenant, ce script n’est pas purement un script Acumatica, en soi. Cela est dû à la nomenclature de table / champ naturelle et normalisée d’Acumatica; il devient possible d’utiliser le type de script.

Tout d’abord, nous devons trouver toutes les tables ayant un SiteID.  Évidemment, dans certains cas, le champ pourrait être nommé OriginSiteID ou DestSiteID, mais vous avez l’idée.

Trouver le champ dans toutes les tables

GIST: https://gist.github.com/ste-bel/d37daa37915b6ec35f6bbb84e9bb5965

Voici une capture d’écran des résultats (partiels) après l’exécution du script ci-dessus:

Où sont ces données dans le monde?

Ensuite, je voulais créer une requête dynamique qui rechercherait toutes les lignes de toutes les tables que j’ai trouvées dans le résultat précédent.  En utilisant cette requête, je voulais générer des scripts de mise à jour et de suppression pour chaque table et champ.

Déclarer une table virtuelle et quelques variables

GIST : https://gist.github.com/ste-bel/b2e13aab2e6a5fe3fd0169e2dfb2c70d

Créez la requête dynamique et générez des scripts

GIST: https://gist.github.com/ste-bel/5c6609b2a6dee84b491b2b86d471e4c3

Enfin, examinez le résultat des valeurs trouvées et mettez à jour / supprimez les scripts générés:

GIST: https://gist.github.com/ste-bel/2d4b5f3f6cf434d7fe1ad172d408c233

Où sont ces données dans le monde?

RÉSUMÉ

Il ne s’agit évidemment pas simplement d’une solution rapide à ce qui semble être un problème simple. Cependant, je pense que c’est un excellent outil pour les consultants, les ingénieurs de support et les développeurs pour rechercher des données problématiques / restantes. Nous l’avons également utilisé avec succès avec ScreenID, BOMID, InventoryID, CustomerID pour résoudre toutes sortes de problèmes.  En outre, il peut être utilisé pour recoder les clés primaires qui sont utilisées par des clés étrangères qui étaient strictement des chaînes sans clé entière sous-jacente (telles que ShipVia, TermsID).  

Cela m’a sauvé la vie, si vous voulez, à plusieurs reprises au fil des ans.  J’espère que vous le trouverez également utile, ce qui vous permettra, à vous et à vos collègues, d’économiser beaucoup de temps et d’efforts à l’avenir.

Bon codage!

Auteur du blog

La carrière de Stéphane, qui s’étend sur plus de 25 ans, a commencé en tant que développeur ERP sur un langage 4GL appelé Miracle. Après quelques années, il a été envoyé à Philadelphie pour travailler avec Weyerhaeuser pour un contrat de 10 jours qui a duré 4 ans, où il a aidé à re-concevoir les modules transport et EDI. Il a créé, entre autres, près d’une douzaine de nouvelles transactions EDI. Il s’est ensuite émerveillé à travers le désert des personnalisations et des intergiciels Java à la recherche de son ERP Graal. En 2016, il a été embauché par le studio de jeux vidéo Behaviour Interactive où il a sélectionné, mis en œuvre et intégré un ERP avec d’autres applications cloud. Quel ERP ? Acumatica bien sûr. En 2018, il a décidé de revenir à ses racines en tant que développeur ERP et a commencé à travailler pour des partenaires Acumatica Gold de premier plan pour partager ses connaissances, sa passion et ses idées. Il est heureux depuis.

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