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
Girbson BijouGirbson Bijou 

Creating multiple child record in on trigger

How can you help me please?
I have two objects: Employee and Leave. Leave is a child of Employee.
I want write a trigger to assign leave type to each employee depending on some specific criteria.
for example:
if the gender of an employee is Female  && his status is fulltime , the trigger should create the following the record on the leave object:
- Maternity Leave
- Annual Leave
- Personal Leave
- unpaid leave

if the gender of an employee is Male  && his status is fulltime , the trigger should create the 3 following the record on the leave object:

- Paternity Leave
- Annual Leave
- Personal Leave
- Unpaid Leave

if the gender of an employee is Male || Female and  his status is part time , the trigger should create the  following the record on the leave object:
- Unpaid Leave

NB: I have already write a confitional formula to assign the Number of day for each type of Leave.

Here the sample of code that I have. I create a separate trigger for each trigger,  but i can not create multiple childs record with specific criteria in one trigger.


trigger CreateLeave3 on Employee__c (after insert ) {
List<Leave__c> Leaves = new List<Leave__c>();


    for(Employee__c l : trigger.new)
    {
     if(l.Status__c =='Emplyee' && l.Gender__c =='Female' ){
       Leave__c Child = new Leave__c ();
       Child.Employee__c = l.id;
       Child.Leave_Type__c = 'Maternity Leaves'; 
       Leaves.add(Child);      
    }
}
    insert Leaves;
    
}
Akhil ReddyAkhil Reddy
Hi, 

It is easy to implement using combination of Utility class and Triggers together. 
trigger Employee_Triggers on Employee__c (after insert, after Update, before insert, before Update ) {
Set<id> menfulltimeLeaves = new Set<Id>();
Set<id> femalefulltimeLeaves = new Set<Id>();
Set<id> parttimeLeaves = new Set<Id>();
if(isInsert){
	if(isAfter){
		for (Employee__c emp : trigger.new){
			if(emp.Status__c =='Emplyee' && emp.Gender__c =='Female' ){
				femalefulltimeLeaves.add(emp);      
			}
			if(emp.Status__c =='Emplyee' && emp.Gender__c =='Male' ){
				femalefulltimeLeaves.add(emp);      
			}
			if((emp.Status__c =='Emplyee' || emp.Gender__c =='Male') &&(emp.Status__c !='Emplyee')){
				parttimeLeaves.add(emp);      
			}
		}
		
	}
	if (menfulltimeLeaves.size()>0){
		TriggerUtility.createmenfulltimeLeaves(menfulltimeLeaves);
	}
	if (femalefulltimeLeaves.size()>0){
		TriggerUtility.createfemalefulltimeLeaves(femalefulltimeLeaves);
	}
	if (parttimeLeaves.size()>0){
		TriggerUtility.createparttimeLeaves(parttimeLeaves);
	}
}



//Utility Class
global without sharing class TriggerUtility{
	List<Leave__c> Leaves = new List<Leave__c>();
	public static void createmenfulltimeLeaves (Set<id> menempinput){
		for(id l: menempinput){
			Leave__c Child = new Leave__c ();
			Child.Employee__c = l.id;
			Child.Leave_Type__c = 'Paternity Leave';
			Leaves.add(Child); 
			
			Leave__c Child1 = new Leave__c ();
			Child1.Employee__c = l.id;
			Child1.Leave_Type__c = ' Annual Leave';
			Leaves1.add(Child1); 
			
			Leave__c Child2 = new Leave__c ();
			Child2.Employee__c = l.id;
			Child2.Leave_Type__c = 'Personal Leave';
			Leaves.add(Child2); 
			
			Leave__c Child3 = new Leave__c ();
			Child3.Employee__c = l.id;
			Child3.Leave_Type__c = Unpaid Leave';
			Leaves.add(Child3); 
		}
		 
	}
	public static void createfemalefulltimeLeaves (Set<id> menempinput){
		for(id l: menempinput){
			Leave__c Child = new Leave__c ();
			Child.Employee__c = l.id;
			Child.Leave_Type__c = 'Maternity Leave';
			Leaves.add(Child); 
			
			Leave__c Child1 = new Leave__c ();
			Child1.Employee__c = l.id;
			Child1.Leave_Type__c = ' Annual Leave';
			Leaves1.add(Child1); 
			
			Leave__c Child2 = new Leave__c ();
			Child2.Employee__c = l.id;
			Child2.Leave_Type__c = 'Personal Leave';
			Leaves.add(Child2); 
			
			Leave__c Child3 = new Leave__c ();
			Child3.Employee__c = l.id;
			Child3.Leave_Type__c = Unpaid Leave';
			Leaves.add(Child3); 
		}
		 
	}
	
	public static void createparttimeLeaves (Set<id> menempinput){
		for(id l: menempinput){
			
			Leave__c Child3 = new Leave__c ();
			Child3.Employee__c = l.id;
			Child3.Leave_Type__c = 'Unpaid Leave';
			Leaves.add(Child3); 
		}
		 
	}
	if (Leaves.size()>0){
		 insert Leaves;
	}
}

try this code but please look out for any typos and recursion events.
rajat Maheshwari 6rajat Maheshwari 6

Hi Girbson,

Please follow the below simple code snippet -: 

 

trigger CreateLeave3 on Employee__c (after insert,after update) {
   

List<Leave__c> lst_Leave = new List<Leave__c>();
 for(Employee__c emp : Trigger.new)
    {
      
      
  if(emp.Status__c=='fulltime' && emp.Gender__c =='Female')
            {
                 Leave__c FemaleLeave = new Leave__c();
                 FemaleLeave.Leave_Type__c = 'Maternity Leave';
                 FemaleLeave.Employee__c = emp.id;
                 lst_Leave.add(FemaleLeave);

                 Leave__c FemaleLeave1 = new Leave__c();
                  FemaleLeave1.Leave_Type__c = 'Annual Leave';
                 FemaleLeave1.Employee__c = emp.id;
                 lst_Leave.add(FemaleLeave1);

                 Leave__c FemaleLeave2 = new Leave__c();
                  FemaleLeave2.Leave_Type__c = 'Personal Leave';
                 FemaleLeave2.Employee__c = emp.id;
                 lst_Leave.add(FemaleLeave2);

                Leave__c FemaleLeave3 = new Leave__c();
                  FemaleLeave3.Leave_Type__c = 'unpaid leave';
                 FemaleLeave3.Employee__c = emp.id;
                 lst_Leave.add(FemaleLeave3);
              }

  if(emp.Status__c=='fulltime' && emp.Gender__c == 'Male')
          {
                 Leave__c MaleLeave = new Leave__c();
                 MaleLeave.Leave_Type__c = 'Paternity Leave';
                 MaleLeave.Employee__c = emp.id;
                 lst_Leave.add(MaleLeave);

                 Leave__c MaleLeave1 = new Leave__c();
                  MaleLeave1.Leave_Type__c = 'Annual Leave';
                 MaleLeave1.Employee__c = emp.id;
                 lst_Leave.add(MaleLeave1);

                 Leave__c MaleLeave2 = new Leave__c();
                  MaleLeave2.Leave_Type__c = 'Personal Leave';
                 MaleLeave2.Employee__c = emp.id;
                 lst_Leave.add(MaleLeave2);

                  Leave__c MaleLeave3 = new Leave__c();
                  MaleLeave3.Leave_Type__c = 'unpaid leave';
                 MaleLeave3.Employee__c = emp.id;
                 lst_Leave.add(MaleLeave3);
            
            }

     if(emp.Status__c=='parttime' && (emp.Gender__c == 'Male' || emp.Gender__c == 'Female'))
         {
                 Leave__c PartTimeLeave = new Leave__c();
                 PartTimeLeave.Leave_Type__c = 'unpaid leave';
                 PartTimeLeave.Employee__c = emp.id;
                 lst_Leave.add(PartTimeLeave);
         }

}

if(lst_Leave!=null && lst_Leave.size()>0)
    insert lst_Leave;

}

 

Please let me know if it works or not :)

 

Thanks
Rajat Maheshwari