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:
- 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
- L’enregistrement a été annulé lors d’un événement RowInserting. Une logique d’événement liée au cache peut annuler l’insertion.
- 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