function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
GBGB 

Apex Trigger error message when auto creating Task


Hi

I'm new to Apex so I'm looking for some help please.  I have created a trigger to create tasks on the creation of a custom object (Project__c) however I get an error on submitting the entry

Error: Invalid Data. 
Review all error messages below to correct your data.
Apex trigger Create_New_Task caused an unexpected exception, contact your administrator: Create_New_Task: execution of AfterInsert caused by: System.NullPointerException: Attempt to de-reference a null object: Trigger.Create_New_Task: line 20, column 1

trigger Create_New_Task on Project__c (after insert, after update)
{

public List<Project__c> lstProject=new List<project__c>();
lstProject=[SELECT id,Number_of_Tasks__c FROM project__C WHERE id IN:trigger.New];
public List<Decimal>lstNumber=new List<Decimal>();
public  List<Task> TaskList = new List<Task>();  
for(Project__c each:lstProject)
{
    integer.valueOf(lstNumber.add(each.Number_of_Tasks__c));
}

for(Decimal eachNumber:lstNumber){
    for(Project__c a : trigger.new)
    {
        Date DueDate = a.Start_Date__c;
        Date nextDueDate = DueDate;
        for(Integer i = 0; i <eachNumber; i++)
        {  
            Integer taskDur = integer.valueOf(a.Duration__c*(i+1)); 
            nextDueDate = DueDate.addDays(taskDur); 
            Task b = new Task ( 
                Subject= a.Name + ' - Task ' + (i+1),
                ActivityDate = nextDueDate
            );

            TaskList.add(b);
        }
    } 
}
    insert TaskList;
}

Could ayone help is telling where I have gone wrong?

Thanks in advance
 
Keyur  ModiKeyur Modi
Hi,
please update your code as per the below  code
trigger Create_New_Task on Project__c (after insert, after update)
{

public List<Project__c> lstProject=new List<project__c>();
lstProject=[SELECT id,Number_of_Tasks__c FROM project__C WHERE id IN:trigger.New];
public List<Decimal>lstNumber=new List<Decimal>();
public  List<Task> TaskList = new List<Task>();  
for(Project__c each:lstProject)
{
    integer.valueOf(lstNumber.add(each.Number_of_Tasks__c));
}

for(Decimal eachNumber:lstNumber){
    for(Project__c a : trigger.new)
    {
        Date DueDate = a.Start_Date__c;
        Date nextDueDate = DueDate;
        for(Integer i = 0; i <eachNumber; i++)
        {  
       
        IF(a.Duration__C !=null){
            Integer taskDur = integer.valueOf(a.Duration__c*(i+1)); 
          }
         else{
            Integer taskDur = i+1;
}
            nextDueDate = DueDate.addDays(taskDur); 
            Task b = new Task ( 
                Subject= a.Name + ' - Task ' + (i+1),
                ActivityDate = nextDueDate
            );

            TaskList.add(b);
        }
    } 
}
    insert TaskList;
}

please let me know if this will help,

Thanks,
Keyur Modi
 
Himanshu ParasharHimanshu Parashar
Hi,

It is because duration__c value is coming as null and you are passing that to integer.valueOf method

 following code should work for you
 
trigger Create_New_Task on Project__c (after insert, after update)
{

public List<Project__c> lstProject=new List<project__c>();
lstProject=[SELECT id,Number_of_Tasks__c FROM project__C WHERE id IN:trigger.New];
public List<Decimal>lstNumber=new List<Decimal>();
public  List<Task> TaskList = new List<Task>();  
for(Project__c each:lstProject)
{
    integer.valueOf(lstNumber.add(each.Number_of_Tasks__c));
}

for(Decimal eachNumber:lstNumber){
    for(Project__c a : trigger.new)
    {
        Date DueDate = a.Start_Date__c;
        Date nextDueDate = DueDate;
        for(Integer i = 0; i <eachNumber; i++)
        {  
            if(a.Duration__c!=null)
            ​{

            Integer taskDur = integer.valueOf(a.Duration__c*(i+1)); 
            nextDueDate = DueDate.addDays(taskDur); 
            Task b = new Task ( 
                Subject= a.Name + ' - Task ' + (i+1),
                ActivityDate = nextDueDate
            );

            TaskList.add(b);
            }
        }
    } 
}
    insert TaskList;
}

Thanks,
Himanshu
GBGB
@Himanshu - Thanks. I get a error when compling and I don't see what I am missing
Error: Compile Error: line 19:12 no viable alternative at character '​' at line 19 column 12
Himanshu ParasharHimanshu Parashar
@GB - everything looks  fine but the problem can be while you copying from here it might contain any special char so try to type the 

 if(a.Duration__c!=null) and put following code inside it

 Integer taskDur = integer.valueOf(a.Duration__c*(i+1)); 
            nextDueDate = DueDate.addDays(taskDur); 
            Task b = new Task ( 
                Subject= a.Name + ' - Task ' + (i+1),
                ActivityDate = nextDueDate
            );

            TaskList.add(b);


Thanks,
Himanshu

 
GBGB
I thought of this too so have done that but now getting:

Compile Error: Arithmetic expressions must use numeric arguments at line 20 column 43
trigger Create_New_Task on Project__c (after insert, after update)
{
public List<Project__c> lstProject=new List<project__c>();
lstProject=[SELECT id,Number_of_Tasks__c FROM project__C WHERE id IN:trigger.New];
public List<Decimal>lstNumber=new List<Decimal>();
public  List<Task> TaskList = new List<Task>();  
for(Project__c each:lstProject)
{
    integer.valueOf(lstNumber.add(each.Number_of_Tasks__c));
}
for(Decimal eachNumber:lstNumber){
    for(Project__c a : trigger.new)
    {
        Date DueDate = a.Start_Date__c;
        Date nextDueDate = DueDate;
        for(Integer i = 0; i <eachNumber; i++)
        {
        if(a.Duration__c!=null)
        {
        Integer taskDur = integer.valueOf(a.Duration__c*(i+1));
            nextDueDate = DueDate.addDays(taskDur);
            Task b = new Task (
                Subject=a.Name + ' - Task ' + (i+1),
                ActivityDate = nextDueDate
            );
            TaksList.add(b);
            }
        }
    } 
}
    insert TaskList;
}