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
Varun AnnadataVarun Annadata 

Help with writing a trigger

My requirement for writing a trigger is there are two picklist fields and a textarea in case.So when a the two picklist fields have particular values i have to populate the description field  with a premade text.so i am using custom metadata for this as the description can be changed however i want
the trigger i have written is:
trigger UpdateDescription on Case (before insert) {
    String objOrigine;
    String objOriginalDetail;
        for(Case obj:trigger.new){
        //Set<ID> setAccId = new Set<ID>();
        if (obj.FrCCC_Origine_Defect_Location__c!= null && obj.FrCCC_Original_detail__c!=null)
        {
        objOrigine=obj.FrCCC_Origine_Defect_Location__c;
        objOriginalDetail=obj.FrCCC_Original_detail__c;
        }
List<FrCCC_Description_Text__mdt> CM=[select FrCCC_Description_Text_1__c from FrCCC_Description_Text__mdt where FrCCC_Detail_Origine__c='objOrigine' and FrCCC_OrigineDefectLocation__c ='objOriginalDetail'];
List<FrCCC_Description_Text__mdt> CM1=[select Description_Text_2__c from FrCCC_Description_Text__mdt where FrCCC_Detail_Origine__c='objOrigine' and FrCCC_OrigineDefectLocation__c ='objOriginalDetail'];
For(case s: CM)
{
s.Description=CM.get(0);
}

}

}
Is it correct approach.Please suggest anyother approach.i am having trouble in assigning a list to string.
Prosenjit Sarkar 7Prosenjit Sarkar 7
Hi Varun, 

I would like to highlight some errors in your code, 
Please don't write SOQL queries inside a loop. this is not a best practise.
If you want to compare some values in WHERE clause write FrCCC_OrigineDefectLocation__c =:objOriginalDetail in stead of FrCCC_OrigineDefectLocation__c ='objOriginalDetail'
I have written a code snippet for you by following bes practise. Please let me know whether you have found any issues to compile or run,
 
trigger UpdateDescription on Case (before insert) {
    String objOrigine;
    String objOriginalDetail;
	Set<String> objOrigineSet = new Set<String>();
	Set<String> objOriginalDetailSet = new Set<String>();
	
	for(Case obj : trigger.new) {
		if (obj.FrCCC_Origine_Defect_Location__c!= null && obj.FrCCC_Original_detail__c!=null) {
			objOrigineSet.add(obj.FrCCC_Origine_Defect_Location__c);
			objOriginalDetailSet.add(obj.FrCCC_Original_detail__c);
		}
	}
	
	List<FrCCC_Description_Text__mdt> cmList = [SELECT FrCCC_Description_Text_1__c,
												FrCCC_Detail_Origine__c,
												FrCCC_OrigineDefectLocation__c
												FROM FrCCC_Description_Text__mdt 
												WHERE FrCCC_Detail_Origine__c IN :objOrigineSet 
												AND FrCCC_OrigineDefectLocation__c = :objOriginalDetailSet];
											
	Map<String, FrCCC_Description_Text__mdt> cmMap = new Map<String, FrCCC_Description_Text__mdt>();
												
	for(FrCCC_Description_Text__mdt desc : cmList) {
		String mapKey = 'Key_' + desc.FrCCC_Detail_Origine__c + desc.FrCCC_OrigineDefectLocation__c;
		if(mapKey <> NULL) {
			cmMap.put(desc.FrCCC_Detail_Origine__c, desc);
		}
	}
	for(Case obj : trigger.new){
		String mapKey =  'Key_' + obj.FrCCC_Origine_Defect_Location__c + obj.FrCCC_Original_detail__c;
		if(cmMap.get(mapKey) <> NULL) {
			obj.Description = cmMap.get(mapKey).FrCCC_Description_Text_1__c;
		}
	}
}

Thanks,
Prosenjit