• elixir iraq
  • NEWBIE
  • 0 Points
  • Member since 2023

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 1
    Replies
Hi I have written two triggers on teacher and student like whenever teacher is inserted student should be inserted or vice versa and same for updation and deletion also. but while saving a record I am getting error as :-
TeacherTrigger: execution of AfterInsert caused by: System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, StudentTrigger: maximum trigger depth exceeded Teacher trigger event AfterInsert Student trigger event AfterInsert Teacher trigger event AfterInsert Student trigger event AfterInsert Teacher trigger event AfterInsert Student trigger event AfterInsert Teacher trigger event AfterInsert Student trigger event
can anyone hep in resolving this can we do like in both the cases afterinsert and after update check with the help of id if trigger is running on teacher then we need to check that if student is not present with that teacher id then only it will create student record.how to do this? can anyone help
code:
trigger StudentTrigger on Student__c (after insert, after update, before delete) {
    if (Trigger.isAfter) {
        if (Trigger.isInsert) {
                List<Teacher__c> teachersToInsert = new List<Teacher__c>();
                
                for (Student__c student : Trigger.new) {
                    Teacher__c teacher = new Teacher__c();
                    teacher.Name = student.Name;
                    teacher.Email__c = student.Email__c;
                    teacher.Mobile__c = student.Mobile__c;
                    teacher.Address__c = student.Address__c;
                    teacher.teacherid__c = student.Id;
                    teachersToInsert.add(teacher);
                }
                
                if (!teachersToInsert.isEmpty()) {
                    insert teachersToInsert;
                }
            }
        
        if (Trigger.isUpdate) {
            List<Teacher__c> teachersToUpdate = new List<Teacher__c>();
            Set<Id> studentIds = new Set<Id>();
            
            for (Student__c student : Trigger.new) {
                studentIds.add(student.Id);
            }
            
            List<Teacher__c> existingTeachers = [SELECT Id, Name, Email__c, Mobile__c, Address__c, teacherid__c FROM Teacher__c WHERE teacherid__c IN :studentIds];
            Map<Id, Teacher__c> teacherMap = new Map<Id, Teacher__c>();
            
            for (Teacher__c teacher : existingTeachers) {
                teacherMap.put(teacher.teacherid__c, teacher);
            }
            for (Student__c student : Trigger.new) {
                if (teacherMap.containsKey(student.Id)) {
                    Teacher__c teacher = teacherMap.get(student.Id);
                    teacher.Name = student.Name;
                    teacher.Email__c = student.Email__c;
                    teacher.Mobile__c = student.Mobile__c;
                    teacher.Address__c = student.Address__c;
                    teachersToUpdate.add(teacher);
                }
            }
            if (!teachersToUpdate.isEmpty()) {
                update teachersToUpdate;
            }
        }
    }
    
    if (Trigger.isBefore) {
        if (Trigger.isDelete) {
            List<String> studentIds = new List<String>();
            for (Student__c student : Trigger.old) {
                studentIds.add(student.Id);
            }
            List<Teacher__c> listOfTeachers = [SELECT Id, teacherid__c FROM Teacher__c WHERE teacherid__c IN :studentIds];
            System.debug('listOfTeachers: ' + listOfTeachers);
            if (!listOfTeachers.isEmpty()) {
                delete listOfTeachers;
            }
        }
    }
}
trigger TeacherTrigger on Teacher__c (after insert, after update, before delete) {
    if (Trigger.isAfter) {
        if (Trigger.isInsert) {
                List<Student__c> studentsToInsert = new List<Student__c>();
                for (Teacher__c teacher : Trigger.new) {
                    Student__c student = new Student__c();
                    student.Name = teacher.Name;
                    student.Email__c = teacher.Email__c;
                    student.Mobile__c = teacher.Mobile__c;
                    student.Address__c = teacher.Address__c;
                    student.id__c = teacher.Id;
                    studentsToInsert.add(student);
                }
                if (!studentsToInsert.isEmpty()) {
                    insert studentsToInsert;
                }
            }
        }
        
        if (Trigger.isUpdate) {
            List<Student__c> studentsToUpdate = new List<Student__c>();
            Set<Id> teacherIds = new Set<Id>();
            for (Teacher__c teacher : Trigger.new) {
                teacherIds.add(teacher.Id);
            }
            List<Student__c> existingStudents = [SELECT Id, Name, Email__c, Mobile__c, Address__c, id__c FROM Student__c WHERE id__c IN :teacherIds];
            Map<Id, Student__c> studentMap = new Map<Id, Student__c>();
            for (Student__c student : existingStudents) {
                studentMap.put(student.id__c, student);
            }
            for (Teacher__c teacher : Trigger.new) {
                    if (studentMap.containsKey(teacher.Id)) {
                        Student__c student = studentMap.get(teacher.Id);
                        student.Name = teacher.Name;
                        student.Email__c = teacher.Email__c;
                        student.Mobile__c = teacher.Mobile__c;
                        student.Address__c = teacher.Address__c;
                        studentsToUpdate.add(student);
                    }
                }
            }
            if (!studentsToUpdate.isEmpty()) {
                update studentsToUpdate;
            }
        }
    }
    
    if (Trigger.isBefore) {
        if (Trigger.isDelete) {
            List<String> teacherIds = new List<String>();
            
            for (Teacher__c teacher : Trigger.old) {
                teacherIds.add(teacher.Id);
            }
            List<Student__c> listOfStudents = [SELECT Id, id__c FROM Student__c WHERE id__c IN :teacherIds];
            System.debug('Number of students found: ' + listOfStudents.size());
            System.debug('listOfStudents' + listOfStudents);
            if (!listOfStudents.isEmpty()) {
                delete listOfStudents;
            }
        }
    }
}
Thanks,