You need to sign in to do that
Don't have an account?
sfdeveloper12
Code is hitting governor limit exception
Hello,
trigger UpdateAgreedRate on QuoteLineItem (before insert, before update) {
system.debug('****************InTrigger**********************');
if(trigger.isBefore && (trigger.isInsert || trigger.isUpdate)){
String QuoteID ;
set<id> PIds = new set<id>();
for (QuoteLineItem childObj : Trigger.new) {
if(QuoteID == null) {
QuoteID = childObj.QuoteID;
}
if(childObj.Product2Id != null){
PIds.add(childObj.Product2Id);
}
system.debug('QuoteID 18 -->'+QuoteID );
if(QuoteID != null) {
List<Quote> quotes = [select Id, AccountId, Venue__c, Opportunity.Guest_Name__r.Name from Quote where Id =:QuoteID ];
if(quotes.size() > 0) {
Quote QuoteDetails = quotes[0];
system.debug('QuoteDetails 26 -->'+QuoteDetails );
for (QuoteLineItem item : Trigger.new) {
system.debug('item 29 -->'+item );
item.Guest1__c= quotes[0].Opportunity.Guest_Name__r.Name;
for(Product2 product :[select id, name from Product2 where Id IN : PIds]){
system.debug('product 33 -->'+product );
for(Rates_Commissions__c rate: [select id, Name, Product_Item__c, Client_Account__c, Venue_Hotel__c , Agreed_Rate__c, AgreedRes__c from Rates_Commissions__c where Product_Item__c =: product.id])
{
system.debug('rate 42 -->'+rate );
if(rate.Product_Item__c == product.id && quotes[0].AccountId == rate.Client_Account__c && quotes[0].Venue__c == rate.Venue_Hotel__c)
{
system.debug('ProductId-->'+product.id );
system.debug('RateProductItem-->'+rate.Product_Item__c );
system.debug('QuoteAccId-->'+quotes[0].AccountId );
system.debug('RateAccId-->'+rate.Client_Account__c );
system.debug('QuoteVenueHotel-->'+quotes[0].Venue__c );
system.debug('RateVenueHotel-->'+rate.Venue_Hotel__c );
item.PSL_Rate__C = rate.Agreed_Rate__c ;
item.Commission_Percentage_PSL__c = rate.AgreedRes__c;
system.debug('rate.Agreed_Rate__c -->'+ rate.Agreed_Rate__c );
system.debug(' rate.AgreedRes__c -->'+ rate.AgreedRes__c );
}
}
}
}
}
}
}
}
if(trigger.isBefore && (trigger.isInsert || trigger.isUpdate)){
for(QuoteLineItem o : Trigger.new)
{
if(o.PSL_Rate__C < o.Online_Rate__c)
{
o.Recommended_Sales_Price__c= o.PSL_Rate__C;
}
else if(o.Online_Rate__c < o.PSL_Rate__C){
o.Recommended_Sales_Price__c= o.Online_Rate__c ;
}
else if(o.Online_Rate__c == null || o.Online_Rate__c == 0 ){
o.Recommended_Sales_Price__c= o.PSL_Rate__C;
}
else if(o.PSL_Rate__C == 0 || o.PSL_Rate__C == null)
{
o.Recommended_Sales_Price__c= o.Online_Rate__c ;
}
}
}
}
My code is hitting governor limit exception. Can anybody help me to resolve this issue
Thanks,
Utkarsha
trigger UpdateAgreedRate on QuoteLineItem (before insert, before update) {
system.debug('****************InTrigger**********************');
if(trigger.isBefore && (trigger.isInsert || trigger.isUpdate)){
String QuoteID ;
set<id> PIds = new set<id>();
for (QuoteLineItem childObj : Trigger.new) {
if(QuoteID == null) {
QuoteID = childObj.QuoteID;
}
if(childObj.Product2Id != null){
PIds.add(childObj.Product2Id);
}
system.debug('QuoteID 18 -->'+QuoteID );
if(QuoteID != null) {
List<Quote> quotes = [select Id, AccountId, Venue__c, Opportunity.Guest_Name__r.Name from Quote where Id =:QuoteID ];
if(quotes.size() > 0) {
Quote QuoteDetails = quotes[0];
system.debug('QuoteDetails 26 -->'+QuoteDetails );
for (QuoteLineItem item : Trigger.new) {
system.debug('item 29 -->'+item );
item.Guest1__c= quotes[0].Opportunity.Guest_Name__r.Name;
for(Product2 product :[select id, name from Product2 where Id IN : PIds]){
system.debug('product 33 -->'+product );
for(Rates_Commissions__c rate: [select id, Name, Product_Item__c, Client_Account__c, Venue_Hotel__c , Agreed_Rate__c, AgreedRes__c from Rates_Commissions__c where Product_Item__c =: product.id])
{
system.debug('rate 42 -->'+rate );
if(rate.Product_Item__c == product.id && quotes[0].AccountId == rate.Client_Account__c && quotes[0].Venue__c == rate.Venue_Hotel__c)
{
system.debug('ProductId-->'+product.id );
system.debug('RateProductItem-->'+rate.Product_Item__c );
system.debug('QuoteAccId-->'+quotes[0].AccountId );
system.debug('RateAccId-->'+rate.Client_Account__c );
system.debug('QuoteVenueHotel-->'+quotes[0].Venue__c );
system.debug('RateVenueHotel-->'+rate.Venue_Hotel__c );
item.PSL_Rate__C = rate.Agreed_Rate__c ;
item.Commission_Percentage_PSL__c = rate.AgreedRes__c;
system.debug('rate.Agreed_Rate__c -->'+ rate.Agreed_Rate__c );
system.debug(' rate.AgreedRes__c -->'+ rate.AgreedRes__c );
}
}
}
}
}
}
}
}
if(trigger.isBefore && (trigger.isInsert || trigger.isUpdate)){
for(QuoteLineItem o : Trigger.new)
{
if(o.PSL_Rate__C < o.Online_Rate__c)
{
o.Recommended_Sales_Price__c= o.PSL_Rate__C;
}
else if(o.Online_Rate__c < o.PSL_Rate__C){
o.Recommended_Sales_Price__c= o.Online_Rate__c ;
}
else if(o.Online_Rate__c == null || o.Online_Rate__c == 0 ){
o.Recommended_Sales_Price__c= o.PSL_Rate__C;
}
else if(o.PSL_Rate__C == 0 || o.PSL_Rate__C == null)
{
o.Recommended_Sales_Price__c= o.Online_Rate__c ;
}
}
}
}
My code is hitting governor limit exception. Can anybody help me to resolve this issue
Thanks,
Utkarsha
You should not use SOQL Queries in for loop. Nor you should use DML operations like insert, delete, upsert etc. in for loop.
You will have to cahnge your code accordingly.
Thanks
I changed my code as below. I am able to cover all the list except for(Rates_Commissions__c rate: [select id, Name, Product_Item__c, Client_Account__c, Venue_Hotel__c , Agreed_Rate__c, AgreedRes__c from Rates_Commissions__c where Product_Item__c =: product.id]). Its giving me loop variable must be quotelineitem type. I dont know how to recover this issue
trigger UpdateAgreedRate on QuoteLineItem (before insert, before update) {
system.debug('****************InTrigger**********************');
if(trigger.isBefore && (trigger.isInsert || trigger.isUpdate)){
String QuoteID ;
set<id> PIds = new set<id>();
for (QuoteLineItem childObj : Trigger.new) {
if(QuoteID == null) {
QuoteID = childObj.QuoteID;
system.debug('QuoteID 18 -->'+QuoteID );
}
if(childObj.Product2Id != null){
PIds.add(childObj.Product2Id);
system.debug('childObj.Product2Id 19 -->'+childObj.Product2Id );
}
}
if(QuoteID != null) {
List<Quote> quotes = [select Id, AccountId, Venue__c, Opportunity.Guest_Name__r.Name from Quote where Id =:QuoteID ];
if(quotes.size() > 0) {
Quote QuoteDetails = quotes[0];
system.debug('QuoteDetails 266666 -->'+QuoteDetails );
list<Product2> product1= [select id, name from Product2 where Id IN : PIds];
for (QuoteLineItem item : Trigger.new) {
system.debug('item 29 -->'+item );
item.Guest1__c= quotes[0].Opportunity.Guest_Name__r.Name;
system.debug('item.Guest1__c 33 -->'+item.Guest1__c );
for(Product2 product : product1){
system.debug('product 33 -->'+product );
List<Rates_Commissions__c> rate1 = [select id, Name, Product_Item__c, Client_Account__c, Venue_Hotel__c , Agreed_Rate__c, AgreedRes__c from Rates_Commissions__c where Product_Item__c =: product.id];
// [select id, Name, Product_Item__c, Client_Account__c, Venue_Hotel__c , Agreed_Rate__c, AgreedRes__c from Rates_Commissions__c where Product_Item__c =: product.id]
for(Rates_Commissions__c rate: [select id, Name, Product_Item__c, Client_Account__c, Venue_Hotel__c , Agreed_Rate__c, AgreedRes__c from Rates_Commissions__c where Product_Item__c =: product.id])
{
system.debug('rate 42 -->'+rate );
if(rate.Product_Item__c == product.id && quotes[0].AccountId == rate.Client_Account__c && quotes[0].Venue__c == rate.Venue_Hotel__c)
{
system.debug('ProductId-->'+product.id );
system.debug('RateProductItem-->'+rate.Product_Item__c );
system.debug('QuoteAccId-->'+quotes[0].AccountId );
system.debug('RateAccId-->'+rate.Client_Account__c );
system.debug('QuoteVenueHotel-->'+quotes[0].Venue__c );
system.debug('RateVenueHotel-->'+rate.Venue_Hotel__c );
item.PSL_Rate__C = rate.Agreed_Rate__c ;
item.Commission_Percentage_PSL__c = rate.AgreedRes__c;
system.debug('rate.Agreed_Rate__c -->'+ rate.Agreed_Rate__c );
system.debug(' rate.AgreedRes__c -->'+ rate.AgreedRes__c );
}
}
}
}
}
}
}
if(trigger.isBefore && (trigger.isInsert || trigger.isUpdate)){
for(QuoteLineItem o : Trigger.new)
{
if(o.PSL_Rate__C < o.Online_Rate__c)
{
o.Recommended_Sales_Price__c= o.PSL_Rate__C;
}
else if(o.Online_Rate__c < o.PSL_Rate__C){
o.Recommended_Sales_Price__c= o.Online_Rate__c ;
}
else if(o.Online_Rate__c == null || o.Online_Rate__c == 0 ){
o.Recommended_Sales_Price__c= o.PSL_Rate__C;
}
else if(o.PSL_Rate__C == 0 || o.PSL_Rate__C == null)
{
o.Recommended_Sales_Price__c= o.Online_Rate__c ;
}
}
}
}
Thanks ,
Utkarsha