MIXED_DML_OPERATION bei Salesforce-Deployments beheben
Apex versucht, ein Setup-Objekt wie User oder Group und ein Nicht-Setup-Objekt in derselben Transaktion zu ändern.
Tritt auf bei: Apex-Laufzeit, meist innerhalb der für ein Deployment erforderlichen TestausführungWas das bedeutet
MIXED_DML_OPERATION ist eine Apex-Laufzeit-Exception: Salesforce erlaubt kein DML auf einem Setup-Objekt (User, Group, GroupMember und ähnliche) und einem Nicht-Setup-Objekt (Account, Contact, benutzerdefinierte Objekte) innerhalb derselben Transaktion. Es tritt am häufigsten während der von einem Produktions-Deployment geforderten Apex-Testausführung auf und wird dann zu einem das Deployment blockierenden Testfehler.
Die Einschränkung besteht, weil Setup-Objekte den Zugriff auf Datensatzebene und die Freigabe ändern können, und Salesforce lässt nicht zu, dass eine einzelne Transaktion gleichzeitig ändert, wer Daten sehen kann, und diese Daten schreibt, weshalb es bei der Behebung immer um Transaktionsgrenzen geht, nie um den Inhalt der Datensätze.
Häufige Ursachen
Die Lösung
- Setup-Objekt-DML in eine eigene Transaktion verschiebenUmschließen Sie das Einfügen von User oder Group mit einer Future-Methode oder isolieren Sie es anderweitig, sodass es committet wird, bevor das Business-Objekt-DML läuft.
@future private static void insertUserAsync(String jsonUser) { User u = (User) JSON.deserialize(jsonUser, User.class); insert u; } - Test.startTest() und Test.stopTest() verwenden, um die Transaktion aufzuteilenPlatzieren Sie in Tests das Setup-Objekt-DML vor Test.startTest(), damit es innerhalb seiner eigenen Transaktionsgrenze vor dem Business-Objekt-DML läuft.
- Setup- und Business-Objekt-Inserts niemals im selben Trigger-Kontext kombinierenRefaktorisieren Sie die Automatisierung so, dass Setup-Objekt-Änderungen, wie User-Provisioning oder Gruppenmitgliedschaft, niemals eine Transaktion mit Business-Datensatz-DML teilen.
Wie Serpent das verhindert
Die CI-Pipeline von Serpent führt die vollständige Apex-Testsuite bei jeder Aufgabe aus, bevor sie für einen Merge in Frage kommt, sodass ein MIXED_DML_OPERATION-Testfehler bei der Aufgabe auftaucht, die ihn verursacht hat, nicht bei einer Produktionsfreigabe. Siehe die Bibliothek der Salesforce-Deploymentfehler.

Prävention
Verwandte Fehler
MIXED_DML_OPERATION, beantwortet
Kostenlos starten. Keine Kreditkarte, keine Installation, keine Verpflichtung.
In unter 15 Minuten eingerichtet. Keine DevOps-Einstellung nötig.
