Creating an Offline Address Book
Creating an Offline Address Book
This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.
The following example creates an offline address book (OAB). This example uses a function for Getting the Value of a Specific Property On an Object, Getting the Byte Value of a String, and Getting a Windows GUID.
Visual Basic
'////////////////////////////////////////////////////////////////////// ' Function: createOfflineAddressBook() ' Purpose: Creates an Offline Address Book. ' ' Input: szDomainName: Domain of the Exchange org ' szOrganizationName: Name of Exchange org ' szAddressName: Name of address book ' szDomain: Domain suffix ' szUserName: admin username ' szUserPwd: admin pwd ' szDirectoryServer: Name of the Directory Server ' szAdminGroup: Name of the Admin Group ' ' Output: createOfflineAddressBook: Contains Error code (if any) ' ' Note: In order for this example to function correctly, it may be necessary to include ' references to the following libraries: Active DS Type Library, Microsoft CDO for ' Exchange Management Library, Microsoft Cluster Service Automation Classes, ' Microsoft CDO for Windows 2000 Library. '////////////////////////////////////////////////////////////////////// Public Function createOfflineAddressBook(ByVal szDomainName As String, _ ByVal szOrganizationName As String, _ ByVal szAddressName As String, _ ByVal szDomain As String, _ ByVal szUserName As String, _ ByVal szUserPwd As String, _ ByVal szDirectoryServer, _ ByVal szAdminGroup) As Integer Dim objLdap As IADsOpenDSObject Dim objOAB As IADs Dim objOABContainer As IADsContainer Dim szLdapDomain As String Dim szConnString As String Dim szSiteFolderServer As String Dim szAddressBookLocation As String Dim baSchedule(83) As Byte Dim szaOfflineABSServer() As String Dim szOfflineABServer As String Dim iIndex As Integer Dim baGuidArray(15) As Byte Dim szaDomTokens() As String Dim szDomainDN As String Dim iIndex As Integer Dim iCounter As Integer Dim szChar As String Dim bConv As Byte Dim szGuid As String On Error GoTo errhandler ' Puts the domain specified into an ldap domain string. szaDomTokens = Split(szDomainName, ".", -1, 1) szDomainDN = Join(szaDomTokens, ",dc=") szDomainDN = "dc=" & szDomainDN szLdapDomain = szDomainDN ' Fill in byte array, this is expensive but it's only called once per ' hosted org creation. For iIndex = LBound(baSchedule) To UBound(baSchedule) Select Case iIndex Case 6 baSchedule(iIndex) = 8 Case 18 baSchedule(iIndex) = 8 Case 30 baSchedule(iIndex) = 8 Case 42 baSchedule(iIndex) = 8 Case 54 baSchedule(iIndex) = 8 Case 66 baSchedule(iIndex) = 8 Case 78 baSchedule(iIndex) = 8 Case Else baSchedule(iIndex) = 0 End Select Next ' Location of address book. szAddressBookLocation = "cn=" + szAddressName + _ ",cn=All Global Address Lists,cn=Address Lists Container,cn=" + _ szOrganizationName + ",cn=microsoft exchange,cn=services,cn=configuration," + _ szLdapDomain ' Get the site server string. szConnString = "LDAP://" + szDirectoryServer + "/" + _ "cn=" + szAdminGroup + ",cn=Administrative Groups,cn=" + _ szOrganizationName + ",cn=Microsoft Exchange,CN=Services,CN=Configuration," + _ szLdapDomain ' On the Admin group object, get the site folder server value. getValue szConnString, "siteFolderServer", szSiteFolderServer, szUserName, szUserPwd ' The offlineABServer is the sitefolderserver minus the first four entries, ' so when putting the szOfflineABSServer string together, start indexing at 4. szaOfflineABSServer = Split(szSiteFolderServer, "cn=", -1, 1) szOfflineABServer = "" For iIndex = 4 To UBound(szaOfflineABSServer) szOfflineABServer = szOfflineABServer + "cn=" + szaOfflineABSServer(iIndex) Next ' Open up the directory with the passed credentials (preferably the admin). ' Create a connection string for the offline address book. szConnString = "LDAP://" + szDirectoryServer + "/" + _ "CN=Offline Address Lists,CN=Address Lists Container,CN=" + _ szOrganizationName + ",CN=Microsoft Exchange,CN=Services,CN=Configuration," + _ szLdapDomain Set objLdap = GetObject("LDAP:") ' Create object and get FID. Set objOABContainer = objLdap.OpenDSObject(szConnString, _ szUserName, _ szUserPwd, _ ADS_SECURE_AUTHENTICATION) ' Create the recipient policy object. Set objOAB = objOABContainer.Create("msExchOAB", _ "cn=" + szAddressName) ' Set required properties. ' Take the string guid and get the guid as a hex byte array. szGuid = GetGUID iIndex = 0 For iCounter = 1 To Len(szGuid) Step 2 ' Get the current character. szChar = Mid(szGUID, iCounter, 2) ' Convert the character to it's hex value. bConv = getByteValue(szChar) ' Stick that hex value into the byte array. baGuidArray(iIndex) = bConv iIndex = iIndex + 1 Next With objOAB .Put "name", szAddressName .Put "showInAdvancedViewOnly", True .Put "systemFlags", 1610612736 .Put "doOABVersion", 0 .Put "msExchOABFolder", 0 .Put "offLineABContainers", szAddressBookLocation .Put "offLineABSchedule", baSchedule .Put "offLineABServer", szOfflineABServer .Put "offLineABStyle", 1 .Put "siteFolderGUID", baGuidArray .Put "siteFolderServer", szSiteFolderServer .Put "legacyExchangeDN", "/o=" + szOrganizationName + "/cn=addrlists/cn=oabs/cn=" + szAddressName .SetInfo End With createOfflineAddressBook = 0 ' Clean up. Set objLdap = Nothing Set objOAB = Nothing Set objOABContainer = Nothing Exit Function ' Error handling. errhandler: Set objLdap = Nothing Set objOAB = Nothing Set objOABContainer = Nothing createOfflineAddressBook = 1 ' Implement error logging here. Exit Function End Function
Send us your feedback about the Microsoft Exchange Server 2003 SDK.
Build: June 2007 (2007.618.1)
© 2003-2006 Microsoft Corporation. All rights reserved. Terms of use.