AutoPopulateGroup – Scheduled Agent
In yesterdays post about how to automatically populate a group document, I published code to do the job in the foreground only. One of my blog readers complained about this. Maybe I was to naive to think that even an unexperienced java developer like me could modify the given code to run on a scheduled basis on the server.
Well, here is the code for an scheduled agent.
import lotus.domino.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
import java.util.Vector;
public class LDAPSearchWithFilter extends AgentBase {
private static String fldMembers = "Members";
public void NotesMain() {
try {
Database _db;
Document _doc;
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
_db = agentContext.getCurrentDatabase();
Agent ag1 = agentContext.getCurrentAgent();
String ldapCF = "com.sun.jndi.ldap.LdapCtxFactory";
String ldapURL = "ldap://localhost:389/";
String ldapBaseDN = "";
String ldapUserID = "";
String ldapPassword = "";
Hashtable env = new Hashtable(4);
env.put(Context.INITIAL_CONTEXT_FACTORY, ldapCF);
env.put(Context.PROVIDER_URL, ldapURL + ldapBaseDN);
env.put(Context.SECURITY_PRINCIPAL, ldapUserID);
env.put(Context.SECURITY_CREDENTIALS, ldapPassword);
DocumentCollection _dc = _db.getAllDocuments();
Document doc = _dc.getFirstDocument();
while (doc != null) {
String searchCriteria = doc.getItemValueString("SelectionCriteria");
DirContext ctx = new InitialDirContext(env);
SearchControls ctls = new SearchControls();
NamingEnumeration answer = ctx.search("", searchCriteria, ctls);
PopulateGroup (answer, doc);
ctx.close();
doc = _dc.getNextDocument();
} // end of while
} // end of try
catch (Exception e) {
e.printStackTrace(); }
} // end of Main
public static void PopulateGroup(NamingEnumeration col, Document doc) {
try {
Item item = doc.getFirstItem(fldMembers);
Vector v = new Vector();
String result;
if (col.hasMore()) {
while (col.hasMore()) {
SearchResult sr = (SearchResult)col.next();
result = (String)sr.getName();
v.addElement(result.replace(',','/'));
} // end of while
doc.replaceItemValue(fldMembers, v);
doc.save(true);
} // end of if
} // end of try
catch (NamingException e) {
e.printStackTrace(); }
catch (Exception e) {
e.printStackTrace(); }
} // end of PopulateGroup
} // end of class