Utilisation d’IDirectorySearch et IDirectoryObject pour la récupération de plages
Les interfaces IDirectoryObject ou IDirectorySearch peuvent être utilisées pour récupérer une plage de valeurs de propriété. Pour ce faire, spécifiez l’attribut et la plage pour l’un des attributs demandés dans la requête.
Récupération de plage avec IDirectoryObject
L’interface IDirectoryObject peut être utilisée pour la récupération de plage en spécifiant l’attribut et la plage de l’un des attributs du tableau pAttributesName lors de l’appel de la méthode 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);
Pour plus d’informations et un exemple de code qui montre comment utiliser l’interface IDirectoryObject pour la récupération de plage, consultez Exemple de code pour la mise à niveau avec IDirectoryObject.
Récupération de plage avec IDirectorySearch
L’interface IDirectorySearch peut être utilisée pour la récupération de plage en spécifiant l’attribut et la plage de l’un des attributs récupérés dans le tableau pAttributesName lors de l’appel de la méthode 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);
Lors de l’utilisation de l’interface IDirectorySearch pour la récupération de plage, il existe un problème qui doit être spécifiquement résolu. Lorsque la plage demandée dépasse le nombre de valeurs restantes, IDirectorySearch::GetColumn retourne E_ADS_COLUMN_NOT_SET. Pour récupérer les valeurs restantes, il est nécessaire d’utiliser le caractère générique de plage « * ». Par exemple, si un groupe contient 150 membres, les valeurs de membre comprises entre 0 et 100 peuvent être récupérées normalement à l’aide de la récupération par plage. Si la plage 101-200 est alors demandée, IDirectorySearch::GetColumn retourne E_ADS_COLUMN_NOT_SET. Ce problème peut être évité à l’aide de la méthode IDirectorySearch::GetNextColumnName . Normalement, GetNextColumnName retourne la chaîne de requête d’origine. Toutefois, lorsque la plage demandée dépasse le nombre de valeurs restantes, GetNextColumnName retourne une version modifiée de la chaîne de requête en remplaçant la valeur de plage élevée par le caractère générique « * ». Dans l’exemple ci-dessus, la première requête est effectuée avec une chaîne d’attribut « member;range=0-100 » et GetNextColumnName retourne « member;range=0-100 ». Dans la deuxième requête, la chaîne d’attribut est « member;range=101-200 », mais GetNextColumnName retourne « member;range=101-* ». Ce cas peut être déterminé en comparant la chaîne d’attribut d’origine au résultat de GetNextColumnName. Si les chaînes sont différentes, le dernier bloc de valeurs doit être demandé à nouveau avec le caractère générique de plage.
Pour plus d’informations et un exemple de code qui montre comment utiliser l’interface IDirectorySearch pour la récupération de plage, consultez Exemple de code pour la mise à niveau avec IDirectorySearch.