• Muna Jamous5
  • NEWBIE
  • 10 Points
  • Member since 2018
  • SalesForce Administrator
  • Insight Health Tech Planning

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 3
    Questions
  • 9
    Replies
Hi, I am new in Apex Batch I wrote an Apex class that works fine for small data, but when I execute it in large data set I receive CPU limit, I read about Apex batch and it could solve my problem, but I have difficult time inc converting my class to apex batchable class. below is my apex class Any help is highly appreciated. 
public class EquipmentBOQProcessController {
    
    @AuraEnabled
    public static void calculateBOQ(String hospitalName){
        
        String OEMHospital;
        if(hospitalName.equalsIgnoreCase('H1')) {
            OEMHospital = 'First One';
        }else if (hospitalName.equalsIgnoreCase('H2')) {
            OEMHospital = 'Second one';
        }   
        id BOQRecordType = [SELECT id FROM RecordType where developerName=:hospitalName and sobjectType='Equipment_BOQ__c'].id;
        List<Equipment_BOQ__c> listToDelete = new List<Equipment_BOQ__c>([SELECT id from Equipment_BOQ__c where RecordType.id =:BOQRecordType]); 
        
        // Step - 1 : Delete all records related to that Hospital
        If (listToDelete.size() > 0) {
           Database.DeleteResult[]  result = deletePreviousRecords(listToDelete);
        }
        
        // Step - 2: Insert New Records         
        // New List
        List<Equipment_in_Room__c> inRoomNew = new List<Equipment_in_Room__c>([ Select Plan_Id__c, Hospital_Room__c , Package_No__c ,  Legacy__c, Status__c
                                                                            from Equipment_in_Room__c where Hospital_name__c=: OEMHospital AND Status__c = 'NEW']);  		
        //If no Equipment in the hospital Rooms                                                                                                                          
        if (inRoomNew.size() > 0) {
            List<AggregateResult> inRoomNewTotals = [Select  Plan_Id__c, Sum(Total_Qty__c)TQ, Sum(Cost_New__c)CN, Sum(Total_Budget_Price__c)TPP, Sum(Total_Cost_Including_Contingency__c)TCIC
                                                      , Sum(Total_Legacy_Move_Total_Contingency_New__c)TLMTC from Equipment_in_Room__c  where Hospital_name__c=: OEMHospital and Status__c = 'NEW'  
                                                      Group By Plan_Id__c];
            
            Set<Id> hrNewids = new Set<id>();
            
            for (integer i=0 ; i < inRoomNew.size() ; i++ ) {
                hrNewids.add(inRoomNew[i].Hospital_Room__c);
            }
			Map<Id,Hospital_Room_No__c> hospitalRoomsDept = new Map<Id,Hospital_Room_No__c>([Select Department__c from Hospital_Room_No__c where id in :hrNewids ]);
        	
            
        	insertEquipmentBOQ(BOQRecordType, inRoomNew , inRoomNewTotals , hospitalRoomsDept);    
        }               
	}  
	
     Private static void insertEquipmentBOQ(id hospitalName, List<Equipment_in_Room__c> inRoom  , List<AggregateResult> inRoomTotals, Map<Id,Hospital_Room_No__c> hospitalRoomsDept ){
        List<Equipment_BOQ__c> AllBOQRec = new List<Equipment_BOQ__c>();
       
         id planId;
         
         for(AggregateResult agr :inRoomTotals){
			Equipment_BOQ__c BOQRec = new Equipment_BOQ__c();
            planId =  (Id)agr.get('Plan_Id__c');
            BOQRec.RecordTypeId = hospitalName;
			BOQRec.Equipment_Detail__c = planId;
            BOQRec.Total_Qty__c = (Double)agr.get('TQ');
            BOQRec.Cost_New__c = (Decimal)agr.get('CN');
            BOQRec.Total_Budget_Price__c = (Decimal)agr.get('TPP');
            BOQRec.Total_Cost_Including_Contingency__c = (Decimal)agr.get('TCIC');
            BOQRec.legacy_Total_Move_Total_Contingency_New__c = (Decimal)agr.get('TLMTC');
            BOQRec.Department__c = '';
             for (Equipment_in_Room__c er :inRoom ) {
                 if (er.Plan_Id__c == planId) {
                     BOQRec.Legacy__c = er.Legacy__c==true ? 'YES' : 'NO';
                     BOQRec.Inv_Stat__c = er.Status__c;
                     BOQRec.Package__c = er.Package_No__c;   
                     //collecting Departments
                     String roomDept= hospitalRoomsDept.get(er.Hospital_Room__c).Department__c;
                     if (BOQRec.Department__c.indexof(roomDept) == -1) {
           				BOQRec.Department__c = roomDept + ' , ' + BOQRec.Department__c ; 
       				 } 
                 }
             }            
            AllBOQRec.add(BOQRec);
        } 
   
         try { 
        	Database.SaveResult[] result = Database.insert(AllBOQRec, true);
            System.debug('All BOQ Records were inserted successfully');              
         } catch(DmlException e) {
            System.debug('BOQ Records were falied to insert'); 
         }
}
    
    private static Database.DeleteResult[] deletePreviousRecords(List<Equipment_BOQ__c> listToDelete ) {
        Database.DeleteResult[] deleteResult;
        try {
        	deleteResult = Database.delete(listToDelete, true);
            System.debug('Deleted ...!');
        } catch (DmlException e) {
            System.debug('Delete all BOQ ' + e.getMessage());
        }
        return deleteResult;
    }
     
}

 
HI,
I am getting 76% coverage for my Trigger, below is my trigger and test class, the uncovered code his underlined, any help is highly appreciated

trigger updateEquipmentDeatilField on Equipment_in_Room__c (before insert, before update) {
    try {
        List<Equipment_Specification__c> EquipmentDetails = new List<Equipment_Specification__c>();
        For (Equipment_in_Room__c r: Trigger.New) {
            if (r.Hospital_Name__c.equalsIgnoreCase('Dartmouth General Hospital')) {
                EquipmentDetails = [Select id, Name, Equipment_in_Room__c from Equipment_Specification__c where id =: r.Plan_Id__c limit 1];
                for (Equipment_Specification__c es : EquipmentDetails ) {
                    if (es.Equipment_in_Room__c == null ) { 
                        es.Equipment_in_Room__c = 'DG,'  ;
                    } else if (es.Equipment_in_Room__c.indexOf('DG') == -1 ) {
                        es.Equipment_in_Room__c = es.Equipment_in_Room__c + 'DG,'  ;

             }
                    update EquipmentDetails;
                }
                
            } else if (r.Hospital_Name__c.equalsIgnoreCase('Halifax Infirmary')) {
                EquipmentDetails = [Select id, Name, Equipment_in_Room__c from Equipment_Specification__c where id =: r.Plan_Id__c limit 1];
                for (Equipment_Specification__c es : EquipmentDetails ) {
                    if (es.Equipment_in_Room__c == null ) { 
                        es.Equipment_in_Room__c = 'HI,'  ;
                    } else if (es.Equipment_in_Room__c.indexOf('HI') == -1 ) {
                        es.Equipment_in_Room__c = es.Equipment_in_Room__c + 'HI,'  ;
                    }
                    update EquipmentDetails;
                }
            }
        }  // For 
    } catch(Exception e){
        System.Trigger.new[0].addError('Error in updateEquipmentDeatilField: '+e.getMessage());
   }

}


Test Class
@isTest
public class updateEquipmentDetailFieldTest {
    static testMethod void toUpdateEquipmentDetailFieldTest() {
        Boolean result = false; 
        // Equipment Plan ID
        try{
            
            Equipment_Specification__c es0 = new Equipment_Specification__c(name='Test-11');
            insert es0 ; 
            es0.Description__c = 'Test desc';
            es0.Price__c = 123.12;
            es0.Equipment_in_Room__c='HI';        
            
            
            Equipment_Specification__c es1 = new Equipment_Specification__c(name='Test-1aa');
            insert es1 ;
            es1.Description__c = 'Test desc1';
            es1.Price__c = 123.12;        
             
            
            Equipment_Specification__c es2 = new Equipment_Specification__c(name ='Test-1b');
            insert es2 ; 
            es2.Description__c = 'Test desc';
            es2.Price__c = 123.12;        
            es2.Equipment_in_Room__c='DG';
                         
            Equipment_Specification__c es3 = new Equipment_Specification__c(name ='Test-1c');
            insert es3 ; 
            es3.Description__c = 'Test desc';
            es3.Price__c = 123.12;        
            es3.Equipment_in_Room__c='HI';            
            
            Equipment_Specification__c es4 = new Equipment_Specification__c(name ='Test-1d' );
            insert es4 ; 
            es4.Description__c = 'Test desc';
            es4.Price__c = 123.12;        
            es4.Equipment_in_Room__c='DG';
                
            Equipment_Specification__c es5 = new Equipment_Specification__c(name ='Test-1e');
            insert es5 ; 
            es5.Description__c = 'Test desc';
            es5.Price__c = 123.12;                 
            
            Hospital_Room_No__c hr1 = new Hospital_Room_No__c();
            hr1.Room_No__c= '123';
            hr1.Department__c= 'ATRIUM';
            hr1.Room_Name__c = 'ALCOVE';
            hr1.Floor_No__c='LEVEL 1';
            hr1.RecordTypeId ='0126A000000HwTfQAK'; //Dartmouth 
            insert hr1;
            
            Hospital_Room_No__c hr2 = new Hospital_Room_No__c();
            hr2.Room_No__c = '1234';
            hr2.Department__c= 'ATRIUM';
            hr2.Room_Name__c = 'ALCOVE';
            hr2.Floor_No__c='LEVEL 1';
            hr2.RecordTypeId ='0126A000000HwTk'; //HI 
            insert hr2;

            // equipment in a rooms            
            Equipment_in_Room__c erd1= new Equipment_in_Room__c();
            insert erd1;
            erd1.Hospital_Room__c = hr1.Id;
            erd1.Plan_Id__c = es0.id;
            erd1.Room_Qty__c=1;
            erd1.Qty__c=2;
          
            Equipment_in_Room__c erd3= new Equipment_in_Room__c();
            insert erd3;
            erd3.Hospital_Room__c = hr1.Id;
            erd3.Plan_Id__c = es1.id;
            erd3.Room_Qty__c=1;
            erd3.Qty__c=2;

            Equipment_in_Room__c erd4= new Equipment_in_Room__c();
            insert erd4;
            erd4.Hospital_Room__c = hr1.Id;
            erd4.Plan_Id__c = es2.id;
            erd4.Room_Qty__c=1;
            erd4.Qty__c=2;
            
            Equipment_in_Room__c erh1= new Equipment_in_Room__c();
            insert erh1;
            erh1.Hospital_Room__c = hr2.Id;
            erh1.Plan_Id__c = es3.id;
            erh1.Room_Qty__c=1;
            erh1.Qty__c=2;

            Equipment_in_Room__c erh2= new Equipment_in_Room__c();
            insert erh2;
            erh2.Hospital_Room__c = hr2.Id;
            erh2.Plan_Id__c = es4.id; 
            erh2.Room_Qty__c=1;
            erh2.Qty__c=2;
            
            Equipment_in_Room__c erh3= new Equipment_in_Room__c();
            insert erh3;  
            erh3.Hospital_Room__c = hr2.Id;
            erh3.Plan_Id__c = es5.id;
            erh3.Room_Qty__c=1;
            erh3.Qty__c=2;
                                    
         }catch(DmlException ex){ result = true;}
              System.assert(result);         
    }                  
}
trigger updateChangeDetails on Change_Request__c (before insert, before update) {
  try {
          
     For (Change_Request__c r: Trigger.New) {     
         if (r.RecordTypeId =='0126A000000IHN9QAO' && r.Change_Details__c == null ) {      
            Equipment_in_Room__c[] roomID  = [Select id , Plan_Id__c, Room__c,Hospital_Room__c from Equipment_in_Room__c WHERE id =: r.Equipment_Room_ID__c limit 1] ;             
            Hospital_Room_No__c[] hospitalRoom  = [Select id , Department__c,     Room_Name__c, Room_No__c from Hospital_Room_No__c WHERE id =: roomID[0].Hospital_Room__c limit 1] ;
            Equipment_Specification__c[] equipmentDetails  = [Select id , name from Equipment_Specification__c WHERE id =: roomID[0].Plan_Id__c limit 1] ; 
             if ( roomID.size() > 0 ) {
                r.Change_Details__c = 
                   'Room # : '+ hospitalRoom[0].Room_No__c + '\\n  ' +
                   'Room Name : ' + hospitalRoom[0].Room_Name__c + '\\n  ' +
                   'Plan ID : ' + equipmentDetails[0].name + '\\n  ' +
                   'Department : ' + hospitalRoom[0].Department__c; 
             } 
         } else if (r.RecordTypeId == '0126A000000IHNEQA4'&& r.Change_Details__c == null ) {  //Furniture in a room Change
              Furniture_in_a_Room__c[] roomID  = [Select id,Plan_ID__c, Hospital_Room__c from Furniture_in_a_Room__c WHERE id =:r.Furniture_Room_ID__c limit 1] ;             
              Hospital_Room_No__c[] hospitalRoom  = [Select id , Department__c,     Room_Name__c, Room_No__c from Hospital_Room_No__c WHERE id =: roomID[0].Hospital_Room__c limit 1] ;
              Furniture_Specification__c[] furnitureDetails  = [Select id , name from Furniture_Specification__c WHERE id =: roomID[0].Plan_Id__c limit 1] ; 
             if ( roomID.size() > 0 ) {
                r.Change_Details__c = 
                   'Room # : '+ hospitalRoom[0].Room_No__c + '\\n  ' +
                   'Room Name : ' + hospitalRoom[0].Room_Name__c + '\\n  ' +
                   'Plan ID : ' + furnitureDetails[0].name + '\\n  ' +
                   'Department : ' + hospitalRoom[0].Department__c; 
             }
        }    
      } //for
  }catch(Exception e){
        System.Trigger.new[0].addError('Error in updateChangeDetails: '+e.getMessage());
  }

}
Hi - I'm getting this error in Salesforce when trying to access documents in Sharepoint, "External Object Error OAuth token expired." I've tried getting in contact with Sharepoint support but they told me to contact Salesforce, and we don't have the premium support for developer support from Salesforce.  

Name items_Sharepoint
External Data Source Sharepoint
Status OAuth token expired

Does anyone have experience with Sharepoint and refreshing a security token? I've tried to go through documentation but I'm having trouble getting the connection working again.  

I can see sharepoint in our external data sources as well as Auth. Providers.  
 
Hi, I am new in Apex Batch I wrote an Apex class that works fine for small data, but when I execute it in large data set I receive CPU limit, I read about Apex batch and it could solve my problem, but I have difficult time inc converting my class to apex batchable class. below is my apex class Any help is highly appreciated. 
public class EquipmentBOQProcessController {
    
    @AuraEnabled
    public static void calculateBOQ(String hospitalName){
        
        String OEMHospital;
        if(hospitalName.equalsIgnoreCase('H1')) {
            OEMHospital = 'First One';
        }else if (hospitalName.equalsIgnoreCase('H2')) {
            OEMHospital = 'Second one';
        }   
        id BOQRecordType = [SELECT id FROM RecordType where developerName=:hospitalName and sobjectType='Equipment_BOQ__c'].id;
        List<Equipment_BOQ__c> listToDelete = new List<Equipment_BOQ__c>([SELECT id from Equipment_BOQ__c where RecordType.id =:BOQRecordType]); 
        
        // Step - 1 : Delete all records related to that Hospital
        If (listToDelete.size() > 0) {
           Database.DeleteResult[]  result = deletePreviousRecords(listToDelete);
        }
        
        // Step - 2: Insert New Records         
        // New List
        List<Equipment_in_Room__c> inRoomNew = new List<Equipment_in_Room__c>([ Select Plan_Id__c, Hospital_Room__c , Package_No__c ,  Legacy__c, Status__c
                                                                            from Equipment_in_Room__c where Hospital_name__c=: OEMHospital AND Status__c = 'NEW']);  		
        //If no Equipment in the hospital Rooms                                                                                                                          
        if (inRoomNew.size() > 0) {
            List<AggregateResult> inRoomNewTotals = [Select  Plan_Id__c, Sum(Total_Qty__c)TQ, Sum(Cost_New__c)CN, Sum(Total_Budget_Price__c)TPP, Sum(Total_Cost_Including_Contingency__c)TCIC
                                                      , Sum(Total_Legacy_Move_Total_Contingency_New__c)TLMTC from Equipment_in_Room__c  where Hospital_name__c=: OEMHospital and Status__c = 'NEW'  
                                                      Group By Plan_Id__c];
            
            Set<Id> hrNewids = new Set<id>();
            
            for (integer i=0 ; i < inRoomNew.size() ; i++ ) {
                hrNewids.add(inRoomNew[i].Hospital_Room__c);
            }
			Map<Id,Hospital_Room_No__c> hospitalRoomsDept = new Map<Id,Hospital_Room_No__c>([Select Department__c from Hospital_Room_No__c where id in :hrNewids ]);
        	
            
        	insertEquipmentBOQ(BOQRecordType, inRoomNew , inRoomNewTotals , hospitalRoomsDept);    
        }               
	}  
	
     Private static void insertEquipmentBOQ(id hospitalName, List<Equipment_in_Room__c> inRoom  , List<AggregateResult> inRoomTotals, Map<Id,Hospital_Room_No__c> hospitalRoomsDept ){
        List<Equipment_BOQ__c> AllBOQRec = new List<Equipment_BOQ__c>();
       
         id planId;
         
         for(AggregateResult agr :inRoomTotals){
			Equipment_BOQ__c BOQRec = new Equipment_BOQ__c();
            planId =  (Id)agr.get('Plan_Id__c');
            BOQRec.RecordTypeId = hospitalName;
			BOQRec.Equipment_Detail__c = planId;
            BOQRec.Total_Qty__c = (Double)agr.get('TQ');
            BOQRec.Cost_New__c = (Decimal)agr.get('CN');
            BOQRec.Total_Budget_Price__c = (Decimal)agr.get('TPP');
            BOQRec.Total_Cost_Including_Contingency__c = (Decimal)agr.get('TCIC');
            BOQRec.legacy_Total_Move_Total_Contingency_New__c = (Decimal)agr.get('TLMTC');
            BOQRec.Department__c = '';
             for (Equipment_in_Room__c er :inRoom ) {
                 if (er.Plan_Id__c == planId) {
                     BOQRec.Legacy__c = er.Legacy__c==true ? 'YES' : 'NO';
                     BOQRec.Inv_Stat__c = er.Status__c;
                     BOQRec.Package__c = er.Package_No__c;   
                     //collecting Departments
                     String roomDept= hospitalRoomsDept.get(er.Hospital_Room__c).Department__c;
                     if (BOQRec.Department__c.indexof(roomDept) == -1) {
           				BOQRec.Department__c = roomDept + ' , ' + BOQRec.Department__c ; 
       				 } 
                 }
             }            
            AllBOQRec.add(BOQRec);
        } 
   
         try { 
        	Database.SaveResult[] result = Database.insert(AllBOQRec, true);
            System.debug('All BOQ Records were inserted successfully');              
         } catch(DmlException e) {
            System.debug('BOQ Records were falied to insert'); 
         }
}
    
    private static Database.DeleteResult[] deletePreviousRecords(List<Equipment_BOQ__c> listToDelete ) {
        Database.DeleteResult[] deleteResult;
        try {
        	deleteResult = Database.delete(listToDelete, true);
            System.debug('Deleted ...!');
        } catch (DmlException e) {
            System.debug('Delete all BOQ ' + e.getMessage());
        }
        return deleteResult;
    }
     
}

 
HI,
I am getting 76% coverage for my Trigger, below is my trigger and test class, the uncovered code his underlined, any help is highly appreciated

trigger updateEquipmentDeatilField on Equipment_in_Room__c (before insert, before update) {
    try {
        List<Equipment_Specification__c> EquipmentDetails = new List<Equipment_Specification__c>();
        For (Equipment_in_Room__c r: Trigger.New) {
            if (r.Hospital_Name__c.equalsIgnoreCase('Dartmouth General Hospital')) {
                EquipmentDetails = [Select id, Name, Equipment_in_Room__c from Equipment_Specification__c where id =: r.Plan_Id__c limit 1];
                for (Equipment_Specification__c es : EquipmentDetails ) {
                    if (es.Equipment_in_Room__c == null ) { 
                        es.Equipment_in_Room__c = 'DG,'  ;
                    } else if (es.Equipment_in_Room__c.indexOf('DG') == -1 ) {
                        es.Equipment_in_Room__c = es.Equipment_in_Room__c + 'DG,'  ;

             }
                    update EquipmentDetails;
                }
                
            } else if (r.Hospital_Name__c.equalsIgnoreCase('Halifax Infirmary')) {
                EquipmentDetails = [Select id, Name, Equipment_in_Room__c from Equipment_Specification__c where id =: r.Plan_Id__c limit 1];
                for (Equipment_Specification__c es : EquipmentDetails ) {
                    if (es.Equipment_in_Room__c == null ) { 
                        es.Equipment_in_Room__c = 'HI,'  ;
                    } else if (es.Equipment_in_Room__c.indexOf('HI') == -1 ) {
                        es.Equipment_in_Room__c = es.Equipment_in_Room__c + 'HI,'  ;
                    }
                    update EquipmentDetails;
                }
            }
        }  // For 
    } catch(Exception e){
        System.Trigger.new[0].addError('Error in updateEquipmentDeatilField: '+e.getMessage());
   }

}


Test Class
@isTest
public class updateEquipmentDetailFieldTest {
    static testMethod void toUpdateEquipmentDetailFieldTest() {
        Boolean result = false; 
        // Equipment Plan ID
        try{
            
            Equipment_Specification__c es0 = new Equipment_Specification__c(name='Test-11');
            insert es0 ; 
            es0.Description__c = 'Test desc';
            es0.Price__c = 123.12;
            es0.Equipment_in_Room__c='HI';        
            
            
            Equipment_Specification__c es1 = new Equipment_Specification__c(name='Test-1aa');
            insert es1 ;
            es1.Description__c = 'Test desc1';
            es1.Price__c = 123.12;        
             
            
            Equipment_Specification__c es2 = new Equipment_Specification__c(name ='Test-1b');
            insert es2 ; 
            es2.Description__c = 'Test desc';
            es2.Price__c = 123.12;        
            es2.Equipment_in_Room__c='DG';
                         
            Equipment_Specification__c es3 = new Equipment_Specification__c(name ='Test-1c');
            insert es3 ; 
            es3.Description__c = 'Test desc';
            es3.Price__c = 123.12;        
            es3.Equipment_in_Room__c='HI';            
            
            Equipment_Specification__c es4 = new Equipment_Specification__c(name ='Test-1d' );
            insert es4 ; 
            es4.Description__c = 'Test desc';
            es4.Price__c = 123.12;        
            es4.Equipment_in_Room__c='DG';
                
            Equipment_Specification__c es5 = new Equipment_Specification__c(name ='Test-1e');
            insert es5 ; 
            es5.Description__c = 'Test desc';
            es5.Price__c = 123.12;                 
            
            Hospital_Room_No__c hr1 = new Hospital_Room_No__c();
            hr1.Room_No__c= '123';
            hr1.Department__c= 'ATRIUM';
            hr1.Room_Name__c = 'ALCOVE';
            hr1.Floor_No__c='LEVEL 1';
            hr1.RecordTypeId ='0126A000000HwTfQAK'; //Dartmouth 
            insert hr1;
            
            Hospital_Room_No__c hr2 = new Hospital_Room_No__c();
            hr2.Room_No__c = '1234';
            hr2.Department__c= 'ATRIUM';
            hr2.Room_Name__c = 'ALCOVE';
            hr2.Floor_No__c='LEVEL 1';
            hr2.RecordTypeId ='0126A000000HwTk'; //HI 
            insert hr2;

            // equipment in a rooms            
            Equipment_in_Room__c erd1= new Equipment_in_Room__c();
            insert erd1;
            erd1.Hospital_Room__c = hr1.Id;
            erd1.Plan_Id__c = es0.id;
            erd1.Room_Qty__c=1;
            erd1.Qty__c=2;
          
            Equipment_in_Room__c erd3= new Equipment_in_Room__c();
            insert erd3;
            erd3.Hospital_Room__c = hr1.Id;
            erd3.Plan_Id__c = es1.id;
            erd3.Room_Qty__c=1;
            erd3.Qty__c=2;

            Equipment_in_Room__c erd4= new Equipment_in_Room__c();
            insert erd4;
            erd4.Hospital_Room__c = hr1.Id;
            erd4.Plan_Id__c = es2.id;
            erd4.Room_Qty__c=1;
            erd4.Qty__c=2;
            
            Equipment_in_Room__c erh1= new Equipment_in_Room__c();
            insert erh1;
            erh1.Hospital_Room__c = hr2.Id;
            erh1.Plan_Id__c = es3.id;
            erh1.Room_Qty__c=1;
            erh1.Qty__c=2;

            Equipment_in_Room__c erh2= new Equipment_in_Room__c();
            insert erh2;
            erh2.Hospital_Room__c = hr2.Id;
            erh2.Plan_Id__c = es4.id; 
            erh2.Room_Qty__c=1;
            erh2.Qty__c=2;
            
            Equipment_in_Room__c erh3= new Equipment_in_Room__c();
            insert erh3;  
            erh3.Hospital_Room__c = hr2.Id;
            erh3.Plan_Id__c = es5.id;
            erh3.Room_Qty__c=1;
            erh3.Qty__c=2;
                                    
         }catch(DmlException ex){ result = true;}
              System.assert(result);         
    }                  
}
trigger updateChangeDetails on Change_Request__c (before insert, before update) {
  try {
          
     For (Change_Request__c r: Trigger.New) {     
         if (r.RecordTypeId =='0126A000000IHN9QAO' && r.Change_Details__c == null ) {      
            Equipment_in_Room__c[] roomID  = [Select id , Plan_Id__c, Room__c,Hospital_Room__c from Equipment_in_Room__c WHERE id =: r.Equipment_Room_ID__c limit 1] ;             
            Hospital_Room_No__c[] hospitalRoom  = [Select id , Department__c,     Room_Name__c, Room_No__c from Hospital_Room_No__c WHERE id =: roomID[0].Hospital_Room__c limit 1] ;
            Equipment_Specification__c[] equipmentDetails  = [Select id , name from Equipment_Specification__c WHERE id =: roomID[0].Plan_Id__c limit 1] ; 
             if ( roomID.size() > 0 ) {
                r.Change_Details__c = 
                   'Room # : '+ hospitalRoom[0].Room_No__c + '\\n  ' +
                   'Room Name : ' + hospitalRoom[0].Room_Name__c + '\\n  ' +
                   'Plan ID : ' + equipmentDetails[0].name + '\\n  ' +
                   'Department : ' + hospitalRoom[0].Department__c; 
             } 
         } else if (r.RecordTypeId == '0126A000000IHNEQA4'&& r.Change_Details__c == null ) {  //Furniture in a room Change
              Furniture_in_a_Room__c[] roomID  = [Select id,Plan_ID__c, Hospital_Room__c from Furniture_in_a_Room__c WHERE id =:r.Furniture_Room_ID__c limit 1] ;             
              Hospital_Room_No__c[] hospitalRoom  = [Select id , Department__c,     Room_Name__c, Room_No__c from Hospital_Room_No__c WHERE id =: roomID[0].Hospital_Room__c limit 1] ;
              Furniture_Specification__c[] furnitureDetails  = [Select id , name from Furniture_Specification__c WHERE id =: roomID[0].Plan_Id__c limit 1] ; 
             if ( roomID.size() > 0 ) {
                r.Change_Details__c = 
                   'Room # : '+ hospitalRoom[0].Room_No__c + '\\n  ' +
                   'Room Name : ' + hospitalRoom[0].Room_Name__c + '\\n  ' +
                   'Plan ID : ' + furnitureDetails[0].name + '\\n  ' +
                   'Department : ' + hospitalRoom[0].Department__c; 
             }
        }    
      } //for
  }catch(Exception e){
        System.Trigger.new[0].addError('Error in updateChangeDetails: '+e.getMessage());
  }

}
I have a master-detail relationship where the master record is information I want a user to see but not edit and the child is a record I want them to create. I realise that security is inherited in a master-detail however can you add additional edit rights to the child so that a user can create child records without having edit access to the parent?