Превышен предел размера сервера LDAP ( MSAD ) с помощью ldaps_search

с использованием

call ldaps_search(handle,shandle,filter, attrs, num, rc);

с Microsoft Active Directory я получаю ПРЕДУПРЕЖДЕНИЕ: превышен лимит размера сервера LDAP.

есть ли способ как-то пролистать страницы в sas?

я пробовал ldaps_setOptions с sizeLimit = 2000, например, но все равно генерирует предупреждение, как я думаю, установлено на стороне Microsoft

Спасибо

образец:

more = 1;
do while (more eq 1);
call ldaps_search_page(handle, shandle, filter, attrs, num, rc, more, 1000);
  if rc ne 0 then do;
 more = 0;
 msg = sysmsg();
 put msg;
  end;
/* free search results page */
if shandle NE 0 then do;
call ldaps_free(shandle,rc);
end;
end;
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
502
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Невозможно управлять ограничением размера сервера LDAP со стороны клиента (см. AD MaxPageSize), но вы все равно можете обойти это с помощью элементы управления пейджингом.

Идея состоит в том, чтобы запросить постраничный результирующий набор с числом записей на странице меньше ограничения сервера MaxPageSize.

SAS предоставляет подпрограмму call ldaps_search_page, которая возвращает только одну страницу для заданного поискового запроса и требует последующих вызовов для получения всех результатов:

CALL LDAPS_SEARCH_PAGE(lHandle, sHandle, filter, attr, num, rc, more <, pageSize>);

pageSize (optional) specifies a positive integer value, which is the number of results on a page of output. By default, this value is set to 50. If pageSize is 0, this function acts as if paging is turned off. This argument is case-insensitive.

Например, если запрос соответствует результатам н (превышает ограничение на стороне сервера) и размер страницы установлен на 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 был в этой ситуации), на самом деле вам это не нужно, увеличивая счетчик пока количество извлеченных записей не достигнет число, должно сработать.

привет, попробовал с вашим предложением (добавлен пример кода к вопросу выше), но больше по-прежнему остается равным 1, поэтому никогда не выходит из цикла?

Dwayne Dibbley 30.05.2019 15:10

Ну .. он остается на 1, как навсегда? Это должно зависеть от num, например num/pageSize дает количество последующих вызовов для выполнения, пока more не станет равным 0 (его следует передавать как ссылку). Что говорят журналы? Вы проверили, что элементы управления пейджингом действительно работают (не полагаясь на SAS, см. Конфигурацию AD напрямую или ldapsearch с использованием параметра -E)?

EricLavault 30.05.2019 17:08

попробовал dsquery и paging, работающие нормально, только что прошел код в отладчике, в тестовом подразделении, которое, как я знаю, имеет 404 объекта, если я установлю ограничение на 100 и запущу, я увижу увеличение shandle и число, возвращающее 4 лота или 100 и один много или 4, но больше остается 1, то на 6-м он кажется перезагружается, и я получаю 4 100 и 1 4 снова навсегда. так что похоже, что пейджинг работает, но просто больше не обновляется до не 1? Спасибо

Dwayne Dibbley 31.05.2019 08:29

Да, это странно... если больше не обновляется, просто увеличивайте счетчик, пока количество извлеченных записей не достигнет число.

EricLavault 31.05.2019 08:33

coolio, я устанавливаю num на 1000 перед do, затем устанавливаю do, пока num = 1000, затем, когда окончательные результаты приходят в num <> 1000 больше, и выхожу из do :)

Dwayne Dibbley 31.05.2019 09:47

Другие вопросы по теме