XPages SSJS将所有用户置于一个角色下并放入combobox?
我在combobox值中执行了以下代码,但它是空的,尽管我确实将一些用户放入了角色为“Reviewer”的ACL中:XPages SSJS将所有用户置于一个角色下并放入combobox?,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我在combobox值中执行了以下代码,但它是空的,尽管我确实将一些用户放入了角色为“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.
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。您列出的代码将在遇到未启用指定角色的条目时退出while循环。因此,如果第一个条目没有角色,它将永远不会进入循环。我建议对代码进行三项更改:
new Array()
。。。改用[]
。在浏览器中,除了每次输入的字符更少之外,即使在性能差异不太明显的SSJS中,也要养成这种习惯。类似地,虽然这不适用于您的特定示例,但千万不要使用newobject()
;只要使用{}
acle
与null
进行比较,然后检查循环中的角色。这将确保返回具有指定角色的所有条目,而不管它们在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;
您列出的代码将在遇到未启用指定角色的条目时立即退出while循环。因此,如果第一个条目没有角色,它将永远不会进入循环。我建议对代码进行三项更改:
new Array()
。。。改用[]
。在浏览器中,除了每次输入的字符更少之外,即使在性能差异不太明显的SSJS中,也要养成这种习惯。类似地,虽然这不适用于您的特定示例,但千万不要使用newobject()
;只要使用{}
acle
与null
进行比较,然后检查循环中的角色。这将确保返回具有指定角色的所有条目,而不管它们在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;
我个人还没有对此进行基准测试,但如果两者之间有任何差异,我会感到惊讶。所有SSJ在运行时都会变成Java,因此任何一种语法都会导致com.ibm.jscript.std.ArrayObject的实例。一旦创建了该实例,任何针对它的操作(理论上)都应该执行相同的操作,而不管它是如何创建的。如果有任何区别的话,很可能是在初始解析中:当整个值/方法绑定解析为AST时,SSJS就变成了Java。在这一步中,数组文字可能需要更少的处理。我个人还没有对此进行基准测试,但如果两者之间有任何差异,我会感到惊讶。所有SSJ在运行时都会变成Java,因此任何一种语法都会导致com.ibm.jscript.std.ArrayObject的实例。一旦创建了该实例,任何针对它的操作(理论上)都应该执行相同的操作,而不管它是如何创建的。如果有任何区别的话,很可能是在初始解析中:当整个值/方法绑定解析为AST时,SSJS就变成了Java。在此步骤中,数组文字可能需要稍微少一些处理。