You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Salesforce可调用方法传参并传入Web-to-Lead的Session值

嘿,我来帮你一步步解决这两个Salesforce相关的问题:

1. 如何向Salesforce的可调用方法(InvocableMethod)传递参数?

传递参数给InvocableMethod主要看你是用低代码工具还是Apex代码调用,下面分场景说明:

通过Flow/Process Builder传递(低代码方式)

  • 用Flow的话:

    1. 在Flow编辑器里添加一个「Action」元素,选择你的AutoConvertLeads类的LeadAssign方法。
    2. 在Action的配置界面,找到输入参数LeadIds(这是一个Id列表),把Flow里的变量(比如当前触发的Lead Id,或者你收集到的Lead Id集合)映射到这个参数上。
    3. 保存并激活Flow,当Flow触发时,参数就会自动传给Invocable方法。
  • 用Process Builder的话:

    1. 在Process Builder的「Immediate Actions」里添加「Apex」类型的动作。
    2. 选择AutoConvertLeads类,然后在「Set Apex Variables」部分,把Process触发的Lead Id赋值给LeadIds(注意要包装成列表,因为方法参数是List<Id>类型)。

通过Apex代码传递

如果是在其他Apex类里调用,直接传入符合类型要求的参数就行,举个例子:

// 准备要处理的Lead Id列表
List<Id> targetLeadIds = new List<Id>{'00QXXXXXXXXXXXX'};
// 调用Invocable方法
AutoConvertLeads.LeadAssign(targetLeadIds);

2. 修改Apex代码,把Web-to-Lead的Session值传到Contact的session__c字段

看了你的原代码,发现c.session__c是硬编码的占位符,而Session值其实是Web-to-Lead提交到Lead的对应字段里的,所以我们只需要从Lead里取出这个值,再赋值给Contact就好。

修改后的完整代码

public class AutoConvertLeads {
    @InvocableMethod
    public static void LeadAssign(List<Id> LeadIds) {
        // 查询Lead时同时获取Email和session__c字段(Web-to-Lead的Session值存在这里)
        Lead leadRecord = [SELECT Id, Email, session__c FROM Lead WHERE Id = :LeadIds[0] LIMIT 1];
        
        Database.LeadConvert leadConvert = new Database.LeadConvert();
        leadConvert.setLeadId(leadRecord.Id);
        
        // 获取默认的转换状态
        LeadStatus convertedStatus = [SELECT Id, MasterLabel FROM LeadStatus WHERE IsConverted = true LIMIT 1];
        
        // 根据Lead的Email查找已存在的Contact
        List<Contact> contactList = [SELECT Id, Name, session__c FROM Contact WHERE Email = :leadRecord.Email LIMIT 1];
        
        if(contactList.size() > 0) {
            Contact contactRecord = contactList[0];
            // 把Lead里的Session值直接赋值给Contact的session__c字段
            contactRecord.session__c = leadRecord.session__c;
            update contactRecord;
        } else {
            leadConvert.setConvertedStatus(convertedStatus.MasterLabel);
            leadConvert.setDoNotCreateOpportunity(true); // 如果需要创建Opportunity可以删掉这行
            Database.LeadConvertResult convertResult = Database.convertLead(leadConvert);
            System.assert(convertResult.isSuccess());
        }
    }
}

关键修改点

  1. 查询Lead时包含session__c:原代码只查了Id和Email,现在加上session__c,这样就能拿到Web-to-Lead提交的Session选项值。
  2. 替换硬编码值为Lead的session__c:把占位符改成直接引用Lead里的session__c值,确保Contact的字段和Lead的Session值保持一致。

额外注意事项

  • 要确认Lead对象上确实有session__c这个Picklist字段,而且Web-to-Lead表单已经正确把用户填写的Session选项映射到这个字段上。
  • 因为session__c是Picklist,Lead里的值必须是Contact的session__c字段的有效可选值(就是你列出的那些时间选项),不然更新Contact时会触发验证错误。如果怕有不匹配的情况,可以加个try-catch块处理更新异常,或者提前校验值的有效性。

内容的提问来源于stack exchange,提问作者Sameer Vitvekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:15:11