You need to sign in to do that
Don't have an account?

trigger is not working, it is giving 'dereference null point exception',
My first system.debug is showing null value and i am not able to understand, what is wrong in it. my trigger is not working. kindly let me know. thanks :)
Trigger :
trigger SumQuote on QuoteLineItem (before delete) {
if (trigger.isbefore && trigger.isdelete){
SumQuoteHandler.sumQuotefeld(trigger.new);
}
}
Apex Class :
public class SumQuoteHandler {
Public static set<Id> ids;
Public static List<Quote> QI = New List<Quote>();
Public static List<QuoteLineItem> QLI = New List<QuoteLineItem>();
Public Static void sumQuotefeld(List<QuoteLineitem>QLISUM){
set<Id> ids = new set<Id>();
for(QuoteLineItem QLII : QLISUM){
Ids.add(QLII.QuoteId);
}
system.debug(ids);
List<Quote> QI = [SELECT Id, Rabatt_der_einmaligen_Geb_hren__c, einmalige_Geb_hren__c, monatlicher_LP_Lizenzen__c FROM Quote where Id IN:ids];
system.debug(QI);
List<QuoteLineItem> QL = [SELECT id, QuoteId FROM QuoteLineItem WHERE Id IN: Ids ];
system.debug(QL);
for (Quote Q : QI){
for(QuoteLineItem QQ : QL){
if(Q.id==QQ.QuoteId && QQ.QuoteId!=null && QQ.Produktkategorie__c=='Software Subscription'){
Q.Rabatt_der_einmaligen_Geb_hren__c = Q.Rabatt_der_einmaligen_Geb_hren__c-QQ.Euro_Rabatt_del__c;
Q.einmalige_Geb_hren__c = Q.einmalige_Geb_hren__c-QQ.GesamtpreisNEU__c;
}
else if(QQ.QuoteId==Q.id && QQ.QuoteId!=null && QQ.Produktkategorie__c=='Software'){
Q.monatlicher_LP_Lizenzen__c = Q.monatlicher_LP_Lizenzen__c-QQ.ListPrice;
}
}
}
update QI;
system.debug(QI);
}
}
I shall be grateful to you for your valuable feedback. Thanks :)
Trigger :
trigger SumQuote on QuoteLineItem (before delete) {
if (trigger.isbefore && trigger.isdelete){
SumQuoteHandler.sumQuotefeld(trigger.new);
}
}
Apex Class :
public class SumQuoteHandler {
Public static set<Id> ids;
Public static List<Quote> QI = New List<Quote>();
Public static List<QuoteLineItem> QLI = New List<QuoteLineItem>();
Public Static void sumQuotefeld(List<QuoteLineitem>QLISUM){
set<Id> ids = new set<Id>();
for(QuoteLineItem QLII : QLISUM){
Ids.add(QLII.QuoteId);
}
system.debug(ids);
List<Quote> QI = [SELECT Id, Rabatt_der_einmaligen_Geb_hren__c, einmalige_Geb_hren__c, monatlicher_LP_Lizenzen__c FROM Quote where Id IN:ids];
system.debug(QI);
List<QuoteLineItem> QL = [SELECT id, QuoteId FROM QuoteLineItem WHERE Id IN: Ids ];
system.debug(QL);
for (Quote Q : QI){
for(QuoteLineItem QQ : QL){
if(Q.id==QQ.QuoteId && QQ.QuoteId!=null && QQ.Produktkategorie__c=='Software Subscription'){
Q.Rabatt_der_einmaligen_Geb_hren__c = Q.Rabatt_der_einmaligen_Geb_hren__c-QQ.Euro_Rabatt_del__c;
Q.einmalige_Geb_hren__c = Q.einmalige_Geb_hren__c-QQ.GesamtpreisNEU__c;
}
else if(QQ.QuoteId==Q.id && QQ.QuoteId!=null && QQ.Produktkategorie__c=='Software'){
Q.monatlicher_LP_Lizenzen__c = Q.monatlicher_LP_Lizenzen__c-QQ.ListPrice;
}
}
}
update QI;
system.debug(QI);
}
}
I shall be grateful to you for your valuable feedback. Thanks :)
When you query quotelineItem, you use " Id IN :ids ". This will return null.
List<QuoteLineItem> QL = [SELECT id, QuoteId FROM QuoteLineItem WHERE Id IN: Ids ];
system.debug(QL);
I think you need to change to
List<QuoteLineItem> QL = [SELECT id, QuoteId FROM QuoteLineItem WHERE QuoteId IN: Ids ];
system.debug(ids) is also zero.
You may need to remove ids defination in the class.
public class SumQuoteHandler {
Public static set<Id> ids;Public Static void sumQuotefeld(List<QuoteLineitem>QLISUM){
set<Id> ids = new set<Id>(); //second ids defined.
Public static List<Quote> QI = New List<Quote>();
Public static List<QuoteLineItem> QLI = New List<QuoteLineItem>();
Public static void sumQuotefeld(List<QuoteLineItem>QLI){
List<QuoteLineitem>QLISUM = [select id, QuoteId from QuoteLineItem ];
set<Id> ids = new set<Id>();
for(QuoteLineItem QLII : QLISUM){
ids.add(QLII.QuoteId);
}
system.debug(ids);
List<Quote> QI = [SELECT Id, Rabatt_der_einmaligen_Geb_hren__c, einmalige_Geb_hren__c, monatlicher_LP_Lizenzen__c FROM Quote]; // where Id IN:ids
system.debug(QI);
List<QuoteLineItem> QL = [SELECT id, QuoteId,Produktkategorie__c, Euro_Rabatt_del__c FROM QuoteLineItem WHERE QuoteId IN: Ids ];
system.debug(QL);// line 17
for (Quote Q : QI){
for(QuoteLineItem QQ : QL){
double amount = Q.Rabatt_der_einmaligen_Geb_hren__c;
double amount1 = Q.einmalige_Geb_hren__c;
double amount2 = Q.monatlicher_LP_Lizenzen__c;
if(Q.id==QQ.QuoteId && QQ.QuoteId!=null && QQ.Produktkategorie__c=='Software Subscription'){
amount += QQ.Euro_Rabatt_del__c;
amount1 += QQ.GesamtpreisNEU__c;
}
else if(QQ.QuoteId==Q.id && QQ.QuoteId!=null && QQ.Produktkategorie__c=='Software'){
amount2 += QQ.ListPrice;
}
Q.Rabatt_der_einmaligen_Geb_hren__c = amount;
Q.einmalige_Geb_hren__c = amount1;
Q.monatlicher_LP_Lizenzen__c = amount2;
}
}
update QI;
system.debug(QI);
it is working good until 17 and retrieving records accordingly, then after it shows that (attempt to dereference a null object)... i am running out of mind.
Public static List<Quote> QI = New List<Quote>();and local variable:
List<Quote> QI = [SELECT Id, Rabatt_der_einmaligen_Geb_hren__c, einmalige_Geb_hren__c, monatlicher_LP_Lizenzen__c FROM Quote]; // where Id IN:ids
You need to Remove unneccessary static properties.