You need to sign in to do that
Don't have an account?
Dbjensen
Help populating a long text field with multiple record names
Hello - I have a long text field on an opportunity that I would like to auto populate with the names of the products associated to that opportunity. I'm using a before update trigger and class. I have a map that holds all of the product names and can see the results in a debug statement. However, when I update the field, it's not adding all of the product names in the map. It only adds one name.
Example: My opp has 2 products. Widget 1 and Widget 2. I need to add both product names to a long text field. Below is my code. Any help would be appreciated.
public class AddProductNamesToOpportunity {
public static void addProductNmsToOpp(List<Opportunity> newOpp, List<Opportunity> oldOpp) {
string separator = '; ';
list<Opportunity> oppList = new list<Opportunity>();
//Old Opportunity Maps
map<Id, Decimal> mapOfOldOpps = new map<Id, Decimal>();
for(Opportunity oldOpps : oldOpp) {
mapOfOldOpps.put(oldOpps.Id, oldOpps.Amount);
}
system.debug('values in old map ' +mapOfOldOpps);
//New Opportunity Maps
map<Id, Decimal> mapOfnewOpps = new map<Id, Decimal>();
for(Opportunity newOpps : newOpp) {
mapOfnewOpps.put(newOpps.Id, newOpps.Amount);
}
system.debug('values in new map ' +mapOfnewOpps);
//Query Opp Line Items
List<OpportunityLineItem> oppLinImList = [SELECT
//Id,Product2.Name,PricebookEntry.Product2.Name,
OpportunityId,Product_Name__c FROM OpportunityLineItem WHERE OpportunityId IN :mapOfnewOpps.keyset()];
system.debug('opp line items found ' +oppLinImList);
//Opp Line Item Maps
map<Id, String> mapOLI = new map<Id, String>();
for(OpportunityLineItem oli : oppLinImList) {
mapOLI.put(oli.OpportunityId, oli.Product_Name__c);
}
system.debug('values in opp line item map' +mapOLI);
for(Opportunity opp : newOpp) {
if(mapOfOldOpps.values() != mapOfnewOpps.values() && !oppLinImList.isEmpty()) {
opp.Products_2__c = mapOLI.get(opp.Id);
oppList.add(opp);
} else if (oppLinImList.isEmpty()){
opp.Products_2__c = null;
oppList.add(opp);
}
}
try{
update oppList;
} catch (Exception e) {
system.debug('Opp product field did not update ' +e);
}
}
}
Example: My opp has 2 products. Widget 1 and Widget 2. I need to add both product names to a long text field. Below is my code. Any help would be appreciated.
public class AddProductNamesToOpportunity {
public static void addProductNmsToOpp(List<Opportunity> newOpp, List<Opportunity> oldOpp) {
string separator = '; ';
list<Opportunity> oppList = new list<Opportunity>();
//Old Opportunity Maps
map<Id, Decimal> mapOfOldOpps = new map<Id, Decimal>();
for(Opportunity oldOpps : oldOpp) {
mapOfOldOpps.put(oldOpps.Id, oldOpps.Amount);
}
system.debug('values in old map ' +mapOfOldOpps);
//New Opportunity Maps
map<Id, Decimal> mapOfnewOpps = new map<Id, Decimal>();
for(Opportunity newOpps : newOpp) {
mapOfnewOpps.put(newOpps.Id, newOpps.Amount);
}
system.debug('values in new map ' +mapOfnewOpps);
//Query Opp Line Items
List<OpportunityLineItem> oppLinImList = [SELECT
//Id,Product2.Name,PricebookEntry.Product2.Name,
OpportunityId,Product_Name__c FROM OpportunityLineItem WHERE OpportunityId IN :mapOfnewOpps.keyset()];
system.debug('opp line items found ' +oppLinImList);
//Opp Line Item Maps
map<Id, String> mapOLI = new map<Id, String>();
for(OpportunityLineItem oli : oppLinImList) {
mapOLI.put(oli.OpportunityId, oli.Product_Name__c);
}
system.debug('values in opp line item map' +mapOLI);
for(Opportunity opp : newOpp) {
if(mapOfOldOpps.values() != mapOfnewOpps.values() && !oppLinImList.isEmpty()) {
opp.Products_2__c = mapOLI.get(opp.Id);
oppList.add(opp);
} else if (oppLinImList.isEmpty()){
opp.Products_2__c = null;
oppList.add(opp);
}
}
try{
update oppList;
} catch (Exception e) {
system.debug('Opp product field did not update ' +e);
}
}
}