【问题标题】:Find all files in a site with Alfresco 4.1 webscripts使用 Alfresco 4.1 webscripts 查找站点中的所有文件
【发布时间】:2013-06-05 00:53:50
【问题描述】:

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

最后我会按修改时间排序,然后将其截断以进行演示,我的操作是假设获取内容是困难的部分:)

【问题讨论】:

  • 运行搜索而不是进行完全递归不是更好吗?
  • 我可能尝试使用搜索 API,但在构建查询时遇到问题。
  • 那么您可能想问一个新问题 - 我相信这里有人可以帮助您解决问题

标签: javascript alfresco


【解决方案1】:

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

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"]); 
    }
  }
}

【讨论】:

    【解决方案2】:

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

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

    因此,您只需要一个可用且对您有好处的网站列表,以便为它提供服务listSites(nameFilter, sitePresetFilter)

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

    【讨论】:

    • 我将对此进行测试,我在最近修改的 dashlet 中看到的问题是它仅跟踪已通过共享修改的文件(上传/离线编辑)。通过 WebDAV 或在线编辑(SharePoint 插件)修改的任何内容都不会显示。对我来说,这表明它使用的方法不起作用。话虽如此,它绝对值得研究,因为它为我工作。我正在考虑使用它来获取文件夹的完整列表并从中检索文档。
    • 是的,但是,如果您在不使用搜索的情况下从每个站点的每个文件夹中检索文档,那将是一项繁重的操作。而且因为它在 Dashlet 中,所以会被解雇很多!所以要么走那条路并在其中编写一个缓存,所以它只会每 x 分钟刷新一次。这一切只需要做很多工作,我建议的解决方案更容易实施和维护
    • 我坐下来找出搜索查询,打开调试并捕获用于站点搜索的查询。我有一个 webscript,它通过 search.query 返回请求,并根据需要进行排序和过滤,所以现在我只需要制作 atom 模板,我应该进行设置。
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多