Partager via


Optimisation à l’aide de GetInfoEx

La méthode IADs.GetInfoEx est utilisée pour charger des valeurs d’attribut spécifiques dans le cache local à partir du service d’annuaire sous-jacent. Cette méthode charge uniquement les valeurs d’attribut spécifiées dans le cache local. La méthode IADs.GetInfo est utilisée pour charger toutes les valeurs d’attribut dans le cache local.

La méthode IADs.GetInfoEx obtient des valeurs actuelles spécifiques pour les propriétés d’un objet Active Directory à partir du magasin d’annuaires sous-jacent, en actualisant les valeurs mises en cache.

Si une valeur existe déjà dans le cache de propriétés, toutefois, l’appel de la méthode IADs.Get ou IADs.GetEx sans appeler d’abord IADs.GetInfoEx pour cet attribut récupère la valeur mise en cache plutôt que la valeur la plus actuelle du répertoire sous-jacent. Cela peut entraîner le remplacement des valeurs d’attribut mises à jour si le cache local a été modifié, mais les valeurs n’ont pas été validées sur le service d’annuaire sous-jacent avec un appel à la méthode IADs.SetInfo . La méthode suggérée pour éviter les problèmes de mise en cache consiste à toujours valider les modifications de valeur d’attribut en appelant IADs.SetInfo avant d’appeler 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

Récupération des attributs construits Active Directory

Dans Active Directory, la plupart des attributs construits sont récupérés et mis en cache lorsque la méthode IADs.GetInfo est appelée (IADs.Get effectue un appel IADs.GetInfo implicite si le cache est vide). Certains attributs construits, toutefois, ne sont pas récupérés et mis en cache automatiquement et, par conséquent, nécessitent que la méthode IADs.GetInfoEx soit appelée explicitement pour les récupérer. Par exemple, dans Active Directory, l’attribut canonicalName n’est pas récupéré lorsque la méthode IADs.GetInfo est appelée et QUE IADs.Get retourne E_ADS_PROPERTY_NOT_FOUND. La méthode IADs.GetInfoEx doit être appelée pour récupérer l’attribut canonicalName . Ces mêmes attributs construits ne seront pas non plus récupérés à l’aide de l’interface IADsPropertyList pour énumérer les attributs.

Pour plus d’informations et un exemple de code qui montre comment récupérer toutes les valeurs d’attribut, consultez Exemple de code pour la lecture d’un attribut construit.