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

  1. 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
  1. 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

—