首页 > 解决方案 > 如何将参数传递给可调用的方法 sf?

问题描述

    Public class AutoConvertLeads
{
    @InvocableMethod
    public static void LeadAssign(List<Id> LeadIds)
    {
            Database.LeadConvert Leadconvert = new Database.LeadConvert();
            Leadconvert.setLeadId(LeadIds[0]);
            lead l= [SELECT Id, email FROM Lead WHERE id=:LeadIds[0]];
            LeadStatus Leads= [SELECT Id, MasterLabel FROM LeadStatus WHERE IsConverted=true LIMIT 1];
        contact[] clist=[select id,name,session__c from contact where email=:l.email limit 1 ];

        if(clist.size()>0){
            contact c=clist[0];
            c.session__c='PUT_THE_VALUE_YOU_WANT_TO_UPDATE_THE_FIELD_WITH'; //Make sure you are inserting value according to field type.
            update c;
        }
        else{    
            Leadconvert.setConvertedStatus(Leads.MasterLabel);
            Leadconvert.setDoNotCreateOpportunity(TRUE); //Remove this line if you want to create an opportunity from Lead Conversion 
            Database.LeadConvertResult Leadconverts = Database.convertLead(Leadconvert);
            System.assert(Leadconverts.isSuccess());
       }
   }
}

会话值来自网络到潜在客户表单,具体取决于注册人。这是一个选择列表。这些值是提到的日期 - 5 月 24 日;6 月 28 日下午 2 点至下午 4 点;5 月 24 日上午 9 点至下午 12 点;6月28日上午10点-12点;7 月 26 日下午 4:30 - 晚上 7:30;7 月 26 日上午 9 点至下午 12 点;下午 4:30 - 晚上 7:30。

如何将这些值传递到 c.session__c 的触发代码中?

标签: salesforceapex

解决方案


在触发器代码中,对象的所有属性都可用,所以在这种情况下,led 的所有属性都可用,所以如果你有这样的触发器

trigger LeadTrigger on Lead (before insert){
   for(Lead l : Trigger.new){
       System.debug(l.Session__c);
   }
}

这将从领先者中打印出 session__ 字段。如果你想将值作为函数参数传递,你可以这样做:

SomeClass.someStaticMethod(l.Session__c);
//or
new SomeClass().someMethod(l.Session__c);

但是,从触发器传递整个潜在客户记录可能会更容易,或者如果您通过 ids 查询您在方法中的潜在客户中需要的确切字段。

但是从您的代码看来,您想要做的是

 contact c = clist[0];
 c.session__c = l.MasterLabel;
 update c;

或者你想要的任何领域。但是,既然您想将潜在客户字段映射到联系人字段,为什么不使用潜在客户映射功能呢?

编辑

我认为标题具有误导性,我认为您的意思是要问如何将参数从触发器传递到这个可调用的方法中。从文档

触发器不能引用可调用的方法

但是,这可以通过流程和流程构建器来完成,因此可能值得研究。

在旁注中,您的代码根本没有被批量化,并且如果使用不同的会话代码传入多个潜在客户,则会导致意想不到的结果。您可能应该为已转换的潜在客户创建一个 Map>,其中键是电子邮件(标准化),列表是已转换潜在客户的列表。通过列表映射 keySet() 查询联系人并构建一个映射,其中键是电子邮件(规范化),并对lead.whatever__c 执行更新值并向上添加联系人映射值

要将值传递给您列出的方法,您会这样做

List<Id> leadIds = new List<Id>();
for(Lead l : [SELECT Id FROM Lead]){ //the query here is an example u can have a list already available
   leadIds.add(l.Id);
}
AutoConvertLeads.LeadAssign(leadIds);

但是您不能直接从触发器中执行此操作,因为文档表明它是不允许的。你可以测试看看你是否可以间接地从另一个班级做到这一点,但我还没有测试过。


推荐阅读