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的触发器代码?
答案 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);
但你不能通过触发器直接这样做,因为文件表明它不被允许。你可以测试一下,看看你是否可以间接地从另一个班级做这件事,但我还没有测试过。