У меня есть список лидов на карте, которым я хочу динамически переназначить очередь в коде. Как я могу это сделать? Ниже приведен фрагмент кода, показывающий, как карта заполняется лидами, принадлежащими конкретному владельцу.

    Set<Id> ownerIds = new Set<Id>();
    Map<Id, Integer> getNumberOfLeadsForEachOwner = new Map<Id, Integer>();
    for (Lead leadObj : trigger.new){
            ownerIds.add(leadObj.OwnerId);
    }
    
    
        AggregateResult[] currentLeadsByOwner = [SELECT COUNT(Id)leadsCount, OwnerId
                                                 FROM Lead
                                                 WHERE OwnerId IN :ownerIds AND Status = 'Open - Not Contacted'
                                                 GROUP BY OwnerId];
    
    
        for (AggregateResult aggResult : currentLeadsByOwner){
            getNumberOfLeadsForEachOwner.put((Id)aggResult.get('OwnerId'), (Integer)aggResult.get('leadsCount'));
        }
    
    if (trigger.isInsert){
        for (Lead leadInstance : trigger.new){
    
                if (getNumberOfLeadsForEachOwner.containsKey(leadInstance.OwnerId)){
                    if (String.valueOf(leadInstance.OwnerId).substring(0, 3) == '005'){
                        //Check if the number of leads per owner is greater than 3 and they may not create a lead for themselves
                        if ((Integer)getNumberOfLeadsForEachOwner.get(leadInstance.OwnerId) >= getMaximumNumberOfOpenLeads.Open_Leads_Max__c){
                            leadInstance.addError('You have exceeded the number of open leads that you can have at a time.');
                        }
                        else if(LeadTriggerHandler.opportunityInstance != null && LeadTriggerHandler.opportunityInstance == true){
                            
                            
                            if(some condition){
                           //THIS IS WHERE I NEED TO REASSIGN THE LEAD FROM THE OWNER TO A QUEUE NAMED 'New Lead'
                           }

                            System.debug('Owner is changed insert');
                        }
                    }
                }
            }
}

Теперь я хочу переназначить лид при выполнении определенного условия в очередь под названием «Новые лиды».

0
Harold_Finch 9 Окт 2020 в 14:33

1 ответ

Лучший ответ

Чтобы назначить запись в очередь, вам нужно запросить очередь:

Group newLeadQueue = [SELECT Id FROM Group WHERE Type = 'Queue' and Name = 'New Leads'];

...

leadRecord.OwnerId = newLeadQueue.Id;
2
sfdcfox 9 Окт 2020 в 15:24
Я получаю сообщение об ошибке List has no rows for assignment to SObject Trigger.LeadTrigger: line 20, column 1 Вот что у меня в строке 20: Group newLeadQueue = [SELECT Id FROM Group WHERE TYPE = 'Queue' AND Name = 'New Leads' LIMIT 1];. Ошибка предполагает, что у меня нет строк в Group sObject. Нужно ли добавлять тестовые записи в объект «Группа» в Salesforce?
 – 
Harold_Finch
9 Окт 2020 в 15:43
Может быть, у вас неправильное имя? Однако для вашего модульного теста вам нужно будет вставить новый объект Group и назначить запись QueueSObject для разрешения случаев.
 – 
sfdcfox
9 Окт 2020 в 16:07
Это для лидов, а не для кейсов. Позвольте мне попробовать написать модульный тест
 – 
Harold_Finch
9 Окт 2020 в 16:13
Я хотел сказать Лиды, честное слово. Это говорит об отсутствии кофе. Тем не менее, то же самое применимо. Создайте группу с привязанным к ней объектом QueueSObject, и тогда вы сможете пройти модульный тест.
 – 
sfdcfox
9 Окт 2020 в 16:15
Я новичок в Salesforce после 6 лет разработки .Net. Не могли бы вы показать мне пример кода, как создать этот QueueSObject?
 – 
Harold_Finch
9 Окт 2020 в 16:19