You need to sign in to do that
Don't have an account?
Raúl
Execution of BeforeInsert caused by: System.NullPointerException: Attempt to de-reference a null object Class.Battle
I would like to create a trigger to activate when using the Battle class and its battle percentage method, but it gives me a "activate percentage: execution of BeforeInsert caused by: System.NullPointerException: Attempt to de-reference a null object Class.Battle. Battle percentage: line 5, column 1 Trigger. Activate percentage: line 4, column 1 "What could be the solution? thank you
My class:
And my trigger is:
My class:
public class Batalla { public List<Batalla__c> porcentajebatalla(Map<Id, Batalla__c> batallas) { //List<Batalla__c> ListBattle = [SELECT Id,Oponente2__c, Poder_ejercito1__c, Puntos_poder_ejercito2__c, Porcentaje_batalla__c FROM Batalla__c]; List<Batalla__c> ListBattle = batallas.values(); Double high = 0.0; Double high2 = 0.0; Double low = 0.0; Double low2 = 0.0; Double combatP1 = 0.0; Double combatP2 = 0.0; // Double resultBattle = 0.0; Double result = 0.0; Double result2 = 0.0; Integer QuerySize = ListBattle.size(); System.debug('QuerySize = ' + QuerySize); if(QuerySize > 0 ) { for(Batalla__c battle : ListBattle){ combatP1 = battle.Poder_ejercito1__c; System.debug('combatP1 = ' + combatP1); combatP2 = battle.Puntos_poder_ejercito2__c; System.debug('combatP2 = ' + combatP2); high = combatP1 * 0.4; low = combatP1 * 0.2; high2 = combatP2 * 0.4; low2 = combatP2 * 0.2; System.debug('high = ' + combatP1 * 0.4); System.debug('low = ' + combatP1 * 0.2); System.debug('high2 = ' + combatP2 * 0.4); System.debug('low2 = ' + combatP2 * 0.2); result = (math.random() * (high-low) + low); result2 = (math.random() * (high2-low2) + low2); battle.Porcentaje_batalla__c = result; battle.Porcentaje_2__c = result2; /*System.debug('battle.Porcentaje_batalla__c = ' + battle.Porcentaje_batalla__c); resultBattle = combatP2 - result; System.debug('resultBattle = ' + resultBattle);*/ System.debug('result = ' + result); System.debug('result2 = ' + result2); } } upsert ListBattle; return ListBattle; } }
And my trigger is:
trigger activarporcentaje on Batalla__c (before insert) { Batalla bata = new Batalla(); bata.porcentajebatalla(Trigger.newMap); }
Use below code :
public class Batalla {
public List<Batalla__c> porcentajebatalla(List<Batalla__c> batallas) {
//List<Batalla__c> ListBattle = [SELECT Id,Oponente2__c, Poder_ejercito1__c, Puntos_poder_ejercito2__c, Porcentaje_batalla__c FROM Batalla__c];
List<Batalla__c> ListBattle = batallas;
Double high = 0.0;
Double high2 = 0.0;
Double low = 0.0;
Double low2 = 0.0;
Double combatP1 = 0.0;
Double combatP2 = 0.0;
// Double resultBattle = 0.0;
Double result = 0.0;
Double result2 = 0.0;
Integer QuerySize = ListBattle.size();
System.debug('QuerySize = ' + QuerySize);
if(QuerySize > 0 ) {
for(Batalla__c battle : ListBattle){
combatP1 = battle.Poder_ejercito1__c;
System.debug('combatP1 = ' + combatP1);
combatP2 = battle.Puntos_poder_ejercito2__c;
System.debug('combatP2 = ' + combatP2);
high = combatP1 * 0.4;
low = combatP1 * 0.2;
high2 = combatP2 * 0.4;
low2 = combatP2 * 0.2;
System.debug('high = ' + combatP1 * 0.4);
System.debug('low = ' + combatP1 * 0.2);
System.debug('high2 = ' + combatP2 * 0.4);
System.debug('low2 = ' + combatP2 * 0.2);
result = (math.random() * (high-low) + low);
result2 = (math.random() * (high2-low2) + low2);
battle.Porcentaje_batalla__c = result;
battle.Porcentaje_2__c = result2;
/*System.debug('battle.Porcentaje_batalla__c = ' + battle.Porcentaje_batalla__c);
resultBattle = combatP2 - result;
System.debug('resultBattle = ' + resultBattle);*/
System.debug('result = ' + result);
System.debug('result2 = ' + result2);
}
}
//upsert ListBattle;
return ListBattle;
}
}
All Answers
Apex Class :
public class Batalla {
public List<Batalla__c> porcentajebatalla(List<Batalla__c> batallas) {
//List<Batalla__c> ListBattle = [SELECT Id,Oponente2__c, Poder_ejercito1__c, Puntos_poder_ejercito2__c, Porcentaje_batalla__c FROM Batalla__c];
List<Batalla__c> ListBattle = batallas;
Double high = 0.0;
Double high2 = 0.0;
Double low = 0.0;
Double low2 = 0.0;
Double combatP1 = 0.0;
Double combatP2 = 0.0;
// Double resultBattle = 0.0;
Double result = 0.0;
Double result2 = 0.0;
Integer QuerySize = ListBattle.size();
System.debug('QuerySize = ' + QuerySize);
if(QuerySize > 0 ) {
for(Batalla__c battle : ListBattle){
combatP1 = battle.Poder_ejercito1__c;
System.debug('combatP1 = ' + combatP1);
combatP2 = battle.Puntos_poder_ejercito2__c;
System.debug('combatP2 = ' + combatP2);
high = combatP1 * 0.4;
low = combatP1 * 0.2;
high2 = combatP2 * 0.4;
low2 = combatP2 * 0.2;
System.debug('high = ' + combatP1 * 0.4);
System.debug('low = ' + combatP1 * 0.2);
System.debug('high2 = ' + combatP2 * 0.4);
System.debug('low2 = ' + combatP2 * 0.2);
result = (math.random() * (high-low) + low);
result2 = (math.random() * (high2-low2) + low2);
battle.Porcentaje_batalla__c = result;
battle.Porcentaje_2__c = result2;
/*System.debug('battle.Porcentaje_batalla__c = ' + battle.Porcentaje_batalla__c);
resultBattle = combatP2 - result;
System.debug('resultBattle = ' + resultBattle);*/
System.debug('result = ' + result);
System.debug('result2 = ' + result2);
}
}
upsert ListBattle;
return ListBattle;
}
}
Apex Trigger :
trigger activarporcentaje on Batalla__c (before insert) {
Batalla bata = new Batalla();
bata.porcentajebatalla(Trigger.new);
}
284/5000
Thank you very much but keep giving the same error
"ctivar percentage: execution of BeforeInsert caused by: System.SObjectException: DML statement cannot operate on trigger.new or trigger.old Class.Battle.percentage battle: line 44, column 1 Trigger.activate percentage: line 4, column 1"
Use below code :
public class Batalla {
public List<Batalla__c> porcentajebatalla(List<Batalla__c> batallas) {
//List<Batalla__c> ListBattle = [SELECT Id,Oponente2__c, Poder_ejercito1__c, Puntos_poder_ejercito2__c, Porcentaje_batalla__c FROM Batalla__c];
List<Batalla__c> ListBattle = batallas;
Double high = 0.0;
Double high2 = 0.0;
Double low = 0.0;
Double low2 = 0.0;
Double combatP1 = 0.0;
Double combatP2 = 0.0;
// Double resultBattle = 0.0;
Double result = 0.0;
Double result2 = 0.0;
Integer QuerySize = ListBattle.size();
System.debug('QuerySize = ' + QuerySize);
if(QuerySize > 0 ) {
for(Batalla__c battle : ListBattle){
combatP1 = battle.Poder_ejercito1__c;
System.debug('combatP1 = ' + combatP1);
combatP2 = battle.Puntos_poder_ejercito2__c;
System.debug('combatP2 = ' + combatP2);
high = combatP1 * 0.4;
low = combatP1 * 0.2;
high2 = combatP2 * 0.4;
low2 = combatP2 * 0.2;
System.debug('high = ' + combatP1 * 0.4);
System.debug('low = ' + combatP1 * 0.2);
System.debug('high2 = ' + combatP2 * 0.4);
System.debug('low2 = ' + combatP2 * 0.2);
result = (math.random() * (high-low) + low);
result2 = (math.random() * (high2-low2) + low2);
battle.Porcentaje_batalla__c = result;
battle.Porcentaje_2__c = result2;
/*System.debug('battle.Porcentaje_batalla__c = ' + battle.Porcentaje_batalla__c);
resultBattle = combatP2 - result;
System.debug('resultBattle = ' + resultBattle);*/
System.debug('result = ' + result);
System.debug('result2 = ' + result2);
}
}
//upsert ListBattle;
return ListBattle;
}
}