Alfresco Share不会跟踪在其界面之外修改的内容,这使得最近修改的RSS / Dashlet无用。我正在创建一个RSS,我可以在网站中使用它来提取最近修改过的项目列表。
现在我正在努力获取文件列表,因为我对Webscripts不是很熟悉,所以我有点磕磕绊绊。我有这段代码将检索一个站点的内容,然后构建一个文件数组,我遇到的问题是我可以有很多子文件夹,我不知道如何正确遍历它们。 / p>
var folder = companyhome.childByNamePath("/Sites/foo/documentLibrary");
var docs = new Array();
print(folder);
print("iterating...");
var children = folder.children;
for (i=0; i<children.length; i++)
{
var c = children[i];
if (c.isContainer)
{
print(c.name + " is a folder, traversing...");
var subfolder = companyhome.childByNamePath("/Sites/foo/documentLibrary/" + c.name.toString());
var subchildren = subfolder.children;
for (j=0; j<subchildren.length; j++)
{
var d = subchildren[j];
if (d.isDocument) docs.push(d);
}
}
if (c.isDocument) docs.push(c);
}
print(docs);
最后,我将按修改时间进行排序,然后将其切换为演示文稿,我在假设获取内容是困难部分的情况下进行操作:)
答案 0 :(得分:6)
我会编写一个递归函数来遍历文件夹hiarchy,如下所示:
var documentLibrary = companyhome.childByNamePath("sites/foo/documentLibrary");
var children = documentLibrary.children;
traverse(children);
function traverse(nodes){
for each(var node in nodes) {
if (node.isContainer){
logger.log(node.name + " is a folder, traversing down");
traverse(node.children);
}else {
logger.log(node.name + "is a document, modified: " + node.properties["cm:modified"]);
}
}
}
答案 1 :(得分:0)
实际上很简单。如果您查看docsummary dashlet / js文件(最近修改的Dashlet)的代码,您将看到它正在触发:
slingshot/doclib/doclist/documents/site/" + Alfresco.constants.SITE + "/documentLibrary?max=50
所以,您只需要一个可用的网站列表,并为您提供服务listSites(nameFilter, sitePresetFilter)。
您可以使用 listSites(null,null),它将返回所有网站。 所以只需循环浏览网站并触发webscript。