IADs::GetInfo, méthode (iads.h)
La méthode IADs::GetInfo se charge dans les valeurs de cache de propriétés des propriétés prises en charge de cet objet ADSI à partir du magasin d’annuaires sous-jacent.
Syntaxe
HRESULT GetInfo();
Valeur de retour
Cette méthode prend en charge les valeurs de retour standard, ainsi que les éléments suivants.
Pour plus d’informations, consultez Codes d’erreur ADSI.
Notes
La fonction IADs::GetInfo est appelée pour initialiser ou actualiser le cache de propriétés. Cela est similaire à l’obtention des valeurs de propriété des propriétés prises en charge à partir du magasin d’annuaires sous-jacent.
Un cache de propriétés non initialisé n’est pas nécessairement vide. Appelez IADs::P ut ou IADs::P utEx pour placer une valeur dans le cache de propriétés pour toute propriété prise en charge et le cache reste non initialisé.
Un appel explicite à IADs::GetInfo charge ou recharge l’intégralité du cache de propriétés, en remplaçant toutes les valeurs de propriété mises en cache. Mais un appel implicite charge uniquement les propriétés non définies dans le cache. Appelez toujours IADs::GetInfo explicitement pour récupérer les valeurs de propriété les plus actuelles de l’objet ADSI.
Étant donné qu’un appel explicite à IADs::GetInfo remplace toutes les valeurs du cache de propriétés, toute modification apportée au cache sera perdue si un IADs::SetInfo n’a pas été appelé avant IADs::GetInfo.
Pour un objet conteneur ADSI, IADs::GetInfo met uniquement en cache les valeurs de propriété du conteneur, mais pas celles des objets enfants.
Il est important de souligner les différences entre les méthodes IADs::Get et IADs::GetInfo . Le premier retourne les valeurs d’une propriété donnée à partir du cache de propriétés tandis que le second charge toutes les valeurs de propriété prises en charge dans le cache de propriétés à partir du magasin de répertoires sous-jacent.
L’exemple de code suivant illustre les différences entre les méthodes IADs::Get et IADs::GetInfo .
Set x = GetObject("LDAP://CN=Administrator,CN=Users,DC=Fabrikam,DC=com")
' The first IADs::Get calls
' GetInfo implicitly.
Debug.Print x.Get("homePhone") ' Assume value is '999-9999'.
x.Put "homePhone", "868-4449" ' Put with no commit(SetInfo)
Debug.Print x.Get("homePhone") ' Value='868-4449' from the cache.
x.GetInfo ' Refresh the cache, get the data
' from the directory.
Debug.Print x.Get("homePhone") ' Value will be '999-9999'.
Pour améliorer les performances, appelez explicitement IADs::GetInfoEx pour actualiser des propriétés spécifiques. En outre, IADs::GetInfoEx doivent être appelés au lieu de IADs::GetInfo si les valeurs de propriété opérationnelles de l’objet doivent être consultées. Cette fonction remplace toutes les valeurs précédemment mises en cache des propriétés spécifiées.
Exemples
L’exemple de code suivant utilise un objet d’ordinateur pris en charge par le fournisseur WinNT. Les propriétés prises en charge incluent Owner (« Owner »), OperatingSystem (« Windows NT »), OperatingSystemVersion (« 4.0 »), Division (« Fabrikam »), ProcessorCount (« Uniprococessor Free »), Processor Processor (« x86 Family 6 Model 5 Stepping 1 »). Les valeurs par défaut sont indiquées entre parenthèses.
Dim pList As IADsPropertyList
Dim pEntry As IADsPropertyEntry
Dim pValue As IADsPropertyValue
On Error GoTo Cleanup
Set pList = GetObject("WinNT://localhost,computer")
' pList now represents an uninitialized empty property cache.
pList.Put "Owner", "JeffSmith" ' Property cache remains uninitialized,
' but with one property value.
count = pList.PropertyCount ' count = 1.
MsgBox "Number of property found in the property cache: " & count
v = pList.Get("Division") ' pList.GetInfo is called implicitly
ShowPropertyCache ' This will display "JeffSmith" for Owner,
' "Fabrikam" for Division, "Windows NT" for
' OperatingSystem, and so on.
pList.GetInfo ' Refreshes the entire cache, overwriting
' "JeffSmith" for the Owner property.
ShowPropertyCache ' This will display "Owner" for Owner,
' "Fabrikam" for Division, "Windows NT" for
' OperatingSystem, and so on.
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set pList = Nothing
Set pEntry = Nothing
Set pValue = Nothing
Private Sub ShowPropertyCache()
For I = 0 To pList.PropertyCount-1
Set pEntry = pList.Item(I)
Debug.Print pEntry.Name
For Each v In pEntry.Values
Set pValue = v
Debug.Print " " & pvalue.CaseIgnoreString
Next
Next
End Sub
L’exemple de code suivant est un script côté client qui illustre l’effet de la méthode IADs::GetInfo . Les propriétés prises en charge incluent Owner (« Owner »), OperatingSystem (« Windows NT »), OperatingSystemVersion (« 4.0 »), Division (« Fabrikam »), ProcessorCount (« Uniprococessor Free »), Processor Processor (« x86 Family 6 Model 5 Stepping 1 »). Les valeurs par défaut sont indiquées entre parenthèses.
<html>
<body>
<table>
<tr>
<td>Owner:</td>
<td><input type=text name=txtOwner></td>
</tr>
<tr>
<td>Operating System:</td>
<td><input type=text name=txtOS></td>
</tr>
<tr>
<td>Operating System Version:</td>
<td><input type=text name=txtOSV></td>
</tr>
<tr>
<td>Division:</td>
<td><input type=text name=txtDiv></td>
</tr>
</table>
<input type=button onClick = "showGetInfo()">
</body>
<script language="vbscript">
Dim pList
sub showGetInfo()
Set oFac = CreateObject("ADsFactory")
path = "WinNT://Fabrikam"
ADS_SECURE_AUTH = 1
On Error Resume Next
' Browser security requires enabled/Prompt for "Initialize and
' script ActiveX Controls not marked as safe"
Set pList=oFac.OpenDSObject(path,vbNullString,vbNullString,ADS_SECURE_AUTH)
' pList now represents an uninitialized empty property cache
pList.Put "Owner" "JeffSmith" ' Property cache remain uninitialized
' but with one property value.
v = pList.Get("Division") ' pList.GetInfo is called implicitly
ShowPropertyCache ' This will display "JeffSmith" for Owner,
' "Fabrikam" for Division, "Windows NT"
' for OperatingSystem, and so on.
pList.GetInfo ' Refreshes entire cache, overwriting
' "JeffSmith" for the Owner property.
ShowPropertyCache ' This will display "Owner" for Owner,
' "Fabrikam" for Division, "Windows NT"
' for OperatingSystem, and so on.
end sub
sub ShowPropertyCache()
txtOwner.value = pList.Get("Owner")
txtDiv.value = pList.Get("Division")
txtOS.Value = pList.Get("OperatingSystem")
txtOSV.value = pList.Get("OperatingSystemVersion")
end sub
</script>
</html>
L’exemple de code suivant met en évidence l’effet de Get et GetInfo. Par souci de concision, la vérification des erreurs est omise.
IADs *pADs;
IADsPropertyList *pList;
BSTR bstr;
VARIANT var;
HRESULT hr;
hr = ADsGetObject(L"WinNT://somecomputer,computer",
IID_IADsPropertyList,
(void**)&pList);
if(!(hr==S_OK)){return hr;}
VariantInit(&var);
// Get the number of property entries, should be zero.
long pCount;
hr = pList->get_PropertyCount(&pCount);
printf(" prop count = %d\n",pCount); // 0 for empty cache.
hr = pList->QueryInterface(IID_IADs, (void**)&pADs);
// Set "Owner=JeffSmith" in the property cache.
V_BSTR(&var) = SysAllocString(L"JeffSmith");
V_VT(&var) = VT_BSTR;
hr = pADs->Put(CComBSTR("Owner"), var);
VariantClear(&var);
// This time the number of property entries should read one (1).
hr = pList->get_PropertyCount(&pCount);
printf(" prop count = %d\n",pCount); // 1 for what was set.
// The following Get invokes GetInfo implicitly, but
// the cache (that is, "Owner=JeffSmith") remains intact.
hr = pADs->Get(CComBSTR("Division"), &var);
printf(" division = %S\n", V_BSTR(&var));
VariantClear(&var);
hr = pADs->Get(CComBSTR("Owner"), &var);
printf(" owner = %S\n", V_BSTR(&var)); // Owner = JeffSmith
VariantClear(&var);
// The following GetInfo call refreshes the entire prop cache.
// Now Owner is no longer "JeffSmith", but the value stored in the
// persistent store, for example, "BenSmith".
hr = pADs->GetInfo();
hr = pADs->Get(CComBSTR("Owner"), &var);
printf(" owner = %S\n", V_BSTR(&var)); // Owner = BenSmith
VariantClear(&var);
// ...
if(pADs)
pADs->Release();
if(pList)
pList->Release();
Configuration requise
Client minimal pris en charge | Windows Vista |
Serveur minimal pris en charge | Windows Server 2008 |
Plateforme cible | Windows |
En-tête | iads.h |
DLL | Activeds.dll |