如何使用CMIS查询获取1000多个文档

时间:2017-04-19 16:02:09

标签: alfresco alfresco-webscripts opencmis

通过使用CMIS查询,我只能获取1000个文档。但我想获取存储库中可用的所有文档。

我阅读了一些有关此问题的解决方案,我们可以在repository.properties文件中进行一些配置并获取文档。

但我的问题是,我们可以通过CMIS中的代码来实现,因为我正在访问生产存储库。并且要在repository.properties文件中进行更改,我需要一些业务用户的停机时间。这在我的情况下是不可能的。

所以我正在寻找一些程序化的解决方案。

有人可以帮助我吗?

先谢谢..

2 个答案:

答案 0 :(得分:3)

我认为这是由于您的存储库的配置。

尝试在/shared/classes/alfresco-global.properties中添加它并重新启动:

  • system.acl.maxPermissionCheckTimeMillis = 25000
  • system.acl.maxPermissionChecks = 3500

如果您使用的是solr,也可以添加这个:

  • solr.query.maximumResultsFromUnlimitedQuery = 3500

您可以在这里找到帮助:

答案 1 :(得分:2)

我给你的解决方案没有与查询或页面大小相关联,你可以按照这个步骤(我遇到同样的问题一次,这个问题对我有用)

创建保护程序类

saver类是一个Java类,它包含有关存储库的最重要信息(当我谈到存储库时,我的意思是文件夹+文件)

您必须在保护程序类中使用的信息

1 - 姓名

2 - 路径(您将构建它)

3 - Alfresco ID

使用递归函数

这个函数parcour所有树并保存你的saver类中的每个元素,它看起来像这样

public void getTree(Tree<FileableCmisObject> tree, SaverClass father, String serverURL, String login, String password) {

    SaverClass enr = new SaverClass ();
    enr.setName(tree.getItem().getName());

    if ((father.getPath()).equals("/")) /// IN CASE IT'S THE ROOT
    {
        enr.setPath("/" + tree.getItem().getName());

    } else {
        enr.setPath(father.getPath() + "/" + tree.getItem().getName());
    }        
    enr.setFather(father.getNom());
    for (Tree<FileableCmisObject> t : tree.getChildren()) {
        getTree(t, enr, serverURL, login, password);
    }

}

保存列表中的所有元素后,您只需对列表中的每个元素使用迁移方法(如果您想使用Alfresco ID,则可以,如果您想使用Path,那就可以了)

希望能帮到你。