Development questions
Write a trigger on Lead to prevent conversion if certain custom fields or a related checklist task is incomplete.
Use before update on Lead and detect the conversion (IsConverted going false to true). Block with addError if the requirement isn't met.
apex
trigger LeadTrigger on Lead (before update) {
Set<Id> leadIds = new Set<Id>();
for (Lead l : Trigger.new) if (l.IsConverted && !Trigger.oldMap.get(l.Id).IsConverted) leadIds.add(l.Id);
Map<Id, Integer> openTasks = new Map<Id, Integer>();
for (AggregateResult ar : [SELECT WhoId w, COUNT(Id) c FROM Task WHERE WhoId IN :leadIds
AND IsClosed = false GROUP BY WhoId]) openTasks.put((Id) ar.get('w'), (Integer) ar.get('c'));
for (Lead l : Trigger.new) {
if (leadIds.contains(l.Id) && (l.Qualification_Notes__c == null || openTasks.containsKey(l.Id))) {
l.addError('Complete the required field and close checklist tasks before converting.');
}
}
}
apex-triggertriggercodingscenariolead-conversion
More Development questions
- What is an Apex Trigger in Salesforce and when should you use it over Flows?
- What is the difference between before triggers and after triggers?
- Explain all Trigger context variables (isInsert, isUpdate, isDelete, isUndelete, isBefore, isAfter, isExecuting, size, operationType).
- What is the difference between Trigger.new and Trigger.old?
- In which trigger events are Trigger.new and Trigger.newMap available?
- In which trigger events are Trigger.old and Trigger.oldMap available?