Bagikan melalui


Menggunakan IDirectorySearch dan IDirectoryObject untuk Pengambilan Rentang

Antarmuka IDirectoryObject atau IDirectorySearch dapat digunakan untuk mengambil rentang nilai properti. Untuk melakukan ini, tentukan atribut dan rentang untuk salah satu atribut yang diminta dalam kueri.

Pengambilan Rentang dengan IDirectoryObject

Antarmuka IDirectoryObject dapat digunakan untuk pengambilan rentang dengan menentukan atribut dan rentang untuk salah satu atribut dalam array pAttributesName saat memanggil metode IDirectoryObject::GetObjectAttributes.

PADS_ATTR_INFO pAttrInfo;
DWORD dwRetrieved;
LPWSTR pszAttrs[2];
 
pszAttrs[0] = L"Name";
pszAttrs[1] = L"member;range=0-100";

hr = pdo->GetObjectAttributes(pszAttrs, 2, &pAttrInfo, &dwRetrieved);

Untuk informasi selengkapnya dan contoh kode yang menunjukkan cara menggunakan antarmuka IDirectoryObject untuk pengambilan rentang, lihat Contoh Kode untuk Mulai dengan IDirectoryObject.

Pengambilan Rentang dengan IDirectorySearch

Antarmuka IDirectorySearch dapat digunakan untuk pengambilan rentang dengan menentukan atribut dan rentang untuk salah satu atribut yang diambil dalam array pAttributesName saat memanggil metode IDirectorySearch::ExecuteSearch.

ADS_SEARCH_HANDLE hSearch;
LPWSTR pszAttrs[2];
 
pszAttrs[0] = L"Name";
pszAttrs[1] = L"member;range=0-100";

hr = pdo->ExecuteSearch(L"(objectClass=user)", pszAttrs, 2, &hSearch);

Saat menggunakan antarmuka IDirectorySearch untuk pengambilan rentang, ada satu masalah yang harus ditangani secara khusus. Ketika rentang yang diminta melebihi jumlah nilai yang tersisa, IDirectorySearch::GetColumn akan mengembalikan E_ADS_COLUMN_NOT_SET. Untuk mengambil nilai yang tersisa, anda perlu menggunakan wildcard rentang '*'. Misalnya, jika grup berisi 150 anggota, nilai anggota 0-100 dapat diambil secara normal menggunakan pengambilan berkisar. Jika rentang 101-200 diminta, IDirectorySearch::GetColumn akan mengembalikan E_ADS_COLUMN_NOT_SET. Masalah ini dapat dihindari dengan menggunakan metode IDirectorySearch::GetNextColumnName. Biasanya, GetNextColumnName akan mengembalikan string kueri asli. Namun, ketika rentang yang diminta melebihi jumlah nilai yang tersisa, GetNextColumnName akan mengembalikan versi string kueri yang dimodifikasi dengan mengganti nilai rentang tinggi dengan wildcard rentang '*'. Dalam contoh di atas, kueri pertama akan dilakukan dengan string atribut "anggota; range=0-100" dan GetNextColumnName akan mengembalikan "anggota; range=0-100". Di kueri kedua, string atribut akan menjadi "anggota; range=101-200", tetapi GetNextColumnName akan mengembalikan "anggota; range=101-*". Kasus ini dapat ditentukan dengan membandingkan string atribut asli dengan hasil GetNextColumnName. Jika string berbeda, blok terakhir nilai harus diminta lagi dengan wildcard rentang.

Untuk informasi selengkapnya dan contoh kode yang menunjukkan cara menggunakan antarmuka IDirectorySearch untuk pengambilan rentang, lihat Contoh Kode untuk Mulai dengan IDirectorySearch.