global class Opportunity_EmailService implements Messaging.InboundEmailHandler {
public Messaging.InboundEmailResult handleInboundEmail(Messaging.inboundEmail email, Messaging.InboundEnvelope env) {
Messaging.InboundEmailResult result = new Messaging.InboundEmailResult();
//try{
List<Opportunity> oppsToUpsert = new List<Opportunity>();
List<Account> agenciesToUpsert = new List<Account>();
List<Policyholder__c> policyholdersToUpsert = new List<Policyholder__c>();
for(Messaging.InboundEmail.BinaryAttachment att : email.binaryAttachments){
String attBody = att.Body.toString();
String firstRow = attBody.split('\r\n', 2)[0];
system.debug(firstRow);
List<String> columns = firstRow.split('\\|');
Integer columnCount = columns.size();
system.debug(columnCount);
if(columnCount == 13) {
boolean isFirstRow = true;
for(String row : attBody.split('\r\n')) {
if(isFirstRow){
isFirstRow = false;
continue;
}
List<String> agencyData = row.split('\\|');
system.debug(JSON.serializePretty(agencyData));
Account acct = new Account();//if the opp already exists this has to be new Opportunity(Id = existingOpp.id);
acct.Name = agencyData[1];
acct.Phone = agencyData[10];
acct.Email__c = agencyData[11];
acct.BillingStreet = agencyData[5];
acct.BillingCity = agencyData[7];
acct.BillingState = agencyData[8];
acct.BillingPostalCode = agencyData[9];
//whats the rest of the data?
//add the rest of the parsing
agenciesToUpsert.add(acct);
}
}
if (columnCount == 22) {
boolean isFirstRow = true;
for(String row : attBody.split('\r\n')) {
if(isFirstRow){
isFirstRow = false;
continue;
}
List<String> oppData = row.split('\\|');
system.debug(JSON.serializePretty(oppData));
Opportunity opp = new Opportunity();//if the opp already exists this has to be new Opportunity(Id = existingOpp.id);
opp.CloseDate = system.today();//THIS NEEDS TO CHANGE
opp.Name = oppData[4];
opp.StageName = oppData[11];
//whats the rest of the data?
//add the rest of the parsing
oppsToUpsert.add(opp);
}
}
if (columnCount == 16) {
boolean isFirstRow = true;
for(String row : attBody.split('\r\n')) {
if(isFirstRow){
isFirstRow = false;
continue;
}
List<String> policyholderData = row.split('\\|');
system.debug(JSON.serializePretty(policyholderData));
Policyholder__c policyholder = new Policyholder__c();//if the opp already exists this has to be new Opportunity(Id = existingOpp.id);
policyholder.Name = policyholderData[2];
//whats the rest of the data?
//add the rest of the parsing
policyholdersToUpsert.add(policyholder);
}
}
}
if (agenciesToUpsert.size() > 0) {
Database.UpsertResult[] urList = Database.upsert(agenciesToUpsert, false);
// Iterate through each returned result
for (Database.UpsertResult sr : urList) {
if (sr.isSuccess()) {
// Operation was successful, so get the ID of the record that was processed
System.debug('Successfully inserted account. Account ID: ' + sr.getId());
}
else {
// Operation failed, so get all errors
for(Database.Error err : sr.getErrors()) {
System.debug('The following error has occurred.');
System.debug(err.getStatusCode() + ': ' + err.getMessage());
System.debug('Account fields that affected this error: ' + err.getFields());
}
}
}
}
if(oppsToUpsert.size() > 0) {
System.debug(oppsToUpsert);
upsert oppsToUpsert;
}
if (policyholdersToUpsert.size() > 0) {
upsert policyholdersToUpsert;
}
return result;
}
}
So when I use the replay debugger it displays the instantiated Lists you see at the top as empty arrays in the variables section of the VS Code debugger. As I step through the code and hit a variety of breakpoints these arrays/lists never update in the variables debugger with the added values so I can't check to see that they are getting filled. Am I missing something? Is there additional functionality in VS Code debugger that I'm not aware of or a way to easily accomplish this without using system.debug. Maybe the watch or checkpoint sections?
Entering one of the lists in watch didn’t produce anything for me...
I could also just be a total noob...
Or is this a limitation of the Replay functionality?