使用
call ldaps_search(handle,shandle,filter, attrs, num, rc);
使用Microsoft Active Directory我得到警告:超出了LDAP服务器的大小限制。
是否可以在sas中以某种方式翻页?
例如,我尝试使用sizeLimit = 2000的ldaps_setOptions
,但仍会生成警告,因为我猜是在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;
答案 0 :(得分:1)
无法从客户端控制LDAP服务器的大小限制(请参见AD的MaxPageSize
),但是是的,您仍然可以通过paging controls解决此问题。
这个想法是请求一个分页的结果集,每页的条目数少于服务器的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 个。