Método IADs::GetInfo (iads.h)
O método IADs::GetInfo é carregado nos valores de cache de propriedade das propriedades com suporte desse objeto ADSI do repositório de diretórios subjacente.
Sintaxe
HRESULT GetInfo();
Valor retornado
Esse método dá suporte aos valores retornados padrão, bem como aos seguintes.
Para obter mais informações, consulte Códigos de erro ADSI.
Comentários
A função IADs::GetInfo é chamada para inicializar ou atualizar o cache de propriedades. Isso é semelhante à obtenção desses valores de propriedade de propriedades com suporte do repositório de diretórios subjacente.
Um cache de propriedades não inicializado não está necessariamente vazio. Chame IADs::P ut ou IADs::P utEx para colocar um valor no cache de propriedades para qualquer propriedade com suporte e o cache permanece não inicializado.
Uma chamada explícita para IADs::GetInfo carrega ou recarrega todo o cache de propriedades, substituindo todos os valores de propriedade armazenados em cache. Mas uma chamada implícita carrega apenas as propriedades não definidas no cache. Sempre chame IADs::GetInfo explicitamente para recuperar os valores de propriedade mais atuais do objeto ADSI.
Como uma chamada explícita para IADs::GetInfo substitui todos os valores no cache de propriedades, qualquer alteração feita no cache será perdida se um IADs::SetInfo não tiver sido invocado antes de IADs::GetInfo.
Para um objeto de contêiner ADSI, IADs::GetInfo armazena em cache apenas os valores de propriedade do contêiner, mas não os dos objetos filho.
É importante enfatizar as diferenças entre os métodos IADs::Get e IADs::GetInfo . O primeiro retorna valores de uma determinada propriedade do cache de propriedades, enquanto o último carrega todos os valores de propriedade com suporte no cache de propriedades do repositório de diretórios subjacente.
O exemplo de código a seguir ilustra as diferenças entre os métodos 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'.
Para aumentar o desempenho, chame explicitamente IADs::GetInfoEx para atualizar propriedades específicas. Além disso, IADs::GetInfoEx deve ser chamado em vez de IADs::GetInfo se os valores de propriedade operacional do objeto tiverem que ser acessados. Essa função substitui todos os valores armazenados em cache anteriormente das propriedades especificadas.
Exemplos
O exemplo de código a seguir usa um objeto de computador atendido pelo provedor WinNT. As propriedades com suporte incluem Owner ("Owner"), OperatingSystem ("Windows NT"), OperatingSystemVersion ("4.0"), Division ("Fabrikam"), ProcessorCount ("Uniprococessor Free"), Processor ("x86 Family 6 Model 5 Stepping 1"). Os valores padrão são mostrados entre parênteses.
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
O exemplo de código a seguir é um script do lado do cliente que ilustra o efeito do método IADs::GetInfo . As propriedades com suporte incluem Owner ("Owner"), OperatingSystem ("Windows NT"), OperatingSystemVersion ("4.0"), Division ("Fabrikam"), ProcessorCount ("Uniprococessor Free"), Processor ("x86 Family 6 Model 5 Stepping 1"). Os valores padrão são mostrados entre parênteses.
<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>
O exemplo de código a seguir realça o efeito de Get e GetInfo. Para resumir, a verificação de erros é omitida.
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();
Requisitos
Cliente mínimo com suporte | Windows Vista |
Servidor mínimo com suporte | Windows Server 2008 |
Plataforma de Destino | Windows |
Cabeçalho | iads.h |
DLL | Activeds.dll |