Может ли Trigger.new вернуть другой набор, если он вызывается дважды? - PullRequest
0 голосов
/ 14 апреля 2020

Мы выполняем массовую операцию, используя Heroku Connect, где мы помещаем sh 6000 записей в Salesforce.

Наш триггер хорошо работает на небольших партиях, но выдает исключение на больших партиях.

Наш код выглядит следующим образом:

trigger measuresEventUpdate on ELR_Measures_Event__c (before insert) {
    //Step 1: List of all Ucare Id's to Query
    Set<String> memberNmbrs = new Set<String>();
    for (ELR_Measures_Event__c eventObject : Trigger.new) {
        if (eventObject.id_2020__c != null) {
            memberNmbrs.add(eventObject.id_2020__c);
        }
    }

    // Step 2: Query for all responsive records in Step 1
    List<Account> targetAccounts = [SELECT Id,
                                           .....
                                    FROM Account
                                    WHERE MEMBER_NBR__c
                                    IN :memberNmbrs];

    Map<String, Account> accounts = new Map<String, Account>();
    for (Account account : targetAccounts) {
        accounts.put(account.MEMBER_NBR__c, account);
    }

    // List of attributes that need to be updated
    List<String> attributes = new List<String>();
    attributes.add('Attribute_One__c');
    attributes.add('Attribute_Two__c');
    ....

    // For each new record
    for (ELR_Measures_Event__c eventObject : Trigger.new) {

        Account account = accounts.get(eventObject.id_2020__c);

        // Set the eventObject.Account__c;
        eventObject.Account__c = account.Id;  // NULL POINTER EXCEPTION

        // Set the Account attributes in Salesforce
        for (String attribute : attributes) {
            if (eventObject.get(attribute) != null) {
                account.put(attribute, eventObject.get(attribute));
            }
        }

        // Update the member account after all attributes are set
        update account;
    }
}

Мы получаем исключение нулевого указателя в этой строке:

eventObject.Account__c = account.Id;

Одна теория что второй Trigger.new возвращает больше записей, чем первый. Может ли это быть правдой?

Если нет - как бы вы отладили это или переписали?

...