在Salesforce自动转换Lead的Apex类中设置AccountID与ContactID
解决Salesforce Flow调用Apex转换Lead到已有Account/Contact的参数传递问题
原代码的核心问题是错误地尝试直接访问Flow实例获取变量,Invocable方法的正确做法是通过自定义输入参数类接收Flow传递的值,而非直接引用Flow interview对象。以下是修正后的实现步骤:
1. 修正Apex类代码
创建包含所需字段的输入参数类,让Flow可以直接传递Lead ID、目标Account ID和Contact ID:
public class AutoConvertLeads { // 自定义输入参数类,对应Flow要传递的变量 public class ConvertRequest { @InvocableVariable(required=true) public Id leadId; // 要转换的Lead ID @InvocableVariable(required=true) public Id targetAccountId; // Flow中的varAccountID @InvocableVariable(required=true) public Id targetContactId; // Flow中的目标Contact ID } @InvocableMethod(label='自动转换Lead到已有Account和Contact' description='将指定Lead转换到已存在的Account和Contact') public static void convertLeads(List<ConvertRequest> requests) { // 获取默认的转换状态 LeadStatus convertedStatus = [SELECT MasterLabel FROM LeadStatus WHERE IsConverted = true LIMIT 1]; List<Database.LeadConvert> convertList = new List<Database.LeadConvert>(); for(ConvertRequest req : requests) { Database.LeadConvert leadConvert = new Database.LeadConvert(); leadConvert.setLeadId(req.leadId); leadConvert.setConvertedStatus(convertedStatus.MasterLabel); leadConvert.setDoNotCreateOpportunity(true); // 不需要创建Opportunity leadConvert.setAccountId(req.targetAccountId); // 绑定Flow传入的Account ID leadConvert.setContactId(req.targetContactId); // 绑定Flow传入的Contact ID convertList.add(leadConvert); } if(!convertList.isEmpty()) { Database.convertLead(convertList); } } }
2. Flow中的配置步骤
- 在Flow里添加「调用Apex」动作,选择上述
AutoConvertLeads类的convertLeads方法 - 在动作的「设置输入值」环节,分别映射:
- Lead Id:选择Flow中要转换的Lead记录ID(比如当前触发的Lead变量)
- Target Account Id:选择Flow中存储目标Account ID的变量
varAccountID - Target Contact Id:选择Flow中存储目标Contact ID的变量
关键修正点说明
- 原代码中
setContactId(currentlead)是错误的,currentlead是Lead的ID,必须传入已有的Contact ID - 移除了错误的
Flow.interview.Flow_template_gallery引用,Invocable方法不能直接依赖特定Flow实例,通过输入参数传递变量是标准做法 - 用自定义参数类接收多值,符合Salesforce Invocable方法的最佳实践
内容的提问来源于stack exchange,提问作者kennywutankman
相关产品推荐
相关产品推荐

