ldaps_search 超出了 LDAP 服务器大小限制 (MSAD)

问题描述 投票:0回答:1

使用

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;
sas ldap
1个回答
1
投票

无法从客户端控制 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 应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.