Passing information about UI objects to a java agent

The lotus java agents don’t have classes to manage the UI objects, such as in LotusScript with the classes NotesUIDocument or NotesUIView.
It’s true that you can find several info about the Notes Client Java UI API in internet, but these classes are not officially supported.
In this post I explain 3 ways to obtain the currently open view or document inside an agent java.
You take advantage of the LotusScript UI classes that can easily manage the UI objects, and you pass them to the java agent using the variables in the notes.ini or a profile document or a notes document.


Getting the list of users belonging to a role

Lotus provides the method QueryAccessRoles of the NotesDatabase class to get the roles of a user and there are no methods to get users belonging to a role, but you can get them by combining IsRoleEnabled of the NotesACLEntry class with the function getUsersByGroup that I wrote in a previous article.


Getting the list of users belonging to a group

There is not a method in lotusccript to get the list of all users belonging to a group, and to complicate matters, groups can contain other groups as members.
To solve this problem I wrote getUsersByGroup function that returns the list of users belonging to a group, provided that:

  • the public names.nsf is accessible
  • users have a document “Person” in the public address book
  • groups are defined in the names
  • the maximum number of nested groups is 100, but you can change this setting changing the variable maxNestedGroup

Opening a document in a dialog box

If you want to open a document in a dialog box you can use two methods:


Debugging the Terminate event in a Form

I discovered that you can not debug the Terminate event of a form with Lotus Notes Designer 8.5.3 and I do not understand why.
I’m sure that once you could.


Sending an e-mail from an other user

If a user sends an e-mail using an agent, he seems to be the sender or the agent signer seems to be the sender if the agent is scheduled.
This is not always the desired behavior, especially in the case of scheduled agents in which the sender of the e-mail seems to be the developer of that agent or the administrator of the server.


The method getDocumentByUNID in NotesDatabase class

The method getDocumentByUNID NotesDatabase class returns the appropriate document for the UniversalUnid passed as argument, but it does not return Nothing if it does not find the document but the error 4091 (lsERR_NOTES_BAD_UNID).
Then a code to handle this would be the following:

	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim doc As NotesDocument
	Dim unid As String
	Set db = s.Currentdatabase

	unid = "1EC53F4B3D66557BC12579A600404BE2"

	On Error 4091 GoTo Error4091Handler ' lsERR_NOTES_BAD_UNID 
	Set doc = db.Getdocumentbyunid(unid)
	On Error GoTo 0
	Print "Document found"
	Exit Sub
	Print "Document not found"
	Resume Next

The method UpdateProcessedDoc in NotesSession class

The method UpdateProcessedDoc in NotesSession class can be used to mark a document as already processed by an agent