Compartilhar via


Otimização usando GetInfoEx

O método IADs.GetInfoEx é usado para carregar valores de atributo específicos no cache local do serviço de diretório subjacente. Esse método carrega apenas os valores de atributo especificados no cache local. O método IADs.GetInfo é usado para carregar todos os valores de atributo no cache local.

O método IADs.GetInfoEx obtém valores atuais específicos para as propriedades de um objeto do Active Directory do repositório de diretório subjacente, atualizando os valores armazenados em cache.

No entanto, se já existir um valor no cache de propriedades, chamar o método IADs.Get ou IADs.GetEx sem primeiro chamar IADs.GetInfoEx para esse atributo recuperará o valor armazenado em cache em vez do valor mais atual do diretório subjacente. Isso pode fazer com que os valores de atributo atualizados sejam substituídos se o cache local tiver sido modificado, mas os valores não tiverem sido confirmados no serviço de diretório subjacente com uma chamada para o método IADs.SetInfo. O método sugerido para evitar problemas de cache é sempre confirmar alterações de valor de atributo chamando IADs.SetInfo antes de chamar 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

Recuperando atributos construídos do Active Directory

No Active Directory, a maioria dos atributos construídos é recuperada e armazenada em cache quando o método IADs.GetInfo é chamado (IADs.Get executa uma chamada implícita de IADs.GetInfo se o cache estiver vazio). Alguns atributos construídos, no entanto, não são automaticamente recuperados e armazenados em cache e, portanto, exigem que o método IADs.GetInfoEx seja chamado explicitamente para recuperá-los. Por exemplo, no Active Directory, o atributo canonicalName não é recuperado quando o método IADs.GetInfo é chamado e IADs.Get retornará E_ADS_PROPERTY_NOT_FOUND. O método IADs.GetInfoEx deve ser chamado para recuperar o atributo canonicalName . Esses mesmos atributos construídos também não serão recuperados usando a interface IADsPropertyList para enumerar os atributos.

Para obter mais informações e um exemplo de código que mostra como recuperar todos os valores de atributo, consulte Código de exemplo para leitura de um atributo construído.