Condividi tramite


Ordinamento dei risultati della ricerca con IDirectorySearch

Per impostazione predefinita, i risultati di una ricerca vengono restituiti in nessun ordine garantito. La preferenza ADS_edizione StandardARCHPREF_SORT_ON indica al server di ordinare il set di risultati in base a un valore di attributo specificato prima che venga restituito al client.

È consigliabile usare gli attributi indicizzati per l'ordinamento. In caso contrario, il server deve recuperare il set di risultati completo e ordinarlo prima di inviare i risultati al client. Questo vale anche per le ricerche con paging. Tenere presente che le prestazioni di una ricerca ordinata verranno aumentate se il filtro include un attributo indicizzato e tale attributo viene specificato come chiave di ordinamento; In questo caso, Active Directory può soddisfare l'ordinamento durante l'elaborazione del filtro. Ad esempio, una query di ordinamento efficiente per un set di utenti potrebbe avere un filtro che include (sn>smith) e una chiave di ordinamento sn.

L'ordinamento lato server con l'opzione di ricerca ADS_edizione StandardARCHPREF_SORT_ON ridurrà le prestazioni del server. Se si eseguono molte ricerche, è consigliabile ordinare manualmente i risultati sul lato client per ridurre il carico di lavoro nel server.

Per impostazione predefinita, l'ordinamento dei risultati è disabilitato. Per abilitare l'ordinamento dei risultati, impostare un'opzione di ricerca ADS_edizione StandardARCHPREF_SORT_ON con un ADSTYPE_PROV_SPECIFIC che punta a una struttura ADS_SORTKEY nella matrice ADS_edizione StandardARCHPREF_INFO passata al metodo IDirectorySearch::SetSearchPreference. La struttura ADS_SORTKEY viene utilizzata per specificare l'attributo per l'ordinamento e l'ordinamento.

Nell'esempio di codice seguente viene illustrato come abilitare l'ordinamento dei risultati.

ADS_SORTKEY SortKey;
SortKey.pszAttrType = L"cn";
SortKey.pszReserved = NULL;
SortKey.fReverseorder = FALSE;

ADS_SEARCHPREF_INFO SearchPref;
SearchPref.dwSearchPref = ADS_SEARCHPREF_SORT_ON;
SearchPref.vValue.dwType = ADSTYPE_PROV_SPECIFIC;
SearchPref.vValue.ProviderSpecific.dwLength = sizeof(SortKey);
SearchPref.vValue.ProviderSpecific.lpValue = (LPBYTE)&SortKey;

Active Directory non supporta l'ordinamento in base agli attributi costruiti, pertanto non è possibile specificare un attributo costruito per l'ordinamento. Non è inoltre possibile utilizzare l'attributo distinguishedName per l'ordinamento. Active Directory non consente anche l'ordinamento in base a più attributi, pertanto l'opzione di ricerca ADS_edizione StandardARCHPREF_SORT_ON può contenere solo una struttura ADS_SORTKEY.