MIXED_DML_OPERATION in Salesforce-deployments oplossen
Apex probeert een setup-object, zoals User of Group, en een non-setup-object in dezelfde transactie te wijzigen.
Komt voor bij: Apex-runtime, meestal tijdens de testuitvoering die een deploy vereistWat het betekent
MIXED_DML_OPERATION is een Apex-runtime-exception: Salesforce staat geen DML toe op een setup-object (User, Group, GroupMember en vergelijkbare) en een non-setup-object (Account, Contact, custom objects) binnen dezelfde transactie. Dit komt meestal naar voren tijdens de Apex-testuitvoering die een productiedeployment vereist, wat leidt tot een deployment-blokkerende testfout.
De restrictie bestaat omdat setup-objecten record-niveau toegang en sharing kunnen wijzigen, en Salesforce staat niet toe dat één transactie zowel bepaalt wie data kan zien als die data tegelijk wegschrijft, wat de reden is dat de oplossing altijd over transactiegrenzen gaat, nooit over de inhoud van de records.
Veelvoorkomende oorzaken
De oplossing
- Verplaats setup-object-DML naar een eigen transactieVerpak de User- of Group-insert in een future-methode, of isoleer deze anderszins, zodat deze commit voordat de business-object-DML draait.
@future private static void insertUserAsync(String jsonUser) { User u = (User) JSON.deserialize(jsonUser, User.class); insert u; } - Gebruik Test.startTest() en Test.stopTest() om de transactie te splitsenPlaats in tests de setup-object-DML vóór Test.startTest(), zodat deze binnen zijn eigen transactiegrens draait vóór de business-object-DML.
- Combineer setup- en business-object-inserts nooit in één triggercontextRefactor automatisering zodat setup-object-wijzigingen, zoals user provisioning of groepslidmaatschap, nooit een transactie delen met business-record-DML.
Hoe Serpent dit voorkomt
De CI-pipeline van Serpent voert de volledige Apex-testsuite uit op elke taak voordat deze in aanmerking komt voor merge, zodat een MIXED_DML_OPERATION-testfout naar voren komt op de taak die deze veroorzaakte, niet op een productierelease. Zie de Salesforce-deploymentfoutenbibliotheek.

Preventie
Gerelateerde fouten
MIXED_DML_OPERATION, beantwoord
Start gratis. Geen creditcard, geen installatie, geen verplichting.
Binnen 15 minuten ingesteld. Geen DevOps-aanwerving nodig.
