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

时间:2013-04-08 02:39:28

标签: 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; 

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

1 个答案:

答案 0 :(得分:6)

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

  1. 首先,不要使用new Array() ...而是使用[ ]。除了在浏览器{@ 3}}中每次输入的字符数量更少之外,所以即使在SSJS中也存在这种习惯,这在性能差异不太明显的情况下也是如此。同样,虽然这与您的具体示例无关,但请勿使用new Object();只需使用{ }
  2. aclenull进行比较,并检查内部循环中的角色,而不是检查您在while条件下的角色。这将确保返回具有指定角色的所有条目,无论它们在ACL中的顺序如何。
  3. 为了the array literal performs better,您需要在检查下一个条目之前回收每个条目。
  4. 将三个更改放在一起,修改后的代码如下所示:

    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;