We would like to use attributes from Banner to build target audiences but it appears that the only thing available to us is username which is the immutable identifier which does not exist in Banner.
Does anybody know if the Banner ID is available for us to use when building the attribute imports in personDirectory.xml? If so what is the name of the (not sure what to call it - attribute?)?
Page 5.83 of the Luminis Platform System Administration Guide refers to username as being the second of three parameters for a constructor and that it is the immutable identifier, and that it is the only 'attribute' supported.
What I am hoping is that either this is not still the case or that we can have some un-supported method of using the Banner ID rather than the immutable id.
I think you can only use the immutable ID
We're importing attributes via personDirectory.xml, but I configured our immutable id and login id to both be the Banner ID, so that made it easier for us.
I can think of a couple ways you might work around not having the Banner ID available. One might be to backfill a table in your Banner database that contains the immutable id and one of the other fields from the ldap (whether the SCT ID, External Source ID, etc) so you could join that into your queries.
The other way would be to create an oracle function that connects to the ldap. For example, you might have a query in personDirectory.xml like:
The function would take the immutable ID as its argument, use dbms_ldap to connect to the ldap, search "ou=People,o=school.edu,o=cp" with a filter something like "uid=immutableidparam" and retrieve attribute pdsExternalSystemID. One of those instances of that attribute is for the sct (Banner) system.
I've created a couple functions similar to this that connect to the luminis ldap. I based mine on this example (I didn't have to change very much to make it into a function): http://www.oracle-base.com/articles/9i/LDAPFromPLSQL9i.php
The function to return luminis login ID
Thanks! I used the approach from ahoward and wrote a function to return the Luminis login ID using the DBMS_LDAP package. in my SQL in personDirectory I join gobtpac_external_user = new_function(?) and it works!
Importing user attributes from LDAP
I'm having the same problem. We're using EAS (Active Directory), so our pdsLoginID is the user's Active Directory login id. I want to import user attributes from LDAP (Active Directory) using pdsLoginID as the key. I just figured out (like you have) that username is the immutableID. I tried using pdsLoginId instead, but that didn't work. I'm stuck, but still hoping to find a solution.
One solution
I created a superclass of LdapPersonAttributeDaoImpl which had the following contents to lookup the pdsLoginId and pass it as the attribute loginId. Something similar could be done to wrap the JDBC class
BTW, Sungard has a defect in for this, with a target release of IV.1
/* * (non-Javadoc) * @see org.jasig.portal.services.persondir.support. * LdapPersonAttributeDaoImpl#getUserAttributes(java.util.Map) */ @Override public Map getUserAttributes(Map seed) { ILdapServer lServ = LdapServices.getDefaultLdapServer(); try { DirContext ctx = lServ.getConnection(); if (ctx == null) { throw new IllegalStateException( "Could not connect to Luminis LDAP"); } try { SearchControls sc = new SearchControls(); sc.setTimeLimit(getTimeLimit()); sc.setSearchScope(SearchControls.SUBTREE_SCOPE); sc.setReturningAttributes(new String[] { "pdsLoginId" }); Object uid = seed.get("username"); Object[] filterArgs = new Object[] { uid }; Object loginId = null; NamingEnumeration<SearchResult> sre = ctx.search(lServ.getBaseDN(), "(uid={0})", filterArgs, sc); try { if (sre.hasMore()) { SearchResult sr = sre.nextElement(); loginId = sr.getAttributes().get("pdsLoginId").get(); } } finally { sre.close(); } seed = new HashMap(seed); seed.put("loginId", loginId == null ? uid : loginId); } finally { lServ.releaseConnection(ctx); } } catch (NamingException e) { log.warn("LDap exception looking up Luminis login id", e); } return super.getUserAttributes(seed); }How do you implement this class
Hi,
Could you tell us where to put the compiled class file? We tried to put to $CP_WEBINF/classes,
Got some exception from the tomcat webserver:
java.security.AccessControlException: access denied (java.io.FilePermission /usr1/luminis/webapps/luminis/WEB-INF/classes read)
We think it is the j2ee security setting. But we don't have enough knowledge about it. If you know, please give advice, Thanks very much!
Selecting more than 1 user attribute in a query
When I try to select more than one Banner table attribute in an attribute source bean the webserver won't start up. Does anyone know if this is possible and if it is maybe my key/value mapping is wrong. This is what I tested (modified so this message wouldn't interpret the xml):
(bean id="attributeGenderSource"
class="org.jasig.portal.services.persondir.support.JdbcPersonAttributeDaoImpl")
(constructor-arg ref="externalJdbcDataSource" /)
(constructor-arg)
(list)
(value)username(/value)
(/list)
(/constructor-arg)
(constructor-arg)
(value)
(!-- decode F to E because luminis is interpreting F to False --)
select decode(spbpers_sex,'F','E','M','M','N') as source_gender,
spbpers_ethn_code as source_ethnicity
from general.gobtpac,
saturn.spbpers
where gobtpac_external_user=sosc.sosc_get_luminis_id_fcn(?,'lum_password')
and spbpers_pidm = gobtpac_pidm
(/value)
(/constructor-arg)
(property name="columnsToAttributes")
(map)
(entry key="source_gender" value="Gender" /)
(entry key="source_ethnicity" value="Ethnicity" /)
(/map)
(/property)
(/bean)
Selecting more than 1 user attribute in a query
Well, it works if I call my id function correctly. (I had taken out password as an argument)