Поделиться через


Оптимизация с помощью GetInfoEx

Метод IADs.GetInfoEx используется для загрузки определенных значений атрибутов в локальный кэш из базовой службы каталогов. Этот метод загружает только указанные значения атрибутов в локальный кэш. Метод IADs.GetInfo используется для загрузки всех значений атрибутов в локальный кэш.

Метод IADs.GetInfoEx получает определенные текущие значения свойств объекта Active Directory из базового хранилища каталогов, обновляя кэшированные значения.

Если значение уже существует в кэше свойств, однако вызов метода IADs.Get или IADs.GetEx без первого вызова IADs.GetInfoEx для этого атрибута извлекает кэшированное значение, а не самое текущее значение из базового каталога. Это может привести к перезаписи обновленных значений атрибутов, если локальный кэш был изменен, но значения не были зафиксированы в базовой службе каталогов с вызовом метода IADs.SetInfo . Предлагаемый метод предотвращения проблем кэширования заключается в том, чтобы всегда фиксировать изменения значения атрибута путем вызова IADs.SetInfo перед вызовом IADs.GetInfo.

Dim usr As IADs
Dim PropArray As Variant

On Error GoTo Cleanup

' Bind to a specific user object.
Set usr = GetObject("LDAP://CN=Jeff Smith,CN=Users,DC=fabrikam,DC=com")
 
' The code example assumes that the property description has a single value in the directory.
' Be aware that this will implicitly call GetInfo because, at this point, GetInfo
' has not yet been called (implicitly or explicitly) on the usr object.
Debug.Print "User's common name is " + usr.Get("cn")
Debug.Print "User's title is " + usr.Get("title")
Debug.Print "User's department is " + usr.Get("department")

' Change two of the attribute values in the local cache.
usr.Put "cn", "Jeff Smith"
usr.Put "title", "Vice President"
usr.Put "department", "Head Office"
Debug.Print "User's common name is " + usr.Get("cn")
Debug.Print "User's title is " + usr.Get("title")
Debug.Print "User's department is " + usr.Get("department")

' Initialize the array of properties to pass to GetInfoEx.
PropArray = Array("department", "title")
 
' Get the specified attribute values.
usr.GetInfoEx PropArray, 0

' The specific attributes values were overwritten, but the attribute
' value not retrieved has not changed.
Debug.Print "User's common name is " + usr.Get("cn")
Debug.Print "User's title is " + usr.Get("title")
Debug.Print "User's department is " + usr.Get("department")

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set usr = Nothing

Получение созданных атрибутов Active Directory

В Active Directory большинство созданных атрибутов извлекаются и кэшируются при вызове метода IADs.GetInfo (IADs.Get выполняет неявный вызов IADs.GetInfo, если кэш пуст). Однако некоторые созданные атрибуты не извлекаются и кэшируются автоматически, поэтому требуется, чтобы метод IADs.GetInfoEx был вызван явным образом для их извлечения. Например, в Active Directory атрибут канонического имени не извлекается при вызове метода IADs.GetInfo и IADs.Get возвращает E_ADS_PROPERTY_NOT_FOUND. Метод IADs.GetInfoEx должен вызываться для получения атрибута каноническогоname . Эти же созданные атрибуты также не будут извлекаться с помощью интерфейса IADsPropertyList для перечисления атрибутов.

Дополнительные сведения и пример кода, демонстрирующий получение всех значений атрибутов, см. в примере кода для чтения созданного атрибута.