You need to sign in to do that
Don't have an account?
ApexDev
How to add one trigger to existing one?
Hi :) I wrote one trigger which prevent User to Completed Work Order, when Service_Type__c field is empty on Work Order Line Item. I have already existing trigger on Work Order object. How to split it in one trigger?
WorkOrderTrigger:
trigger WorkOrderTrigger on WorkOrder (after update, before delete) {
if(Trigger.isBefore) {
if(Trigger.isDelete) {
WorkOrderTriggerService.countOpenWorkOrdersOfDeviceFromWoDelete(Trigger.oldMap);
}
}
if(Trigger.isAfter) {
if(Trigger.isUpdate) {
WorkOrderTriggerService.autoUpdateNextCalibrationDate(Trigger.new, Trigger.oldMap);
WorkOrderTriggerService.countOpenWorkOrdersOfDeviceFromWoUpdate(Trigger.new, Trigger.oldMap);
}
}
}
My Trigger:
trigger ValidateWorkOrderLineItem on WorkOrder (before update) {
Map<String, WorkOrder> mapWoToId = new Map<String,WorkOrder>();
for(WorkOrder w : Trigger.New) {
if(w.Status =='Completed'){
mapWoToId.put(w.Id, w);
}
}
List<WorkOrderLineItem> woLineItemList = [select woli.Status, woli.workOrderId from WorkOrderLineItem woli where woli.WorkOrderId IN :mapWoToId.keySet() and woli.Status != 'Completed' and woli.WOLI__c = 'Parent' and woli.Parent_WOLI__c = TRUE and woli.Service_type__c = ''];
for(WorkOrderLineItem woli : woLineItemList) {
WorkOrder parentWO = mapWoToId.get(woli.workOrderId);
parentWO.addError('Please fill the Service Type on each Parent Work Order Line Item');
}
}
Thank you for answears!
WorkOrderTrigger:
trigger WorkOrderTrigger on WorkOrder (after update, before delete) {
if(Trigger.isBefore) {
if(Trigger.isDelete) {
WorkOrderTriggerService.countOpenWorkOrdersOfDeviceFromWoDelete(Trigger.oldMap);
}
}
if(Trigger.isAfter) {
if(Trigger.isUpdate) {
WorkOrderTriggerService.autoUpdateNextCalibrationDate(Trigger.new, Trigger.oldMap);
WorkOrderTriggerService.countOpenWorkOrdersOfDeviceFromWoUpdate(Trigger.new, Trigger.oldMap);
}
}
}
My Trigger:
trigger ValidateWorkOrderLineItem on WorkOrder (before update) {
Map<String, WorkOrder> mapWoToId = new Map<String,WorkOrder>();
for(WorkOrder w : Trigger.New) {
if(w.Status =='Completed'){
mapWoToId.put(w.Id, w);
}
}
List<WorkOrderLineItem> woLineItemList = [select woli.Status, woli.workOrderId from WorkOrderLineItem woli where woli.WorkOrderId IN :mapWoToId.keySet() and woli.Status != 'Completed' and woli.WOLI__c = 'Parent' and woli.Parent_WOLI__c = TRUE and woli.Service_type__c = ''];
for(WorkOrderLineItem woli : woLineItemList) {
WorkOrder parentWO = mapWoToId.get(woli.workOrderId);
parentWO.addError('Please fill the Service Type on each Parent Work Order Line Item');
}
}
Thank you for answears!
I will suggest you to go with the same handler class and old trigger. Just add one more method in class to handle your logic . like below:
Update the WorkOrderTriggerService Apex Class:
Update the WorkOrderTrigger like below:
Thanks,
Maharajan.C
All Answers
You can modify the existing trigger as below.
Or else you can write the method in handler as well.
If this solution helps, please mark it as best answer.
Thanks,
I will suggest you to go with the same handler class and old trigger. Just add one more method in class to handle your logic . like below:
Update the WorkOrderTriggerService Apex Class:
Update the WorkOrderTrigger like below:
Thanks,
Maharajan.C