IBM BPM, V8.0.1, All platforms > Programming IBM BPM > Enterprise Service Bus programming > Aggregation > Aggregation patterns
Batch processing requiring embedded aggregation
This scenario combines the two previously described examples, where an aggregation of data from multiple sources is embedded within a batch processing aggregation.
The scenario is a personnel-based application that creates payslip information for specific employees. The back-end service is represented by a Callout node and requires full employee records, rather than the employee IDs, which arrive at the mediation flow. These employee records are created by the mediation from two sources, an HR system and a Payroll system. The former stores information concerning the employee's name, address, and vacation entitlement, while the latter contains information regarding salary and department.
Design the aggregation
The input to the flow is an array of employee identifiers, while the output is an array of status objects, indicating whether the payslip processing succeeded or not, as shown in Figure 1
Figure 1. Flow input and output
![]()
The HR and Payroll systems that are called from within the mediation flow can only handle a single record, as shown in Figure 2.
Figure 2. HR and Payroll Record
![]()
The outer aggregation iterates through all the employeeIDs, while the inner aggregation builds a response aggregated from the HR and Payroll services. This is depicted in Figure 3 .
Figure 3. The inner and outer flow
![]()
In this case, after the two services have been called successfully, the HRRecord and PayrollRecord must be combined into a single EmployeeRecord. The EmployeeRecord must then be appended to an array of records to comply with the interface for the Payslip service, which is called via the Callout node, as in Figure 4. Consequently, the same model for Shared context as previously described is used.
Figure 4. EmployeeRecord array
![]()
After the data has been aggregated and batched, the Payslip service is called, which takes an array of EmployeeRecord objects and returns an array of PayslipStatus objects, as shown in Figure 5.
Figure 5. PayslipStatus object
![]()