Now I don't know about you, but I've always had some issues with looking up entries in the
NetWeaver Identity Management Identity Store. I know there are built in scripting functions like
uIS_Get,
uIS_
GetValue,
uIS_
sGet,
uIS_
sGetValue, etc, but they've just never worked well for me. So to compensate, I've developed my own methodology for searching and retrieving items from the Identity Store.
The basic use case is this: The Identity Management solution needs to do a
look up between an incoming data feed and the Identity store. The basic idea is that if the value from the feed and the value from the Identity Store match then the entries match and updating/provisioning can proceed as directed by
workflow. I'm sure you can imagine other use cases, looking up managers, phone numbers, and other frequently used attributes.
The feed processing job will use a script to evaluate the match. Most likely it will pass
MSKEYVALUE but could also use some other unique attribute in the feed.
The first thing that is needed is to determine the
MSKEY, if any, for the entry to be worked with. To this end, I created the following query which will be implemented by NW
IDM's uSelect function, which can be used in a Provisioning Job or Reconciliation task. Following best practices for
NetWeaver Identity Manager, I am using the JAVA engine and therefore JavaScript in this example.
//Create an uppercase version of Par for checking against the SEARCHVALUE
uPar = Par.toUpperCase();
MSKEYQuery = "select mskey from mxiv_sentries where (searchvalue = '" + uPar + "')";
MSKEYResult = UserFunc.uSelect(MSKEYQuery);You'll notice one of the first things we need to do is make sure we access the
searchvalue correctly. Elements in this column always have their text elements stored in Uppercase, so we need to make sure that for the purposes of searching, we have an uppercase value handy. The results of this query are stored in a variable called
MSKEYResult. Now that this information is available, we can now search for needed values related to this entry.
EmployeeNumQuery = "select avalue from mxiv_sentries where (mskey=" + MSKEYResult + ") and (AttrName='HR_EMPNUM)";
EmployeeNumResult = UserFunc.uSelect(EmployeeNumQuery );With this query I can now look for a specific attribute value for a specific user and store it in a variable. At this point we should plan on returning a more nicely formatted version of the attribute so we will return
aValue rather than
SearchValue which is the value for the attribute as it entered into and subsequently processed by NW
IDM for use in screen output, reports, emails, etc. In this example we are returning the user's Employee number.
This process might also include another query to do a count of returned Employee Numbers to protect against potential "dirty data" entries (multiple identities for the user or to many users with the same name.) If this scenario occurs more detailed searching, involving more attributes might be needed.
Note: I don't necessarily claim that this is the best or most efficient methodology for accessing this information. All I know is that it works for me and the way that I think / process information. If anyone has ideas on making this better or properly using the embedded functions listed above, I'd love to hear about it.