You need to sign in to do that
Don't have an account?
Viswa
apex specialist challenge 1
Hi,
Can Any one suggest me the reason for error. Here is my below code.
Apex Class: public with sharing class MaintenanceRequestHelper { public static void updateWorkOrders(List<Case> caseList) { List<case> newCases = new List<Case>(); Map<String,Integer> result=getDueDate(caseList); for(Case c : caseList){ if(c.status=='closed') if(c.type=='Repair' || c.type=='Routine Maintenance'){ Case newCase = new Case(); newCase.Status='New'; newCase.Origin='web'; newCase.Type='Routine Maintenance'; newCase.Subject='Routine Maintenance of Vehicle'; newCase.Vehicle__c=c.Vehicle__c; newCase.ProductId=c.ProductId; newCase.Date_Reported__c=Date.today(); if(result.get(c.Id)!=null) newCase.Date_Due__c=Date.today()+result.get(c.Id); else newCase.Date_Due__c=Date.today(); newCases.add(newCase); } } insert newCases; } public static Map<String,Integer> getDueDate(List<case> CaseIDs){ Map<String,Integer> result = new Map<String,Integer>(); Map<Id, case> caseKeys = new Map<Id, case> (CaseIDs); List<AggregateResult> wpc=[select Maintenance_Request__r.ID cID,min(Equipment__r.Maintenance_Cycle__c)cycle from Equipment_Maintenance_Item__c where Maintenance_Request__r.ID in :caseKeys.keySet() group by Maintenance_Request__r.ID ]; for(AggregateResult res :wpc){ Integer addDays=0; if(res.get('cycle')!=null) addDays+=Integer.valueOf(res.get('cycle')); result.put((String)res.get('cID'),addDays); } return result; } } Apex Trigger; trigger MaintenanceRequest on Case (after update) { // ToDo: Call MaintenanceRequestHelper.updateWorkOrders MaintenanceRequestHelper.updateWorkOrders(Trigger.New); }
Trggier:
trigger MaintenanceRequest on Case (before update, after update) { // ToDo: Call MaintenanceRequestHelper.updateWorkOrders if(Trigger.isAfter) MaintenanceRequestHelper.updateWorkOrders(Trigger.New); }
Apex:
All Answers
Trggier:
trigger MaintenanceRequest on Case (before update, after update) { // ToDo: Call MaintenanceRequestHelper.updateWorkOrders if(Trigger.isAfter) MaintenanceRequestHelper.updateWorkOrders(Trigger.New); }
Apex:
Trigger Handler:
public with sharing class MaintenanceRequestHelper {
public static void updateWorkOrders(List<Case> existingMainReq) {
// TODO: Complete the method to update workorders
Integer count = 0;
Map<Id, Integer> toGetDueDateMap = new Map<Id, Integer>();
Map<Id,Case> newCasesToIdsMap = new Map<Id,Case>();
List<Case> createNewMainReq = new List<Case>();
List<Case> caseIdsList = new List<Case>();
Map<Equipment_Maintenance_Item__c,Id> EquipMainItemsToProdIds = new Map<Equipment_Maintenance_Item__c,Id>();
if(!existingMainReq.isEmpty()){
for(Case cc : existingMainReq){
if((cc.Type == 'Repair' || cc.Type == 'Routine Maintenance') && cc.Status == 'Closed'){
caseIdsList.add(cc);
}
}
}
List<Equipment_Maintenance_Item__c> equipMainList = [Select id,Equipment__c,Maintenance_Request__c from Equipment_Maintenance_Item__c where Maintenance_Request__c IN : caseIdsList];
if(!equipMainList.isEmpty()){
for(Equipment_Maintenance_Item__c equipMainn : equipMainList){
EquipMainItemsToProdIds.put(equipMainn,equipMainn.Equipment__c);
system.debug(EquipMainItemsToProdIds.size());
if(EquipMainItemsToProdIds.size() > 1){
count = EquipMainItemsToProdIds.size();
}
}
}
List<Equipment_Maintenance_Item__c> EMIList = [Select Equipment__r.Maintenance_Cycle__c,Equipment__c from Equipment_Maintenance_Item__c where Equipment__r.Id IN :EquipMainItemsToProdIds.values() AND Maintenance_Request__c IN:caseIdsList order By Equipment__r.Maintenance_Cycle__c ASC limit 1];
for(Equipment_Maintenance_Item__c equip : EMIList){
toGetDueDateMap.put(equip.Id,Integer.valueOf(equip.Equipment__r.Maintenance_Cycle__c));
for(Case c : caseIdsList){
Case mainRe = new Case();
mainRe.Vehicle__c = c.Vehicle__c;
mainRe.status = 'New';
mainRe.Type = 'Routine Maintenance';
mainRe.Subject = 'New Main Request For Vehicle for Apex Specialist';
mainRe.Date_Reported__c = date.today();
if(count > 1){
mainRe.Date_Due__c = Date.today().addDays(toGetDueDateMap.get(equip.Id));
}
else{
mainRe.Date_Due__c = Date.today();
}
createNewMainReq.add(mainRe);
newCasesToIdsMap.put(c.Id,mainRe);
}
insert createNewMainReq;
if(caseIdsList.size()>0 && newCasesToIdsMap.size()>0){
cloneEquipItems(caseIdsList,newCasesToIdsMap);
}
}
}
public static void cloneEquipItems(List<case> closedCaseRecords, Map<Id,case> newCreatedCasesMapp){
List<Equipment_Maintenance_Item__c> newEquipItems = new List<Equipment_Maintenance_Item__c>();
try{
if(!closedCaseRecords.isEmpty() && newCreatedCasesMapp.size()>0){
List<Equipment_Maintenance_Item__c> oldEquipItems = [SELECT Equipment__c, Maintenance_Request__c, Quantity__c,Maintenance_Request__r.Id
FROM Equipment_Maintenance_Item__c
WHERE Maintenance_Request__c IN :closedCaseRecords];
for(Equipment_Maintenance_Item__c equipItem : oldEquipItems) {
Equipment_Maintenance_Item__c newItem = equipItem.clone(false, true, false, false);
newItem.Maintenance_Request__c = newCreatedCasesMapp.get(equipItem.Maintenance_Request__c).id;
newEquipItems.add(newItem);
}
insert newEquipItems;
}
}
catch(Exception e){
System.debug('Exception is'+ e);
}
}
}
Apex Trigger:
trigger MaintenanceRequest on Case (before update, after update) {
// ToDo: Call MaintenanceRequestHelper.updateWorkOrders
if(Trigger.isAfter && Trigger.isUpdate){
MaintenanceRequestHelper.updateWorkOrders(Trigger.new);
}
}
Even I have the same doubt. Don't know how are people changing the API name of the lookup field on Contact. In my installed package I am not getting option to change that API name