I am implementing a ManagerCorrelation rule in SailPoint ISC to correlate maanger from 2 different source systems.
- Read maanger employeeID from HR source (Current Manager)
- If HR deosnot contains the value, read the manager from Secondary Source (Onboarding - Manager ID)
- REturn the correct manager ID for identity correlation.
The HR part works correctly, but when HR doesn’t have data, the rule doesn’t fall back to Secondary Source.
Below is the Rule:
import sailpoint.object.Identity;
import sailpoint.object.Link;
Map returnMap = new HashMap();
// HR Attribute
String hrMgrAttr = "Current Manager";
// Cornerstone Attribute
String ssMgrAttr = "Onboarding - Manager ID";
// Values
String hrMgr = link.getAttribute(hrMgrAttr);
log.debug("HR Manager ID extracted: " + hrMgr);
String ssMgr = null;
// Extract manager ID from secondary source
Identity id = link.getIdentity();
for (Link l : id.getLinks()) {
if (l.getApplicationName() != null &&
"Secondary-Source".equalsIgnoreCase(l.getApplicationName())) {
ssMgr = l.getAttribute(ssMgrAttr);
}
}
// Final managerId
String finalMgrId = null;
if (hrMgr != null && hrMgr.trim().length() > 0) {
finalMgrId = hrMgr;
} else if (ssMgr != null && ssMgr.trim().length() > 0) {
finalMgrId = ssMgr;
}
if (finalMgrId == null) {
return null;
}
returnMap.put("identityAttributeName", "uid");
returnMap.put("identityAttributeValue", finalMgrId);
return returnMap;
I have attached the manager correlation rule only to HR source and executing HR aggregations and observed below behaviors.
Observed Behavior:
HR value exists & Secondary Source value exists → manager mapped successfully using HR data in user’s identity profile.
HR value exists & Secondary Source value doesn’t exists → manager mapped successfully using HR data in user’s identity profile.
HR value doesn’t exists (= null) & Secondary Source value exists - > no manager mapping in user’s identity profile.
Any guidance or recommended patterns for correlating manager from multiple sources would be appreciated.
