As a follow-up to my previous tool that let you analyze the ACL of a database, I built another tool for my admin. For different reasons, we need to keep the mailbox of terminated users, sometimes for a shorter time but sometimes for long periods of time. As far as I understand it, if a traditional approach was used to remove a user from the system, the mail file would also be deleted. So the admin put the terminated user in the Deny Access group and change the ACL of the mailfile to include a manager, supervisor or replacement.
But because of this process, AdminP will not remove the terminated user from all the groups he/she is listed in. When you have hundreds of groups, many of them nested, this could be a real headache. So I was asked to build something simple that allows us to remove one or more specified users from all groups in the Domino Directory. Below is the result. Enjoy!
First you create a form with 3 fields:
'SaveOptions' has a default value of "0" (to prevent the form from being saved).
'Users' is a Names field, getting it's values using the addresses dialog. The field is multi-value and using New Line as separator.
'LogResult' is a multi-value text field, again with New Line as separator.
Finally I add a button to the action bar to remove the user(s). The Lotusscript code is listed below. It is using my class for mail notifications that I blogged about last year to send a confirmation to the user running the agent. This is useful for example when you need to log all data changes done to a system.
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim session As New NotesSession
Dim nab As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim members As Variant
Dim newmembers List As String
Dim delmembers List As String
Dim users As Variant
Dim userlist List As String
Dim user As NotesName
Dim nmcnt As Integer
Dim newarray() As String
Dim ret As Integer
Dim removelog List As String
Dim userarr As Variant
Dim mail As NotesMail
Dim mailtext As String
Dim updated As Boolean
' *** Make sure the operator is sure
ret = Msgbox("Are you sure?",4+32+256,"WARNING")
If ret = 7 Then
' *** Get a list of users in field 'Users'
Set uidoc = ws.CurrentDocument
users = Split(uidoc.FieldGetText("Users"),Chr$(13))
Forall u In users
Set user = New NotesName(u)
userlist(Fulltrim(user.Common)) = Fulltrim(user.Common)
' *** Get all groups in NAB and process them one by one
Set nab = New NotesDatabase(session.CurrentDatabase.Server,"names.nsf")
Set view = nab.GetView("Groups")
Set doc = view.GetFirstDocument
Do While Not doc Is Nothing
Print "Processing " & doc.GetItemValue("Listname")(0)
updated = False
' *** Get members in the group and create a list of the ones to keep
members = doc.GetItemValue("Members")
nmcnt = 0
Forall m In members
Set user = New NotesName(m)
If Iselement(userlist(Fulltrim(user.Common))) = False Then
' User is not among the ones to delete
newmembers(Fulltrim(user.Common)) = Fulltrim(m)
nmcnt = nmcnt + 1
delmembers(Fulltrim(user.Common)) = Fulltrim(m)
updated = True
' *** Build array of members to keep
Redim newarray(nmcnt) As String
nmcnt = 0
Forall nm In newmembers
newarray(nmcnt) = nm
nmcnt = nmcnt + 1
' *** Write array of new members back to document and save it
If updated = True Then
Call doc.ReplaceItemValue("Members", Fulltrim(newarray))
Print "Updating " & doc.GetItemValue("Listname")(0)
Forall dm In delmembers
removelog(doc.GetItemValue("Listname")(0)) = removelog(doc.GetItemValue("Listname")(0)) & dm & ";"
Set doc = view.GetNextDocument(doc)
' *** We are all done
mailtext = ""
Forall rl In removelog
Call uidoc.FieldAppendText("LogResult", "Group '" & Listtag(rl) & "':" & Chr$(10))
mailtext = mailtext & "Group '" & Listtag(rl) & "':" & Chr$(10)
userarr = Split(Cstr(rl),";")
Forall u In userarr
Set user = New NotesName(u)
Call uidoc.FieldAppendText("LogResult", user.Common & Chr$(10))
mailtext = mailtext & user.Common & Chr$(10)
' Call uidoc.FieldAppendText("LogResult", Chr$(10))
Set mail = New NotesMail()
mail.MailTo = session.CommonUserName
mail.Subject = "[Notification] - Users removed from NAB"
mail.Principal = "IT Programs"
Msgbox "Done removing specified user(s) from Domino Directory.",64,"Finished"
More on IBM ConnectED 2015
Wed, Sep 17th 2014 12:05p Karl-Henry Martinsson This morning Kristin Keene from IBM talked more about the upcoming IBM ConnectED 2015 in January at the ICS Community webcast. IBM realized that the last few years they been swinging over too much to the business side, and is now going back to a much more technical conference. As I mentioned the other day, […] [read] Keywords: ibm
Two more days to thank someone
Mon, Sep 15th 2014 5:45p Karl-Henry Martinsson It is now just two days left to nominate IBM Champions. So if you know someone who have been helping the community, perhaps through video tutorials, blogs, presenting at (or organizing) conferences or answering questions on different forums, submit a nomination. This is how IBM explains what a Champion is: An IBM Champion is someone who […] [read] Keywords: ibm
IBM ConnectED agenda published
Fri, Sep 12th 2014 9:00a Karl-Henry Martinsson The agenda for IBM ConnectED (the conference formerly known as Lotusphere and IBM Connect) has now been posted. As previously announced, the conference is one day shorter than before, ending already on Wednesday. There are no jumpstart sessions listed for Sunday, but the Master Class sessions are returning that day. The individual sessions have not been […] [read] Keywords: ibm
#ThrowbackThursday – My old HP calculators
Thu, Sep 11th 2014 6:57a Karl-Henry Martinsson I have previously here on my blog mentioned my preference for HP calculators. Our first calculator at home was the HP-21, with a red LED display, which we got in late 1975 (if I remember correctly), soon after it was released. My parents used it for all different kinds of calculations, especially taxes (back then the Swedish tax system […] [read] Keywords:
#ThrowbackThursday – World War 1
Thu, Sep 4th 2014 1:05p Karl-Henry Martinsson OK, this is a pretty extreme #ThrowbackThursday, but I wanted to promote a blog I have been reading since the beginning of the year. Arthur Linfoot, who took part in World War 1, wrote a diary every day from January 1 1914 to December 31 1918. It was written in Pitman’s shorthand, and his son […] [read] Keywords:
Nominations for IBM Champions are now open!
Tue, Sep 2nd 2014 12:52p Karl-Henry Martinsson The nominations for IBM Champions for 2015 is now open. If there is someone in the ICS (IBM Collaborative Solutions) community whom you want to show appreciation for their work, go here and nominate him or her. You can only nominate non-IBMers. So who is deserving to be an IBM Champion? Well, you can see […] [read] Keywords: ibm