Newer Version Available
Apex Trigger: Prevent Closure of Work Orders with Open Line Items
The following trigger prevents users from closing a work order unless all its line items
have been closed. It’s a good way to ensure that all scheduled tasks are completed. The
accompanying unit test scans your code for issues.
To define a work order trigger in your org:
- From Setup, enter Work Orders in the Quick Find box, then select Triggers under Work Orders.
- Click New.
- Copy the trigger text and paste it into the text field.
- Click Save.
1trigger ValidateWorkOrderLineItem on WorkOrder (before update) {
2 for(WorkOrder w : Trigger.New) {
3 if(w.Status =='Closed'){
4 List<WorkOrderLineItem> woLineItemList = [Select wo.Status
5 From WorkOrderLineItem wo where wo.WorkOrderId=:w.Id];
6 if(woLineItemList.isEmpty()==false){
7 for(WorkOrderLineItem woLineItem : woLineItemList){
8 if(woLineItem.Status != 'Closed'){
9 w.addError('You cannot close a work order until all of its line items are closed.');
10 }
11 }
12 }
13 }
14 }
15}