我对 Alfresco 及其 Javascript API 完全陌生,所以请记住这一点...
我希望能够查看 Alfresco 存储库中每个用户的组列表。
这是我目前的代码:
var gens = search.luceneSearch("TYPE:\"{http://www.alfresco.org/model/content/1.0}person\"");
var logFile = space.childByNamePath("log_user_groups.csv");
if (logFile == null) {
logFile = space.createFile("log_user_groups.csv");
}
logFile.content = "";
for (var i=0; i<gens.length;i++) {
logFile.content += gens[i].properties["cm:userName"]+"\n";
var groupes= people.getContainerGroups(gens[i]);
for (var j=0; j<groupes.length;j++) {
logFile.content += "\t"+groupes[j].properties.shortName +"\t";
logFile.content += "\t"+groupes[j].properties.fullName +"\t";
logFile.content += "\t"+groupes[j].properties.displayName +"\n";
}
}
文件已创建,用户名正确显示。但是,组属性“shortName”、“fullName”和“displayName”均为空。事实上,我打印出了“groupes”对象的所有属性,并且该对象的每个字段都是“未定义”。
有人知道我做错了什么吗?
任何帮助将不胜感激。
正常。
最简单的方法就是扭转局面。相反,对于每个组,询问它包含哪些组和哪些用户。最后,翻转它。
您需要从根组开始。 Alfresco 中的
groups
JS 对象将为您提供这些以及其他内容。它是由 ScriptAuthorityService
实现的,因此您可能需要查看 JavaDocs
首先,获取根组
var rootGroups = groups.getAllRootGroups() ;
对于每个组,使用
getAllUsers()
获取组中的所有用户(直接用户和继承用户),并将其存储在某处。现在,获取所有带有 getChildGroups()
的子组。以相同的方式处理每一个,并根据需要进行递归。
我需要类似的东西(完整的组列表),所以我这样做了:
var temp = [];
function addGroups (groups)
{
for each (group in groups)
{
temp.push(group.getDisplayName());
addGroups(group.getChildGroups());
}
}
addGroups(groups.getAllRootGroups());
这在一定程度上是有效的。问题是 getDisplayName() 返回一个非常不漂亮的组名称。通常,在处理文档并显示与用户关联的组名称时,我会执行 people.getContainerGroups() 并使用 group.properties["cm:authorityName"] 来获取可显示的名称(如上所述),但是我收到的组getAllRootGroups() 没有属性(group.properties 未定义)。
有谁知道为什么以这种方式返回的组列表不会具有与 people.getContainerGroups() 返回的属性相同的属性?
我猜您使用了错误的属性名称。
您需要以下内容:
groupes[j].properties["usr:authorityName"]
groupes[j].properties["usr:authorityDisplayName"]
groupes[j].properties["usr:authorityShortName"]
您也可以只获取 NodeRef id。
然后登录 Alfresco 浏览器。然后进入管理控制台 --> 节点浏览器
粘贴id(应该类似于
workspace://spacesStore//biglongUUID
)。在那里你可以看到与该组相关的所有属性。
或者您可以循环
groupes[k].properties
地图并打印所有属性。