Accueil Blog (en) Comment tirer parti de l’audit d’Acumatica en code

Comment tirer parti de l’audit d’Acumatica en code

Cet article fournira un aperçu technique de la fonctionnalité d’audit d’Acumatica afin de tirer parti de cette fonctionnalité dans votre solution de développement - décrivant ce qu’est l’audit Acumatica, comment les données sont suivies sous la couche de données et quelques informations utiles.
Joe Jacob | Le 19 mai 2022

Comment tirer parti de l’audit d’Acumatica en code

Résumé des fonctionnalités d’audit

Commençons par un rappel sur ce qu’est l’audit dans Acumatica et comment le configurer.  L’ERP d’Acumatica permet à un utilisateur de suivre les modifications apportées à presque tous les champs Acumatica.

Supposons que vous souhaitiez suivre chaque fois qu’une valeur de ligne de crédit est modifiée pour un client et lorsque la ligne d’adresse 2 est modifiée, ainsi que toute modification apportée à un attribut client de INDUSTRY.

Sélectionnez l’écran Maintenance clients sur l’écran Audit et notez que plusieurs tables et champs peuvent déjà être sélectionnés pour vous.  Supposons que cela puisse déjà être mis en place et que notre solution ne doive se concentrer que sur le ou les domaines qui nous intéressent.  Nous devrons inclure Customer, BACCOUNT et CSANSWERS pour les attributs.  Lorsque vous avez terminé de sélectionner les tables et les champs appropriés, assurez-vous de cocher la case Active pour commencer l’audit.

AudingInCode

AudingInCode

Maintenant, nous pouvons tester un changement.  Ouvrez ABC Holdings ou tout client et modifiez la limite de crédit.  J’utilise la base de données sales demo, donc je vais changer la ligne de crédit à $123,456.78.  Je vais changer la ligne d’adresse 2 à la suite 122, et je vais ajouter un attribut de BANKING.

AudingInCode

Si vous ouvrez ensuite l’écran Historique de l’audit D’Acumatica, vous pouvez voir vos modifications.

AudingInCode

Ce qui se passe dans les coulisses

Tout d’abord, regardons la table AuditHistory dans SQL.

AudingInCode

Notez que non seulement le client ABCHOLDING a eu des changements, mais 2 autres clients ont également eu des changements.  Mais nous n’y avons pas touché.  Voyez si vous pouvez deviner pourquoi alors que nous continuons.  Je vais expliquer plus dans la section suivante.

Ce que nous voyons en examinant la table AuditHistory sont deux enregistrements pour notre client, un pour la table Customer et un pour la table BAccount de base.

  • Le BatchID nous donnera un regroupement du moment où une modification a été apportée. Dans mon exemple, j’ai changé trois choses différentes sur l’écran du client, de sorte qu’elles ont toutes été soigneusement regroupées
  • ChangeID sera un ID unique de chaque modification
  • Pour l’opération , vous verrez un U pour mis à jour et I pour inséré
  • TableName nous indique évidemment quelle table a été modifiée
  • CombinedKey fournira des informations sur la fiche maîtresse qui a été modifiée
  • Le champ ModifiedFields de l’enregistrement client nous indique quel champ a été modifié

Il va sans dire que nous ne voulons jamais lire SQL directement dans le monde Acumatica, alors jetons un coup d’œil à ce que nous obtenons lors de la lecture des enregistrements AuditHistory de la couche d’accès aux données.

J’ai créé un bouton sur l’écran Maintenance client pour un débogage rapide pour vous montrer tous les extras que vous obtenez.

GIST : https://gist.github.com/JACOBNOTES/f7e1c49abe27b476fe6701d11c5127ae

Lorsque je débogue cette ligne de code et que j’examine la collection HistoryRecords, je peux voir que nous obtenons le même nombre d’enregistrements que nous avons vu dans SQL.  Décomposons ce que nous voyons.

AudingInCode

Sous la Clé combinée pour cet enregistrement, nous avons le BACCOUNT. Valeur ACCTCD nous pointant vers le client qui a été changé.

Sur le champ ModifiedFields, nous avons une paire clé/valeur séparée par un « \0 ».   Nous pouvons analyser ces données dans un dictionnaire nous donnant quel champ a été modifié et à quelle valeur il a été modifié.  Remarquez que nous n’avons pas vu cela en faisant simplement une requête SQL de la table.  Dans votre code, attendez-vous à ce que cela puisse contenir plus d’une paire de valeurs, comme vous le verrez plus tard.

Pour les modifications d’adresse, nous avons maintenant un exemple de plus d’une paire clé-valeur sur le champ ModifiedFields .  Nous n’avons pas directement modifié le RevisionID, mais la logique métier à l’écran l’a fait, alors gardez cela à l’esprit que si vous souhaitez uniquement suivre des champs très spécifiques, vous devrez filtrer ce dont vous n’avez pas besoin.

AudingInCode

La valeur CombinedKey d’une modification d’adresse contiendra une valeur de chaîne représentant l’int AddressID , que vous pouvez prouver en effectuant une requête rapide.  La leçon ici est que combinedkey ne contiendra pas toujours la valeur ACCTCD , il peut porter l’ID d’enregistrement, vous devrez donc le convertir d’une chaîne en une valeur int dans certains cas.

AudingInCode

Des choses encore plus intéressantes apparaissent pour les audits d’attributs.

AudingInCode

Ici, notre paire clé-valeur dans le champ CombinedKey représente un GUID NoteID pointant vers le BACCOUNT par NoteID où le changement s’est produit.

La valeur NoteID est séparée par le « \0 » indiquant quelle clé d’attribut a été modifiée, qui dans ce cas était « INDUSTRY ».  Puisque le TableName est CSANSWERS, il pourrait contenir n’importe quel attribut qui avait changé.

Les champs ModifiedFields pour les attributs auront toujours « Valeur » analysé par la nouvelle valeur qui est BNK pour les opérations bancaires.

Cette requête affiche la correspondance pour quel client a été changé.

AudingInCode

Autres idées

Dans notre première section, j’ai souligné que plus d’un client a été déclenché comme changé lorsque je n’ai apporté qu’une modification à ABCHOLDING.  Cela est dû à la nature des comptes enfants pour les clients.  ABCVENTURES et ABCSTUIDOS sont des comptes enfants pour ABCHOLDING et sous la logique métier et la configuration d’Acumatica, ils sont obligés de partager les informations de limite de crédit, donc changer l’un a déclenché le même changement pour les deux autres.  Il est important de s’attendre à ce que de telles bizarreries se produisent, vous devrez donc faire beaucoup de programmation et de tests défensifs pour répondre à vos objectifs de solution.

J’espère que ce BLOG vous est utile pour fournir des informations de base dont vous pourriez avoir besoin lors de la conception d’une solution programmatique qui vous oblige à extraire les informations d’audit D’Acumatica.

Bon codage!

 

Auteur du blog

Joe est développeur senior chez Crestwood Associates. Il conçoit et construit des projets de logiciels liés à l’ERP depuis plus de 14 ans, à l’origine avec SSYH, Inc. qui est maintenant Crestwood Associates. L’expérience de Joe comprend plus de 30 ans d’expérience dans la programmation dans divers anguages. Il maîtrise le développement de VB.NET, C# et SQL Server ainsi que plusieurs technologies Web. Depuis que Joe a commencé sa carrière en tant que contrôleur d’entreprise, il fournit des informations précieuses lorsqu’il travaille avec des clients. Au cours de la dernière année, Joe a adopté de manière agressive la plate-forme et le cadre D’Acumatica. Il gère maintenant plusieurs projets allant de simples projets de personnalisation au développement de solutions intégrées plus spécifiques au client. Joe a également été un artiste clé dans la migration des personnalisations Dynamics SL vers Acumatica pour les clients Crestwood existants. C’est la première année de Joe en tant que MVP développeur Acumatica et il se réjouit de la croissance continue de la plate-forme Acumatica.

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