1

Alfresco Share 不会跟踪在其界面之外修改的内容,这使得最近修改的 RSS/Dashlet 无用。我正在创建一个 RSS,我可以在站点中使用它来提取最近修改的项目列表。

现在我只是在获取文件列表,我有点磕磕绊绊,因为我对 Webscripts 不是很熟悉。我有这段代码可以检索网站的内容然后构建文件数组,我遇到的问题是我可能有很多子文件夹,但我不确定如何正确遍历它们。

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);

最后,我将按修改后的时间进行排序,然后将其切碎以进行演示,我在假设获取内容是困难的部分的情况下进行操作 :)

4

2 回答 2

6

我会编写一个递归函数来遍历文件夹层次结构,如下所示:

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"]); 
    }
  }
}
于 2013-06-05T07:09:18.477 回答
0

其实很简单。如果您查看 docsummary dashlet/js 文件(Recently Modified Dashlet)的代码,您会看到它正在触发:

slingshot/doclib/doclist/documents/site/" + Alfresco.constants.SITE + "/documentLibrary?max=50

因此,您只需要一个可用且对您有好处的站点列表,即有一个服务listSites(nameFilter, sitePresetFilter)

您可以只使用listSites(null, null),它将返回所有站点。因此,只需遍历站点并触发 webscript。

于 2013-06-05T14:28:52.180 回答