Мы выполняем массовую операцию, используя 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 возвращает больше записей, чем первый. Может ли это быть правдой?
Если нет - как бы вы отладили это или переписали?