Condividi tramite


Metodo IADs::GetInfo (iads.h)

Il metodo IADs::GetInfo carica nei valori della cache delle proprietà supportate di questo oggetto ADSI dall'archivio directory sottostante.

Sintassi

HRESULT GetInfo();

Valore restituito

Questo metodo supporta i valori restituiti standard, nonché i seguenti.

Per altre informazioni, vedere Codici di errore ADSI.

Commenti

La funzione IADs::GetInfo viene chiamata per inizializzare o aggiornare la cache delle proprietà. È simile a ottenere tali valori di proprietà di proprietà supportate dall'archivio directory sottostante.

Una cache delle proprietà non inizializzata non è necessariamente vuota. Chiamare IADs::P ut o IADs::P utEx per inserire un valore nella cache delle proprietà per qualsiasi proprietà supportata e la cache rimane non inizializzata.

Una chiamata esplicita a IADs::GetInfo carica o ricarica l'intera cache delle proprietà, sovrascrivendo tutti i valori delle proprietà memorizzati nella cache. Ma una chiamata implicita carica solo queste proprietà non impostate nella cache. Chiamare sempre IADs::GetInfo in modo esplicito per recuperare i valori di proprietà più correnti dell'oggetto ADSI.

Poiché una chiamata esplicita a IADs::GetInfo sovrascrive tutti i valori nella cache delle proprietà, qualsiasi modifica apportata alla cache verrà persa se un ID::SetInfo non è stato richiamato prima di IADs::GetInfo.

Per un oggetto contenitore ADSI, IADs::GetInfo memorizza nella cache solo i valori delle proprietà del contenitore, ma non quelli degli oggetti figlio.

È importante sottolineare le differenze tra i metodi IADs::Get e IADs::GetInfo. Il precedente restituisce i valori di una determinata proprietà dalla cache delle proprietà, mentre quest'ultima carica tutti i valori delle proprietà supportati nella cache delle proprietà dall'archivio directory sottostante.

Nell'esempio di codice seguente vengono illustrate le differenze tra i metodi IADs::Get e 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'.

Per aumentare le prestazioni, chiamare in modo esplicito IADs::GetInfoEx per aggiornare proprietà specifiche. Inoltre, IADs::GetInfoEx deve essere chiamato anziché IADs::GetInfo se è necessario accedere ai valori delle proprietà operative dell'oggetto. Questa funzione sovrascrive i valori memorizzati nella cache precedentemente delle proprietà specificate.

Esempio

Nell'esempio di codice seguente viene usato un oggetto computer servito dal provider WinNT. Le proprietà supportate includono Owner ("Owner"), OperatingSystem ("Windows NT"), OperatingSystemVersion ("4.0"), Division ("Fabrikam"), ProcessorCount ("Uniprococessor Free"), Processor ("x86 Family 6 Model 5 Stepping 1"). I valori predefiniti vengono visualizzati tra parentesi.

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'esempio di codice seguente è uno script lato client che illustra l'effetto del metodo IADs::GetInfo . Le proprietà supportate includono Owner ("Owner"), OperatingSystem ("Windows NT"), OperatingSystemVersion ("4.0"), Division ("Fabrikam"), ProcessorCount ("Uniprococessor Free"), Processor ("x86 Family 6 Model 5 Stepping 1"). I valori predefiniti vengono visualizzati tra parentesi.

<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>

Nell'esempio di codice seguente viene evidenziato l'effetto di Get e GetInfo. Per brevità, il controllo degli errori viene omesso.

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();

Requisiti

   
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione iads.h
DLL Activeds.dll

Vedi anche

ID

ID::Get

ID::GetEx

ID::GetInfoEx

Cache delle proprietà