XPages SSJS让所有用户都担任角色并投入组合框?

Bax*_*XTR 1 xpages xpages-ssjs

我在我的组合框值中执行了以下代码,但它是空的虽然我确实将一些用户放入了带有"Reviewer"角色的ACL中:

var arr=new Array();
var acl:NotesACL=database.getACL();
var acle:NotesACLEntry=acl.getFirstEntry();
while(acle.getRoles().contains('[Reviewer]')){
    arr.push(acle.getName());
    acle=acl.getNextEntry(acle);
}
return arr; 
Run Code Online (Sandbox Code Playgroud)

我的数据库在服务器上.我正在使用8.5.3 FP3 UP1.

Tim*_*ony 6

您列出的代码将在遇到未启用指定角色的条目时立即退出while循环.因此,如果第一个条目没有角色,它将永远不会进入循环.我建议对代码进行三处更改:

  1. 首先,永远不要使用new Array()...... [ ]而是使用.除了每次只输入更少的字符外,在浏览器中,数组文字的表现更好,所以即使在SSJS中也存在这种习惯,因为SSJS的性能差异不太明显.同样,虽然这与您的具体示例无关,但请勿使用new Object(); 只是用{ }.
  2. 相反,在你的病情时检查的作用,比较aclenull,并检查作用内部循环.这将确保返回具有指定角色的所有条目,而不管它们在ACL中的顺序如何.
  3. 为了避免泄漏C++句柄,您需要在检查下一个条目之前回收每个条目.

将三个更改放在一起,修改后的代码如下所示:

var arr = [ ];
var acl:NotesACL=database.getACL();
var acle:NotesACLEntry=acl.getFirstEntry();
var nextEntry:NotesACLEntry = null;
while(acle != null){
    if (acle.getRoles().contains('[Reviewer]')) {
        arr.push(acle.getName());
    }
    nextEntry = acl.getNextEntry(acle);
    acle.recycle();
    acle = nextEntry;
}
return arr;
Run Code Online (Sandbox Code Playgroud)