Метод IADsPropertyList::ResetPropertyItem (iads.h)
Метод IADsPropertyList::ResetPropertyItem удаляет указанный элемент из списка; то есть из кэша. Можно указать удаляемый элемент по имени (в виде строки) или по индексу (в виде целого числа).
Синтаксис
HRESULT ResetPropertyItem(
[in] VARIANT varEntry
);
Параметры
[in] varEntry
Запись для сброса.
Возвращаемое значение
Этот метод поддерживает стандартные возвращаемые значения HRESULT , включая S_OK. Дополнительные сведения и другие возвращаемые значения см. в разделе Коды ошибок ADSI.
Комментарии
ResetPropertyItem влияет только на содержимое кэша и не влияет на свойства фактического объекта в каталоге; Метод , вызывающий SetInfo после вызова ResetPropertyItem , не удаляет свойства объекта каталога.
Примеры
В следующем примере кода показано, как реализовать ResetPropertyItem.
Dim propList As IADsPropertyList
On Error GoTo Cleanup
Set propList = GetObject("LDAP://DC=Fabrikam,DC=com")
'--- Now modify the cache using PutPropertyItem
Set propVal = New PropertyValue
'--- Property Value-----
propVal.CaseIgnoreString = "Fabrikam"
propVal.ADsType = ADSTYPE_CASE_IGNORE_STRING
'--- Property Entry ----
Set propEntry = New PropertyEntry
propEntry.Name = "adminDescription"
propEntry.Values = Array(propVal)
propEntry.ControlCode = ADS_PROPERTY_UPDATE
propEntry.ADsType = ADS_CASE_IGNORE_STRING
' --- Property List----
propList.PutPropertyItem (propEntry)
' Commit to the directory. Without this, the changes take place only in the cache.
propList.SetInfo
propList.GetInfo
Debug.Print " Number of Properties = " & propList.PropertyCount
propList.ResetPropertyItem "adminDescription"
' the property count should have been reduced by one.
Debug.Print "Number of properties = " & propList.PropertyCount
Cleanup:
If (Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set propList = Nothing
Set propVal = Nothing
Set propEntry = Nothing
В следующем примере кода показан эффект, полученный при вызове IADsPropertyList::ResetPropertyItem. Дополнительные сведения и описание функции GetPropertyCache см. в разделе IADsPropertyList. Дополнительные сведения и список функций GetNextEntry и PropertyItem см. в разделах IADsPropertyList::Next и IADsPropertyList::Item соответственно.
IADsPropertyList *GetPropertyCache(LPWSTR);
IADsPropertyEntry *GetNextEntry(IADsPropertyList *);
IADsPropertyEntry *PropertyItem(IADsPropertyList *,LPWSTR);
void ResetItem(IADsPropertyList *pList, LPWSTR item)
{
VARIANT var;
VariantInit(&var);
if(!pList)
{
item = NULL;
return;
}
V_BSTR(&var)=SysAllocString(item);
V_VT(&var)=VT_BSTR;
pList->ResetPropertyItem(var);
VariantClear(&var);
}
void TestResetItem()
{
IADsPropertyEntry *pEntry = NULL;
IADsPropertyList *pList = NULL;
long count;
BSTR bstr;
HRESULT hr;
pList = GetPropertyCache(L"WinNT://myComputer,computer");
hr = pList->get_PropertyCount(&count);
if(SUCCEEDED(hr))
{
printf(" Count before item reset : %d\n",count);
}
printf("Walking up the property list before item reset: \n");
for (int i=0; i<count; i++)
{
pEntry = GetNextEntry(pList);
hr = pEntry->get_Name(&bstr);
if(SUCCEEDED(hr))
{
printf(" Name : %S\n",bstr);
SysFreeString(bstr);
}
}
pList->Reset(); // Move the cursor to the beginning of the list.
ResetItem(pList, L"Owner");
hr = pList->get_PropertyCount(&count);
if(SUCCEEDED(hr))
{
printf(" Count after item reset : %d\n",count);
}
printf("Walking up the property list after item reset: \n");
for (i=0; i<count; i++)
{
pEntry = GetNextEntry(pList);
hr = pEntry->get_Name(&bstr);
if(SUCCEEDED(hr))
{
printf(" Name : %S\n",bstr);
SysFreeString(bstr);
}
}
pEntry->Release();
pList->Release();
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista |
Минимальная версия сервера | Windows Server 2008 |
Целевая платформа | Windows |
Header | iads.h |
DLL | Activeds.dll |