"dev_actual_start": "isoDateFormat(fields.SVMXC__Actual_Onsite_Response__c)",
"dev_actual_end": "isoDateFormat(fields.SVMXC__Completed_Date_Time__c)"
|
Field
|
Value
|
|---|---|
|
Name
|
Actual Times Event Handler
|
|
Trigger
|
Before
|
|
Link Relation Operations list on Originators tab
|
Create Appointment
|
|
Update Job
|
package com.servicemax.dc.custom
import com.servicemax.core.MaxObject
import com.servicemax.core.annotations.Application
import com.servicemax.core.event_handler.TemplateOperationEventHandler
import com.servicemax.core.Database
@Application(application='svmx_dispatch_console')
public class ActualTimesEventHandler extends TemplateOperationEventHandler {
private static final String OBJECT_APPOINTMENT_ID = 'svmx_appointment'
@Override
public Object realExecute(Map<String, Object> parameters) {
MaxObject record = affectedMaxObject
def objectId = record.getDefinition().getFullIdentifier()
def isAppointment = objectId == OBJECT_APPOINTMENT_ID
if (isAppointment) {
this.handleAppointmentUpdate(record)
} else {
this.handleJobUpdate(record)
}
}
private void handleAppointmentUpdate(MaxObject record) {
def job = Database.querySingleResult('select * from svmx_job where io_uuid = :jobId', [jobId: record._svmx_related_to])
if (job) {
record.svmx_actual_start_time = job.dev_actual_start
record.svmx_actual_end_time = job.dev_actual_end
record.update()
}
}
private void handleJobUpdate(MaxObject record) {
def isActualStartChanged = record.isFieldChanged('dev_actual_start')
def isActualEndChanged = record.isFieldChanged('dev_actual_end')
if (isActualStartChanged || isActualEndChanged) {
def appts = Database.query('select * from svmx_appointment where svmx_related_to = :relatedTo', [relatedTo: record.io_uuid])
if (appts.size()) {
appts*.svmx_actual_start_time = record.getFieldValue('dev_actual_start')
appts*.svmx_actual_end_time = record.getFieldValue('dev_actual_end')
}
Database.update(appts)
}
}
}