我在我的组合框值中执行了以下代码,但它是空的虽然我确实将一些用户放入了带有“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;
我的数据库在服务器上。我正在使用8.5.3 FP3 UP1。
答案 0 :(得分:6)
您列出的代码会在遇到未启用指定角色的条目时立即退出while循环。因此,如果第一个条目没有角色,它将永远不会进入循环。我建议对代码进行三处更改:
new Array()
...而是使用[ ]
。除了在浏览器{@ 3}}中每次输入的字符数量更少之外,所以即使在SSJS中也存在这种习惯,这在性能差异不太明显的情况下也是如此。同样,虽然这与您的具体示例无关,但请勿使用new Object()
;只需使用{ }
。acle
与null
进行比较,并检查内部循环中的角色,而不是检查您在while条件下的角色。这将确保返回具有指定角色的所有条目,无论它们在ACL中的顺序如何。将三个更改放在一起,修改后的代码如下所示:
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;