Как передать параметры в вызываемый метод SF? - PullRequest
0 голосов
/ 24 мая 2018
    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());
       }
   }
}

Значение сеанса исходит из веб-формы, чтобы привести форму в зависимости от того, кто подписывается.Это список выбора.Значения являются датами, как упоминалось - 24 мая;14:00 - 16:00, 28 июня;9:00 - 12:00, 24 мая;10:00 - 12:00, 28 июня;16:30 - 19:30, 26 июля;9:00 - 12:00, 26 июля;16:30 - 19:30

Как передать эти значения в этот код триггера для c.session__c?

1 Ответ

0 голосов
/ 24 мая 2018

В коде триггера доступны все свойства объекта, поэтому в этом случае будут доступны все свойства светодиода, поэтому, если у вас есть триггер, подобный этому

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

Это распечатало бы сессию__поле от лидера.Если вы хотите передать значение в виде параметра функции, вы можете сделать это следующим образом:

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

Однако может быть проще передать всю запись опережения из триггера или если вы передаете запрос идентификаторов точные полячто вам нужно от свинца в методе.

Но из вашего кода выглядит то, что вы хотите сделать, это:

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

Или что-то еще, что вы хотите.Но так как вы хотите отобразить поле на отведении на поле на контакте, почему бы не использовать функциональность сопоставления отведений?

РЕДАКТИРОВАТЬ

Я думаю, что название вводит в заблуждение, я думаюВы хотели спросить, как передать параметры из триггера в этот вызываемый метод.Из документации

Триггеры не могут ссылаться на вызываемые методы

Однако это может быть сделано с помощью потоков и построителя процессов, так что это может бытьСтоит разобраться.

Кстати, ваш код вообще не увеличен в размерах и приведет к неожиданным результатам, если несколько отведений будут переданы с разными кодами сеанса.Вам, вероятно, следует создать карту> для преобразованных интересов, где ключ - это электронная почта (нормализовано), а список - список преобразованных интересов.Запросите контакты с помощью карты списка keySet () и создайте карту, в которой ключом является адрес электронной почты (нормализовано), и обновите значение для lead.whever__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);

Но вы не можете сделать это из триггера напрямую, потому что документ указывает, что это не разрешено.Вы можете проверить, можете ли вы сделать это косвенно из другого класса, но я этого не проверял.

...