Compartir a través de


Optimización mediante GetInfoEx

El método IADs.GetInfoEx se usa para cargar valores de atributo específicos en la caché local desde el servicio de directorio subyacente. Este método solo carga los valores de atributo especificados en la memoria caché local. El método IADs.GetInfo se usa para cargar todos los valores de atributo en la caché local.

El método IADs.GetInfoEx obtiene valores actuales específicos para las propiedades de un objeto de Active Directory del almacén de directorios subyacente, actualizando los valores almacenados en caché.

Sin embargo, si ya existe un valor en la memoria caché de propiedades, al llamar al método IADs.Get o IADs.GetEx sin llamar primero a IADs.GetInfoEx para ese atributo recuperará el valor almacenado en caché en lugar del valor más actual del directorio subyacente. Esto puede hacer que se sobrescriban los valores de atributo actualizados si se ha modificado la caché local, pero los valores no se han confirmado en el servicio de directorio subyacente con una llamada al método IADs.SetInfo . El método sugerido para evitar problemas de almacenamiento en caché es confirmar siempre los cambios de valor de atributo llamando a IADs.SetInfo antes de llamar a 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

Recuperación de atributos construidos de Active Directory

En Active Directory, la mayoría de los atributos construidos se recuperan y almacenan en caché cuando se llama al método IADs.GetInfo (IADs.Get realiza una llamada a IADs.GetInfo implícita si la memoria caché está vacía). Sin embargo, algunos atributos construidos no se recuperan y almacenan en caché automáticamente y, por lo tanto, requieren que se llame explícitamente al método IADs.GetInfoEx para recuperarlos. Por ejemplo, en Active Directory, el atributo canonicalName no se recupera cuando se llama al método IADs.GetInfo y IADs.Get devolverá E_ADS_PROPERTY_NOT_FOUND. Se debe llamar al método IADs.GetInfoEx para recuperar el atributo canonicalName . Estos mismos atributos construidos tampoco se recuperarán mediante la interfaz IADsPropertyList para enumerar los atributos.

Para obtener más información y un ejemplo de código que muestra cómo recuperar todos los valores de atributo, vea Código de ejemplo para leer un atributo construido.