L'erreur BMXAA4200E survient lorsqu'un enregistrement MBO a été modifié en base de données par un autre utilisateur ou fil d'exécution entre son extraction et sa tentative de sauvegarde.
Symptômes et contexte
Lors de la sauvegarde d'une intervention ou de l'exécution d'un script d'automatisation :
BMXAA4200E - The record has been modified by another user. Refetch and try again.
Ce problème se manifeste très fréquemment dans les scripts personnalisés qui déclenchent un .save() explicite.
Prérequis et précautions
- Analyser la chaîne d'événements du script d'automatisation.
- Ne pas désactiver les mécanismes de verrouillage optimiste natifs de Maximo.
Diagnostic étape par étape
Étape 1 — Identifier le script coupable
Inspectez les journaux d'erreurs pour déterminer si l'échec se produit lors de l'exécution d'un événement SAVE ou ACTION.
Étape 2 — Inspecter le code Jython/Python
Recherchez la présence de la méthode .save() ou .commit() au sein de scripts associés aux objets Maximo.
Correction ou procédure
- Supprimez les appels explicites à
.save()dans vos scripts d'automatisation d'objets :
# ❌ INCORRECT (déclenche BMXAA4200E)
relatedSet = mbo.getMboSet("RELATED_WO")
relatedWo = relatedSet.moveFirst()
if relatedWo:
relatedWo.setValue("DESCRIPTION", "Test")
relatedSet.save() # À SUPPRIMER !
# ✅ CORRECT
relatedSet = mbo.getMboSet("RELATED_WO")
relatedWo = relatedSet.moveFirst()
if relatedWo:
relatedWo.setValue("DESCRIPTION", "Test")
# Maximo gère la transaction globale lors de la sauvegarde du MBO parent
- Si vous devez mettre à jour un ensemble d'objets indépendants en arrière-plan, utilisez
MXServer.getMXServer().getMboSet()dans un script d'action séparé.
Vérifications et résultats attendus
| Contrôle | Résultat attendu |
| Reproduction du symptôme | Pop-up BMXAA4200E à la sauvegarde d'un écran |
| Vérification après intervention | La sauvegarde s'effectue sans exception ni conflit de transaction |
| Non-régression | Les données de l'objet parent et des objets enfants sont correctement écrites |
Limites et cas particuliers
Dans les transactions REST ou les tâches Cron lourdes, utilisez la méthode mbo.reset() pour rafraîchir l’instance avant modification si des traitements concurrents sont inévitables.
Ressources liées
Références officielles
—
Commentaires
Une question ou un retour d’expérience sur cette procédure ? Partagez-le ici.
Connectez-vous pour participer à la discussion.
Se connecter