Apex Trigger Handler для вставки и обновления - PullRequest
0 голосов
/ 24 марта 2020

Я написал класс Apex для обновления записи учетной записи на основе информации из пользовательского типа метаданных. У меня есть обработчик триггера, который я использую для вызова кода (фрагмент ниже). Код берет старую карту и новую карту. Я хочу иметь возможность использовать код не только для обновления, но и для вставки, и у меня возникают проблемы с тем, как я могу отредактировать его, чтобы он мог просто принять новую карту для вставки.

                //Run Apex class to update tier field on child accounts
            if( UpdateChildAccountTierControl != null && UpdateChildAccountTierControl.Enabled__c )  {
                MatchAccountCountrytoRegion mtch = new MatchAccountCountrytoRegion (Trigger.oldMap, Trigger.newMap);
                mtch.MatchAcctCtryRegion();          
            }

    }   

public class MatchAccountCountrytoRegion {
Map<Id, Account> oldAccts;
Map<Id, Account> newAccts;

public MatchAccountCountrytoRegion (
    Map<Id, Account>oldTriggerAccts,
    Map<Id, Account>newTriggerAccts) {
    oldAccts = oldTriggerAccts;
    newAccts = newTriggerAccts; }

public void MatchAcctCtryRegion() {
    Set<Id> acctIds      = new Set <Id>();
    Set<string> acctCtry = new Set <string>();

    for (Account a : newAccts.values()) {
        if (oldAccts.isEmpty()) {
            if (a.ShippingCountry != null) {
                acctIds.add(a.Id);
                acctCtry.add(a.ShippingCountry);
     }
}
}

    List<CountryMapping__mdt> metalist = [SELECT Country__c, Region__c FROM CountryMapping__mdt WHERE Country__c =: acctCtry];

    Map<String, String> metadatamap = new Map<String, String>();

    for (CountryMapping__mdt cm: metalist) {
        metadatamap.put(cm.Country__c, cm.Region__c);}

    for (Account a :  newAccts.values()) {            
        String region = metadatamap.get(a.ShippingCountry);
        if ( region != null ) {
            a.Account_Region__c = region;
        }
    }        
}}
...