ApexAdvancedplatform-eventstransactionsdml
Publish Platform Events after DML commit without losing events on rollback
Real World Scenario
Trigger publishes Order_Created__e before save. Validation rule failure rolls back Order but warehouse receives event and ships phantom order.
Expected Answer
• Publish in after trigger only—DML already committed for current record batch
• EventBus.publish in after insert/update not before trigger
• Transactional Platform Events publish only after successful transaction commit
• Subscriber idempotent: verify Order exists before warehouse action
• Never publish from before trigger or validation that may fail
• CDC alternative when transactional guarantee with field changes required
• Test rollback scenario: assert no event delivered on validation failure
Follow-Up Questions & Answers
Click to expand — each follow-up includes a direct, interview-ready answer
Main difference: use case and scale. Publish in after trigger only—DML already committed for current record batch. EventBus.publish in after insert/update not before trigger. Pick based on your integration pattern and team capability. Phantom events from before-save publish are integration nightmares—after commit or transactional events only. Optimize for scale and operational observability.
Architect Perspective
Phantom events from before-save publish are integration nightmares—after commit or transactional events only.