AutoPopulateGroup - Scheduled Agent
June 23, 2008 – 6:22 amIn 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
