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