To workaround this problem the manager id is stored in a custom attribute and a daily job executed after the trusted recon which sets the manager id correctly to all users.
1 package com.dubey.deepak.iam.oim.scheduled.tasks; 2 3 import static com.dubey.deepak.iam.oim.scheduled.tasks.TaskConstants.MANAGERLOGIN; 4 import static com.dubey.deepak.iam.oim.scheduled.tasks.TaskConstants.MANAGER_KEY; 5 import static com.dubey.deepak.iam.oim.scheduled.tasks.TaskConstants.SUPERVISORID; 6 import static com.dubey.deepak.iam.oim.scheduled.tasks.TaskConstants.USERID; 7 import static com.dubey.deepak.iam.oim.scheduled.tasks.TaskConstants.USERKEY; 8 import static com.dubey.deepak.iam.oim.scheduled.tasks.TaskConstants.USERROLE; 9 import static com.dubey.deepak.iam.oim.scheduled.tasks.TaskConstants.USERTYPE; 10 11 import java.util.HashMap; 12 import java.util.Map; 13 14 import oracle.iam.platform.Platform; 15 import oracle.iam.scheduler.vo.TaskSupport; 16 import Thor.API.tcResultSet; 17 import Thor.API.Exceptions.tcAPIException; 18 import Thor.API.Exceptions.tcColumnNotFoundException; 19 import Thor.API.Operations.tcUserOperationsIntf; 20 21 public class AssociateUserToManager extends TaskSupport { 22 23 private int totalExceptions = 0; 24 25 public AssociateUserToManager() { 26 super(); 27 28 } 29 30 @Override 31 public void execute(HashMap hashMap) throws Exception { 32 33 System.out.println("Starting Associate User To Manager"); 34 String userType = (String) hashMap.get(USERTYPE); 35 System.out.println("userType--->" + userType); 36 37 tcUserOperationsIntf userOperationsIntf = null; 38 try { 39 40 userOperationsIntf = (tcUserOperationsIntf) Platform 41 .getService(tcUserOperationsIntf.class); 42 43 System.out.println("userOperationsIntf---->" + userOperationsIntf); 44 Map<String, String> phAttributeList = new HashMap<String, String>(); 45 phAttributeList.put(USERROLE, userType); 46 tcResultSet resultSet = userOperationsIntf 47 .findUsers(phAttributeList); 48 System.out.println("resultSet---->" + resultSet.getRowCount()); 49 50 for (int i = 0; i < resultSet.getRowCount(); i++) { 51 resultSet.goToRow(i); 52 String userID = resultSet.getStringValue(USERID); 53 System.out.println("userID-->" + userID); 54 String userKey = resultSet.getStringValue(USERKEY); 55 System.out.println("userKey-->" + userKey); 56 System.out.println("SUPERVISORID-->" + SUPERVISORID); 57 String supervisorID = resultSet.getStringValue(SUPERVISORID); 58 System.out.println("supervisorID -->" + supervisorID); 59 String managerlogin = resultSet.getStringValue(MANAGERLOGIN); 60 System.out.println("managerlogin -->" + managerlogin); 61 62 if ((supervisorID != null) 63 && (!supervisorID.trim().equalsIgnoreCase("")) 64 && (!supervisorID.equalsIgnoreCase(managerlogin))) { 65 System.out.println("manager is empty for user ->" + userID); 66 String managerKey = getManagerKey(supervisorID, 67 userOperationsIntf); 68 if (managerKey != null) { 69 Map<String, String> userKeyMap = new HashMap<String, String>(); 70 userKeyMap.put(USERKEY, userKey); 71 tcResultSet resultSet1 = userOperationsIntf 72 .findUsers(userKeyMap); 73 Map<String, String> updateMap = new HashMap<String, String>(); 74 updateMap.put(MANAGER_KEY, managerKey); 75 76 userOperationsIntf.updateUser(resultSet1, updateMap); 77 System.out 78 .println("Done setting the manager to user ->" 79 + userID); 80 } 81 } 82 83 } 84 } catch (tcAPIException e) { 85 e.printStackTrace(); 86 } catch (Exception e) { 87 e.printStackTrace(); 88 } finally { 89 90 try { 91 if (userOperationsIntf != null) { 92 userOperationsIntf.close(); 93 } 94 95 } catch (Exception e) { 96 e.printStackTrace(); 97 } 98 } 99 System.out.println("SQL Exceptions --> " + this.totalExceptions); 100 System.out.println("Finishing Associate User To Manager Task"); 101 102 } 103 104 public String getManagerKey(String loginID, 105 tcUserOperationsIntf userOperationsIntf) { 106 System.out.println("Entering getManagerKey->" + loginID); 107 Map<String, String> phAttributeList = new HashMap<String, String>(); 108 phAttributeList.put(USERID, loginID); 109 tcResultSet resultSet; 110 String userKey = null; 111 try { 112 resultSet = userOperationsIntf.findUsers(phAttributeList); 113 System.out.println("resultSet---->" + resultSet.getRowCount()); 114 for (int i = 0; i < resultSet.getRowCount(); i++) { 115 resultSet.goToRow(i); 116 userKey = resultSet.getStringValue(USERKEY); 117 118 } 119 } catch (tcAPIException e) { 120 System.out.println("exception ->" + e.toString()); 121 e.printStackTrace(); 122 } catch (tcColumnNotFoundException e) { 123 System.out.println("exception ->" + e.toString()); 124 e.printStackTrace(); 125 } catch (Exception e) { 126 System.out.println("exception ->" + e.toString()); 127 e.printStackTrace(); 128 } 129 System.out.println("Exiting getManagerKey ->"); 130 return userKey; 131 } 132 133 @Override 134 public HashMap getAttributes() { 135 // TODO Auto-generated method stub 136 return null; 137 } 138 139 @Override 140 public void setAttributes() { 141 // TODO Auto-generated method stub 142 143 } 144 145 } 146
Plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<oimplugins>
<oimplugins>
<plugins pluginpoint="oracle.iam.scheduler.vo.TaskSupport">
<plugin pluginclass="com.dubey.deepak.iam.oim.scheduled.tasks.AssociateUserToManager" version="1.0" name="AssociateUserToManager"/>
</plugins>
</oimplugins>
<plugin pluginclass="com.dubey.deepak.iam.oim.scheduled.tasks.AssociateUserToManager" version="1.0" name="AssociateUserToManager"/>
</plugins>
</oimplugins>
Go to OIM_HOME/plugin_utility/ to register the plugin
ant -f pluginregistration.xml register
Package the plugin in a zip file for it to be registered correctly.