Dépannage du cache Acumatica

La prochaine fois que vous vous retrouverez à vous cogner la tête contre votre bureau à cause d’erreurs vagues et non spécifiques, rappelez-vous que non, Acumatica ne vous déteste pas et oui, il y a une raison à l’erreur même si le message est loin d’être suffisant.
Patrick Chen | 28 juillet 2022

Dépannage du cache Acumatica

Introduction

Le dépannage des erreurs de plate-forme sur Acumatica peut être difficile.  En général, nous nous attendons à ce que les messages d’erreur nous disent exactement ce qui a mal tourné.  Malheureusement, il y a des erreurs que les ingénieurs de la plate-forme ne peuvent pas anticiper.  Acumatica peut difficilement être blâmé lorsque mon logiciel personnalisé provoque un problème lors de l’intégration avec le produit standard.  Parfois, la plate-forme xRP lancera des erreurs génériques ou pire, pas d’erreurs du tout.

À titre d’exemple, notre produit, SPS Commerce EDI , a un processus qui emballera automatiquement les expéditions en fonction d’un ensemble compliqué d’options.  Nous allons créer x nombre de paquets, contenu pour chaque paquet avec y nombre d’éléments des lignes de navire, attribuer des palettes, etc.  Nous avons également une page de traitement où le client peut emballer plusieurs envois à la fois.  C’est comme mélanger des cartes ou faire un sandwich Dagwood géant.  La boucle devient compliquée, et j’ai rencontré quelques problèmes en cours de route.

Vous trouverez ci-dessous deux des problèmes les plus difficiles que j’ai rencontrés et je les détaille ici parce que j’espère que mon expérience sera utile pour les autres.  Ces deux problèmes ne créent généralement pas d’exceptions et vous ne les découvrez que lorsque vous essayez d’enregistrer le travail à la fin du traitement.

Problèmes d’horodatage

Le redoutable un autre processus a mis à jour l’enregistrement 'xxx' Vos modifications seront perdues. l’erreur a beaucoup de causes possibles.  L’une d’entre elles est que l’objet avec lequel vous travaillez actuellement a une valeur d’horodatage qui ne correspond pas à la base de données et est plus jeune.  Si vous essayez d’enregistrer l’envoi dans la base de données lorsqu’il est obsolète, le processus lèvera une exception.  N’est-ce pas évident? Toutefois, il se peut que vous ayez mis à jour un objet DAC connexe qui, en raison d’une connexion, entraînera également la mise à jour de l’objet d’en-tête sur lequel vous travaillez dans la base de données.

Par exemple, j’ai du code qui effectue certaines transactions sur plusieurs tables Acumatica dans une étendue de transaction distincte.  Je mets à jour SOPackageDetail et SOShipline avant d’actualiser ces caches et de commencer à emballer.  J’ai constaté que dans certains scénarios, une fois l’étendue de la transaction validée, l’objet SOShipment avec lequel je travaillais était désormais obsolète par rapport à la base de données.   Lorsque je suis allé enregistrer mes modifications à la fin du traitement, l’exception a été levée.  Ce qu’il faut retenir, c’est que d’autres processus peuvent mettre à jour le cache et même l’enregistrer dans la base de données pendant que vous interagissez avec Acumatica.  Si vous obtenez cette erreur, vos objets peuvent avoir besoin d’une actualisation à partir du cache.

Échec des insertions

L’un des problèmes les plus frustrants que j’ai rencontrés en travaillant avec Acumatica est lorsqu’une insertion échoue sans exception. L’objet renvoyé à la fin d’une insertion de cache est nul et il n’y a aucune erreur pour décrire le problème.

GIST: https://gist.github.com/patrick711/40653d1db0358bfcede94011fb7df22c

Je crois comprendre qu’il y a trois raisons principales à cela:

  1. L’enregistrement inséré est du mauvais type. Ce que vous avez envoyé n’est pas du bon DAC.  Celui-ci est assez facile à repérer
  2. L’enregistrement a été annulé lors d’un événement RowInserting. Une logique d’événement liée au cache peut annuler l’insertion.
  3. Attributs PXParent et PXLineNbr. Si votre DAC est dans une relation parent-enfant.  Vous constaterez peut-être que l’enregistrement a été refusé parce que votre cache n’est pas synchronisé avec le fichier . Enregistrement actuel du DAC principal.  En particulier, l’attribut PXLineNbr peut entraîner des problèmes s’il ne peut pas calculer correctement le numéro de ligne suivant basé sur le fichier . Parent actuel.

Conclusion

J’espère que cet article vous donnera un endroit pour commencer la prochaine fois que vous rencontrerez des erreurs similaires.  Il est facile de sentir qu’il n’y a rien à partir de quoi travailler dans ces cas.  À tout le moins, la prochaine fois que vous vous retrouverez à vous cogner la tête contre votre bureau à cause d’erreurs vagues et non spécifiques, rappelez-vous que non, Acumatica ne vous déteste pas et oui, il y a une raison à l’erreur même si le message est loin d’être suffisant.

Prenez une profonde respiration et examinez les relations que la DAC avec laquelle vous travaillez peut avoir avec la base de données, le modèle d’événement et d’autres DAC.

Bon codage!

M. Patrick

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.