Subject: Renaming the domain
It’s a pain, and there aren’t any built-in tools to do it. We (IBM) tend not to even try and just continue using older domain names, but a lot of organizations like consistency in the naming. I wrote this agent many years ago that updates some of the information needed to rename your domain. It’s probably not complete, but it can be used as a starting point.
Option Public
Public Const OLDDOMAIN = “GQ”
Public Const NEWDOMAIN = “HQ”
Public Const SERVER = “Dom1/Acme”
Public Const MAILDIRECTORY = “mail”
Dim s As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim formField As NotesItem
Sub Initialize
Set s = New NotesSession
Call ProcessNAB
Call ProcessDirectoryProfile
Call IterateMailfiles
End Sub
Sub ProcessDomainField(strField As String)
Dim domainField As NotesItem
Set domainField = doc.GetFirstItem(strField)
If Not domainField Is Nothing Then
If domainField.Text = OLDDOMAIN Then
Set domainField = doc.ReplaceItemValue(strField, NEWDOMAIN)
Call doc.Save(False, True)
End If
End If
End Sub
Sub ProcessDirectoryProfile
Dim profileDoc As NotesDocument
Dim domain As NotesItem
Set db = s.GetDatabase(SERVER, “names.nsf”)
Set profileDoc = db.GetProfileDocument(“DirectoryProfile”)
Set domain = profileDoc.GetFirstItem(“Domain”)
Set domain = profileDoc.ReplaceItemValue(“Domain”, NEWDOMAIN)
Call profileDoc.Sign()
Call profileDoc.Save(True, True)
End Sub
Sub ProcessMailfile(db As NotesDatabase)
Dim field As NotesItem
Call db.open(“”,“”)
Set dc = db.AllDocuments
Set doc = dc.GetFirstDocument
While Not doc Is Nothing
Set formField = doc.GetFirstItem(“Form”)
If Not formField Is Nothing Then
If formField.Text = “Appointment” Then
Set field = doc.GetFirstItem(“Room”)
If Not field Is Nothing Then
Call ProcessTextList(“Room”, field)
End If
Set field = doc.GetFirstItem(“AltFYNames”)
If Not field Is Nothing Then
Call ProcessTextList(“AltFYNames”, field)
End If
Set field = doc.GetFirstItem(“AltOptionalNames”)
If Not field Is Nothing Then
Call ProcessTextList(“AltOptionalNames”, field)
End If
Set field = doc.GetFirstItem(“AltRequiredNames”)
If Not field Is Nothing Then
Call ProcessTextList(“AltRequiredNames”, field)
End If
Set field = doc.GetFirstItem(“INetOptional”)
If Not field Is Nothing Then
Call ProcessTextList(“INetOptional”, field)
End If
Set field = doc.GetFirstItem(“INetRequiredNames”)
If Not field Is Nothing Then
Call ProcessTextList(“INetRequiredNames”, field)
End If
Set field = doc.GetFirstItem(“FYIAttendees”)
If Not field Is Nothing Then
Call ProcessTextList(“FYIAttendees”, field)
End If
Set field = doc.GetFirstItem(“OptionalAttendees”)
If Not field Is Nothing Then
Call ProcessTextList(“OptionalAttendees”, field)
End If
Set field = doc.GetFirstItem(“Recipients”)
If Not field Is Nothing Then
Call ProcessTextList(“Recipients”, field)
End If
Set field = doc.GetFirstItem(“RequiredAttendees”)
If Not field Is Nothing Then
Call ProcessTextList(“RequiredAttendees”, field)
End If
Set field = doc.GetFirstItem(“RequiredResources”)
If Not field Is Nothing Then
Call ProcessTextList(“RequiredResources”, field)
End If
End If
End If
Call doc.Save(False, True)
Set doc = dc.GetNextDocument(doc)
Wend
End Sub
Sub ProcessNAB
Set db = s.GetDatabase(SERVER, “names.nsf”)
Set dc = db.AllDocuments
Set doc = dc.GetFirstDocument
While Not doc Is Nothing
Set formField = doc.GetFirstItem(“Form”)
If Not formField Is Nothing Then
Select Case formField.Text
Case “Person” :
Call ProcessDomainField(“MailDomain”)
Case “Database” :
Call ProcessDomainField(“MailDomain”)
Case “Group” :
Call ProcessDomainField(“MailDomain”)
Case “local” :
Call ProcessDomainField(“SourceDomain”)
Call ProcessDomainField(“DestinationDomain”)
Case “Server” :
Call ProcessDomainField(“Domain”)
End Select
End If
Set doc = dc.GetNextDocument(doc)
Wend
End Sub
Sub ProcessTextList(fieldName As String, item As NotesItem)
Dim v1 As Variant
Dim v2 As Variant
Dim temp As String
Dim docItems As Variant
itemValues = item.Values
Forall itemValue In itemValues
v1 = Strleft(itemValue, “@”)
v2 = Strright(itemValue, “@”)
If v2 = OLDDOMAIN Then
v2 = NEWDOMAIN
End If
itemValue = v1 + “@” + v2
End Forall
item.Values = itemValues
End Sub
Sub IterateMailfiles
Dim dbdir As NotesDbDirectory
Dim position As Integer
Set dbdir = New NotesDbDirectory(SERVER)
Set db = dbdir.GetFirstDatabase(DATABASE)
While Not db Is Nothing
If Instr(1, db.FilePath, MAILDIRECTORY, 5) Then
Call ProcessMailfile(db)
End If
Set db = dbdir.GetNextDatabase
Wend
End Sub