Развитие Salesforce - PullRequest
       30

Развитие Salesforce

1 голос
/ 01 мая 2020

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

Что я уже сделал:

trigger OppCreatedKeyContactTrigger on Opportunity (after insert, after Update) {
    for(Opportunity opp : Trigger.New){

        if(Trigger.isInsert || Trigger.isUpdate){
            
            Contact con = [SELECT Id,Name,Key_Contact__c FROM Contact WHERE AccountId =:opp.AccountId];

            con.Key_Contact__c = true;
            update con;
            
        }
    }
}

мне тоже нужен тестовый класс

1 Ответ

0 голосов
/ 01 мая 2020

Используете ли вы OpportunityContactRole (стандартный связанный список в разделе возможностей, но, возможно, его нужно включить в настройке) или у вас есть 1 или более пользовательских поисков из Opportunity to Contact? Что должно произойти «после обновления»?

Что-то подобное должно повернуть вас в правильном направлении. Я не гарантирую, что он скомпилируется, если вы застряли, отредактируйте вопрос. Это будет всего 1 запрос, а не в al oop (массово-безопасный). Если вы действительно хотите go с лучшими практиками - следующим шагом будет использование некоторой структуры обработчика триггеров.

trigger OpportunityTrigger on Opportunity (after insert) {

    Set<Id> accountIds = new Set<Id>();
    for(Opportunity o : trigger.new){
        accountIds.add(o.AccountId);
    }
    accountIds.remove(null);

    if(!accountIds.isEmpty()){
        Map<Id, Account> accounts = new Map<Id, Account>([
            SELECT Id,
                (SELECT Id FROM Contacts WHERE Key_Contact__c = true)
            FROM Account 
            WHERE Id IN :accountIds
        ]);
        List<OpportunityContactRole> roles = new List<OpportunityContactRole>();

        for(Opportunity o : trigger.new){
            Account a = accounts.get(o.AccountId);
            if(a != null && !a.Contacts.isEmpty()){
                for(Contact c : a.Contacts){
                    roles.add(new OpportunityContactRole(
                        OpportunityId = o.Id,
                        ContactId = c.Id,
                        Role = 'Decision Maker'
                    ));
                }
            }
        }
        insert roles;
    }
}
...