Article
Problem
This is a variation on the theme found in Use Case 8 of the following AppNote written by Rudy Duym:
http://www.novell.com/coolsolutions/appnote/19307
Use Case 8 in the AppNote did not meet my needs in two respects:
1. A different naming convention was required. The convention was to use up to the first 5 letters of surname + first initial of Given Name, and if duplicates are found, begin appending a counter. I needed to increment a counter ONLY if a duplicate CN already existed.
2. I needed to compare against all CNs in a tree, rather than seek a specific DN for existence. The interesting twist between the two scenarios is that the returned result of a global query is an array, and so the test on the query results had to do more than the example in Use Case 8.
Solution
Here's the code, most written by Rudy Duym, with my comments and modifications added for the query instead of the "IDVault.get" found in Use Case 8.
This code is placed in an onLoad event, on my CN field on the request form.
Sample Code
//The CN Field on the form is not something visible for user input;
field.hide();
//The following Computes CN;
window.computeCN = function (invocation)
{
try {
var errors = form.validate();
if (errors) {
invocation.proceed();
return;
}
// Unique CN Generation;
var fn = form.getValue('GivenName');
var ln = form.getValue('Surname');
var cn;
var prefix=(ln.substring(0, ln.length > 5 ? 5 : ln.length) + fn.substring(0, 1)).toLowerCase();
for (var i = 0; i <99; i++) {
// First iteration cn does not have a number appended. Subsequent loops get incrementing counter;
cn = prefix + (i == 0 ? "" : i);
form.setValues('cn', cn);
try {
// A query object called "uniqueCN is passed a filtering parameter... the computed cn value.;
var v = IDVault.globalQuery(null, "uniqueCN", {"cN":cn})
} catch (e) {
alert(e);
break;
}
// The global query returns an array: V[0] is the dn of an object with a matching cn and v[1] is the cn;
if (v[1] == cn) {
form.showMsg("cn " + cn + " already exists at " + v[0]);
} else {
alert("This User's Unique Login ID= " + cn);
invocation.proceed();
break;
}
}
} catch (e) {
alert(e);
}
};
form.interceptAction("SubmitAction", "around", window.computeCN);Below is the CN Global Query that had to be created. (Of course, the User entity had to have the CN attribute searchable.)
Disclaimer: As with everything else at Cool Solutions, this content is definitely not supported by Novell (so don't even think of calling Support if you try something and it blows up).
It was contributed by a community member and is published "as is." It seems to have worked for at least one person, and might work for you. But please be sure to test, test, test before you do anything drastic with it.
Related Articles
User Comments
- Be the first to comment! To leave a comment you need to Login or Register
- 3826 reads



0