Невозможно управлять sizelimit сервера LDAP со стороны клиента (см. AD MaxPageSize
), но да, вы все равно можете обойти это с помощью элементов управления подкачкой .
Идея состоит в том, чтобы запросить постраничный набор результатов с количеством записей на странице меньше, чем ограничение MaxPageSize сервера.
SAS предоставляет подпрограмму call ldaps_search_page
, которая возвращает только одну страницу для данного поискового запроса и требует последующих вызовов для получения полных результатов:
CALL LDAPS_SEARCH_PAGE(lHandle, sHandle, filter, attr, num, rc, more <, pageSize>);
pageSize (необязательно) указывает положительное целочисленное значение, которое представляет собой число результатов на странице вывода.По умолчанию это значение установлено равным 50. Если pageSize равен 0, эта функция действует так, как если бы подкачка была отключена.Этот аргумент нечувствителен к регистру.
Например, если запрос соответствует n результатам (превышающим ограничение на стороне сервера), а размер страницы установлен на 50, вам нужно составитьна ceil(n/50)
звонки.
Вот пример, взятый из документа, он использует аргумент more
в цикле для продолжения извлечения постраничных результатов, пока больше нет информации для извлечения:
more = 1;
do while (more eq 1);
call ldaps_search_page(handle, shandle, filter, attrs, num, rc, more, 50);
...
/* free search results page */
if shandle NE 0 then do;
call ldaps_free(shandle,rc);
end;
end;
https://documentation.sas.com/api/docsets/itechdsref/9.4/content/itechdsref.pdf
Для тех, у кого проблемы с more
, застрявшими на 1, что приводит к тому, что код выше зацикливается навсегда (я не знаю, почему ссылка не будет обновлена, ноOP был в этой ситуации), на самом деле он вам не нужен, увеличение счетчика до тех пор, пока число извлеченных записей не достигнет num , должно сработать.