如何将参数传递给一个可调用的方法sf?

时间:2018-05-24 15:04:07

标签: salesforce apex

    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的触发器代码?

1 个答案:

答案 0 :(得分:0)

在触发器代码中,对象的所有属性都可用,因此在这种情况下,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);

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

但是从你的代码看起来你想做的就是

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

或者你想要的领域是什么。但是,由于您希望将导线上的字段映射到联系字段,为什么不使用导联映射功能?

修改

我认为标题具有误导性,我认为你想要问如何将触发器中的参数传递给这个可调用的方法。来自documentation

  

触发器无法引用可调用方法

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

在旁注中,您的代码根本没有批量化,如果多个潜在客户使用不同的会话代码传入,则会导致意外结果。你可能应该创建一个Map&gt;对于转换的潜在客户,其中密钥是电子邮件(规范化),列表是转换的潜在客户列表。通过列表映射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);

但你不能通过触发器直接这样做,因为文件表明它不被允许。你可以测试一下,看看你是否可以间接地从另一个班级做这件事,但我还没有测试过。