I have a use case where we're looking to generate a flat-file based off HRIS data.
We retrieve one payload of employee data to include manager
The use case is to populate an isManager
field if any record has that user as a manager.
I was able to retrieve an employee's manager, but walking down the tree is throwing me for a loop.
%dw 2.0
output application/json
var levelsPayload = payload[0].payload
var employeesPayload = payload[1].payload
var allManagerIds = employeesPayload.managerId
---
employeesPayload map (employee) -> {
id: employee.id,
endDate: employee.endDate,
isManager: allManagerIds contains employee.id,
manager: ((employeesPayload filter ( (value, index) -> value.id == employee.manager )) map ( (value,index) -> (value.preferredFirstName ++ ' ' ++ value.preferredLastName) )) joinBy (""),
managerEmail: ((employeesPayload filter ( (value, index) -> value.id == employee.manager )) map ( (value,index) -> value.workEmail )) joinBy (""),
firstName: employee.preferredFirstName default employee.firstName,
lastName: if (employee.preferredLastName == '' or employee.preferredLastName == null) employee.lastName else employee.preferredLastName,
userName: employee.workEmail,
email: employee.workEmail,
title: employee.title replace /(,)/ with " ",
displayName: employee.preferredFirstName ++ ' ' ++ employee.preferredLastName,
secondEmail: employee.personalEmail,
primaryPhone: employee.phone,
streetAddress: '',
city: employee.address.city,
state: employee.address.state,
zipCode: employee.address.zip,
countryCode: employee.address.country,
postalAddress: employee.address.zip,
employeeNumber: employee.employeeNumber,
department: employee.department,
managerId: employee.manager,
startDate: employee.startDate,
jobStatus: if (employee.endDate == null) "active" else "termed",
teams: (employee.teams joinBy '') as String,
level: ((levelsPayload as Array filter ( (value, index) -> value.id == employee.level )) map ( (value,index) -> value.name as String) ) joinBy (""),
employmentType: employee.employmentType,
legalFirstName: employee.firstName,
legalLastName: employee.lastName,
}
I'd assume I need to do a filter map, but am unsure how to return true
if any element in the payload equals the manager's employee id
You can store all manager IDs in a var
var allManagerIds = employeesPayload.manager
Then you can use contains
method to check if a the employee manager id is in this list.
isManager: allManagerIds contains employee.manager