Created on Sunday, 05 August 2012
I currently got some emails from admins out in the world which ask for help to troubleshoot a Notes 8.5.x roaming issue. They all explain the same situation: There is a user who logs into different computers almost every time and it seamed that is the issue why the roaming isn´t finished/completed (the Lotus Domino address book showed a sand clock all the time -> Roaming: In Progress for the person's record).
All the admins who send me a email said they already tried to remove the roaming and re-set it up, but this doesn´t solve the issue. Some said the user is also not receiving the prompt for the upgrade to roaming (also not if they create a new roaming request).
So it was time for a deeper troubleshooting...
When Lotus Notes roaming is enabled, the client creates a profile document in the users mailfile called "roaminguserlock" with the username as key. You can see that if you add some debug values (Debug_Roaming=1) to the client notes.ini. There will be something like:
Roaming lock already exists 05/11/2012 22:11:34 Unable to get roaming upgrade lock, exiting roaming upgrade.
The profile document in the users mail file includes a field with the hostname name from the workstation which was used by the user at this time. So if the user log off from Lotus Notes until the initial "seeding" was finished the client stuck then somewhere in the middle and never finished. If the user then logged into another workstation the hostname didn´t fit and the initial "seeding" isn´t started again. This special profile document is also not removed if the user roaming is removed (because the Hostname from the new workstation didn´t fit).
To solve that you must perform the following:
1.) disable the roaming from the user
2.) remove the profile document (roaminguserlock) in his mailfile
3.) enable roaming for the user
Note: You can try to remove the profile without removing the roaming but I think it might be better to start with a fresh and clean roaming.
This sounds like an easy way ... but how to remove a profile document (you couldn´t see that in a Lotus Notes client per default) and how to do that for 100 - 1.000 users? So I quickly wrote a small agent which you can put in your server based names.nsf. You can select a user from the adressbook then and run the agent. The agent will connect to the users mailfile and will then remove the profile. Easy or? ;-)
Please note that you need deletion rights in the mailfile from the user, otherwiese the agent couldn´t remove the profile document!
Here is the code:
Dim checked As Long
Dim doc As NotesDocument
Dim flag As Boolean
Dim NotesSession As New NotesSession
Dim col As NotesDocumentCollection
Dim buf As String
'initialize parameter
checked = 0
Set col = NotesSession.CurrentDatabase.UnprocessedDocuments
If col.Count <= 0 Then
MessageBox "No documents selected", 0+64, "Delete 'roaming user lock'"
Exit Sub
End If
Set doc = col.GetFirstDocument
While Not doc Is Nothing
Dim ProfileDoc As NotesDocument
Dim UserMailDB As NotesDatabase
Dim MailFileOwner As String
MailFileOwner = doc.Owner(0)
Set UserMailDB = New NotesDatabase(doc.MailServer(0),doc.MailFile(0))
Set ProfileDoc=UserMailDB.GetProfileDocument("roaminguserlock",MailFileOwner)
If ProfileDoc.Form(0) = "roaminguserlock" Then
flag = ProfileDoc.RemovePermanently(true)
End If
If flag = True Then
MsgBox "Removed roaming lock for:" & _
NotesSession.CreateName(MailFileOwner).Abbreviated
Else
MsgBox "Couldn´t removed roaming lock for:" & _
NotesSession.CreateName(MailFileOwner).Abbreviated
End If
Set doc = col.GetNextDocument(doc)
Wend
To add it do the following:
1.) Open your server based names.nsf in the Lotus Domino Designer
2.) Goto Code -> Agents and choose "New Agent" add a name for the agent (e.g. Administration / Delete 'roaming user lock') and choose as Type "Lotus Script"
4.) In the security settings select your administration group in the "default level for viewing and running this agent", otherwise every user in your company might be able to run this agent (and normally we admins didn´t really like that).
3.) Copy the code above between "Sub Initialize" and "End Sub"

Leave your comments