Skip to main content

Implement Salesforce Triggers

Add triggers to your Salesforce objects to enable RDN integration.

Trigger Overview​

Triggers monitor your Lead and Contact records for changes and initiate the integration workflow. The RDNTriggerHandler class handles all the complex logic.

Lead Trigger​

Create a trigger on the Lead object:

trigger LeadTrigger on Lead (after insert, after update) {
if (Trigger.isAfter) {
RDNTriggerHandler.handleTrigger(Trigger.new, Trigger.oldMap);
}
}

Contact Trigger​

Create a trigger on the Contact object:

trigger ContactTrigger on Contact (after insert, after update) {
if (Trigger.isAfter) {
RDNTriggerHandler.handleTrigger(Trigger.new, Trigger.oldMap);
}
}

How It Works​

Trigger Flow​

  1. Record Updated - User creates or modifies a Lead or Contact
  2. After Trigger Fires - Trigger executes after record is saved
  3. Handler Invoked - RDNTriggerHandler.handleTrigger() is called
  4. Change Detection - Old and new values are compared
  5. Job Enqueued - If changes detected, Queueable job is enqueued
  6. Async Processing - Job runs asynchronously to avoid governor limits
  7. API Call - RDN API is called with configured fields
  8. Response Mapped - API response is mapped back to Salesforce
  9. Record Updated - Fields are updated with API response data

Trigger Execution Diagram​

Trigger Flow

Important Details​

warning

Change Detection: The old map and the new list are compared to identify any changes in the fields. An HTTP call will only be triggered if a change is detected in monitored fields.

What This Means​

  • If a field value hasn't changed, the integration won't run
  • This saves API calls and processing resources
  • Only changed records trigger integrations

Best Practices​

1. Use After Triggers Only​

// ✅ GOOD - After trigger ensures record is saved
trigger LeadTrigger on Lead (after insert, after update) {
if (Trigger.isAfter) {
RDNTriggerHandler.handleTrigger(Trigger.new, Trigger.oldMap);
}
}

// ❌ AVOID - Before triggers can't call APIs
trigger LeadTrigger on Lead (before insert, before update) {
// This won't work for API calls
}

2. Only Include Insert and Update​

// ✅ GOOD - Only monitor creates and updates
trigger LeadTrigger on Lead (after insert, after update) {
// ...
}

// ❌ AVOID - Deletes/Undeletes usually don't need integration
trigger LeadTrigger on Lead (after insert, after update, after delete) {
// Only do this if you have a valid business need
}

3. Add Trigger Handlers for Multiple Objects​

If you need to monitor Account, Opportunity, or other objects:

trigger AccountTrigger on Account (after insert, after update) {
if (Trigger.isAfter) {
RDNTriggerHandler.handleTrigger(Trigger.new, Trigger.oldMap);
}
}

Deployment​

To Sandbox​

  1. Create/modify trigger in your development org
  2. Deploy to Sandbox via Change Set or SFDX
  3. Test with sample records (see Testing Guide)

To Production​

  1. Test thoroughly in Sandbox
  2. Create a Change Set including the trigger
  3. Deploy during maintenance window
  4. Monitor logs for the first hour after deployment

Troubleshooting​

Trigger Not Firing​

Check:

  • Is the trigger active? (Setup → Apex Triggers)
  • Is the object correct? (Lead vs Contact)
  • Are you using after insert or after update?

Too Many API Calls​

Solution:

  • Make sure change detection is working
  • Check that Trigger.oldMap is populated
  • Review RDN logs to see which records triggered calls

Next Steps​