Sample Preprocessor script
This is a sample preprocessor script
import com.workbrain2.clocks.publ.api.ClocksPublicServiceAccess
import com.workbrain2.clocks.publ.api.ReaderGroupPublService
import com.workbrain2.clocks.publ.api.domain.ReaderGroupPubl
import com.workbrain2.ion.publ.api.bod.BodPreprocessorPublService
import com.workbrain2.ion.publ.api.bod.BodProcessorRetryException
import com.workbrain2.ion.publ.api.bod.BodProcessorServiceAccess
import com.workbrain2.ion.publ.api.domain.HRPersonnelEmployeeReaderGroupsPubl
import com.workbrain2.ion.publ.api.domain.HRPersonnelEmployeeReaderGroupsPublBuilder
import com.workbrain2.ion.publ.api.domain.HRPersonnelUpdateEmployeePubl
import com.workbrain2.ion.publ.api.domain.HRPersonnelUpdatePendingEmployeePubl
import com.workbrain2.ion.publ.api.bod.BodProcessorContext
import com.workbrain2.ion.publ.api.bod.BodPreprocessorScriptable
import com.workbrain2.ta.publ.api.EmployeePublService
import com.workbrain2.ta.publ.api.JobPublService
import com.workbrain2.ta.publ.api.TAPublicServiceAccess
// This is a tutorial for implementing custom BOD preprocessors.
// The preprocessor modifies core processor objects
// before they are processed by the core BOD processor.
class BodPreprocessorMultipleProcessorsSamplea extends BodPreprocessorScriptable {
ReaderGroupPublService readerGroupPublService = ClocksPublicServiceAccess.getReaderGroupService()
BodPreprocessorPublService bodPreprocessorService = BodProcessorServiceAccess.getBodPreprocessorService()
EmployeePublService employeeService = TAPublicServiceAccess.getEmployeePublService();
JobPublService jobService = TAPublicServiceAccess.getJobService()
Object preprocessBodInScript(mappedObject, BodProcessorContext context) {
// mappedObject - Contains XML data already parsed by core processor
// Only certain BOD processors support preprocessing. When supported, cast mappedObject into the appropriate class to read or update it.
// If not supported, this script will still run but mappedObject cannot be read.
// This preprocessor demonstrates preprocessing for several BOD processors together,
// you may also use multiple preprocessors instead
// This username check demonstrates how a preprocessor can only apply to a particular user/employee if necessary
if (mappedObject instanceof HRPersonnelUpdatePendingEmployeePubl && mappedObject.username == "70042819") {
// HRPersonnelUpdatePendingEmployeePubl - This is preprocessing the HRPersonnel employee basic processor's update pending employee scenario,
// which occurs when a pending/dummy employee turns into a full employee for the first time
// Use builder to modify the immutable mapped object
def updateBuilder = bodPreprocessorService.getHRPersonnelUpdatePendingEmployeePublBuilder(mappedObject)
// Prepare a replacement list for employee overrides
List overrides = new ArrayList(mappedObject.overrides)
// Prepare a new override
def fieldsBuilder = bodPreprocessorService.getHRPersonnelEmployeeOverridePublBuilder()
fieldsBuilder.setFirstName("Isabel")
fieldsBuilder.setLastName("Custom Last Name")
overrides.add(fieldsBuilder.build())
// Replace the original override list
updateBuilder.setOverrides(overrides)
return updateBuilder.build()
} else if (mappedObject instanceof HRPersonnelUpdateEmployeePubl && mappedObject.existingEmployee == "70042819") {
// HRPersonnelUpdateEmployeePubl - This is preprocessing the HRPersonnel employee basic processor's update employee scenario,
// which occurs after the update pending employee scenario above
def employee = employeeService.getEmployeeByName("70042819")
def job = jobService.getJobByName("70042819-JOB")
if (job == null) {
// Block employee basic processor from running unless this job is found
throw new BodProcessorRetryException("JobRetry", "Waiting for job to be added", "Timed out waiting for job 70042819-JOB to be found")
}
// Return null means returning the original mapped object without any edits
return null
} else if (mappedObject instanceof HRPersonnelEmployeeReaderGroupsPubl && mappedObject.empName == "70042819") {
// HRPersonnelEmployeeReaderGroupsPubl - This is preprocessing the HRPersonnel reader group processor
ReaderGroupPubl readerGroup = readerGroupPublService.getReaderGroupByName("VC_GROUP2")
if (readerGroup == null) {
throw new BodProcessorRetryException("ReaderRetry", "Waiting for reader group VC_GROUP2 to be added", "Timed out waiting for reader group VC_GROUP2 to be found")
}
// Use builder to modify the immutable mapped object
HRPersonnelEmployeeReaderGroupsPublBuilder employeeReaderGroupBuilder = bodPreprocessorService.getHRPersonnelEmployeeReaderGroupsPublBuilder(mappedObject)
// Prepare a replacement list for reader group IDs
List<Long> groups = new ArrayList<>(mappedObject.readerGroupIdsInBod);
// Include VC_GROUP2
groups.add(readerGroup.id)
employeeReaderGroupBuilder.setReaderGroupIdsInBod(groups)
return employeeReaderGroupBuilder.build()
}
// If this preprocessor is used on an unsupported processor, no preprocessing will happen
// because returning null will cause the original mapped object to be returned
return null
}
}