i am getting this error, in the last for loop how i can get the market of the ownerId for an opportunity. where market is a custom field in User, we are trying to compare market of the user to the pricebook name which we have created seprately.
Error: Invalid Data. Review all error messages below to correct your
data. Apex trigger prcieBookBasedOnMarket caused an unexpected
exception, contact your administrator: prcieBookBasedOnMarket:
execution of BeforeInsert caused by: System.StringException: Invalid
id: id: External entry point
public class HND_OpportunityHandler extends HND_BaseHandler implements HND_IHandler{
private PVD_OpportunityProvider opportunityProvider;
private HND_PriceBook2Handler priceBookHandler = new HND_PriceBook2Handler();
private HND_UserHandler userHandler = new HND_UserHandler();
public HND_OpportunityHandler()
{
opportunityProvider = (PVD_OpportunityProvider) getProvider();
}
public override PVD_Iprovider loadProvider(){
return (PVD_Iprovider) new PVD_OpportunityProvider();
}
public void setPriceBookBasedOnMarket(List<Opportunity> newTrigger) {
set<string> opportunityOwner = new set<string>();
map<id,string> priceBookNameMap = new map<id,string>();
set<string> opportunityOwnerIdMarket = new set<string>();
// Get the list of all OwnerId from opportunity
List<Opportunity> opportunityOwnerIdList = opportunityProvider.getOpportunityOwnerId(newTrigger);
List<User> userMarketList = userHandler.getMarketList();
for(User u : userMarketList) {
opportunityOwnerIdMarket.add(u.Market__c + ' Price Book');
}
List<PriceBook2> pricebook = priceBookHandler.getPriceBookNameList(opportunityOwnerIdMarket);
for(PriceBook2 prc : pricebook) {
priceBookNameMap.put(prc.id,prc.name);
}
for(Opportunity opty : newTrigger) {
System.debug('hi1inforloop');
string tempname;
tempname = opty.owner.Market__c + ' Price Book';
System.debug('tempname :'+tempname);
string tempname1;
tempname1 = priceBookNameMap.get('id');
System.debug('tempname1 :'+tempname1);
if(tempname==tempname1) {
System.debug('hi3innestedforloop');
opty.Pricebook2Id = priceBookNameMap.get('id');
System.debug('hi4innestedforloop');
}
}
}
}
Best Answer
Issue in your line
opty.Pricebook2Id = priceBookNameMap.get('id');
priceBookNameMap.get('id');
map will return Name(string) not Id..Modify your code and assign Id to
opty.Pricebook2Id
Here
Pricebook2Id
dataType is Id. So you need to assign IdLooks like relationship is
opportunity owner, userid, createdby in pricebook
Create a map and store createdbyId to
PriceBook2
recordAnd below map based on ownerId get Pricebook2Id