【问题标题】:How to retrieve all document content from alfresco repository with seperation of document types using Open CMIS如何使用 Open CMIS 从 alfresco 存储库中检索所有文档内容并分离文档类型
【发布时间】:2017-04-17 10:08:54
【问题描述】:

我想从 alfresco 存储库中检索所有文档内容。那么任何人都可以帮助我如何使用 CMIS 遍历存储库。在遍历时,我还想根据其类型分离文档。

此时我可以通过指定路径来获取任何一个文档。但现在我的要求是遍历整个存储库并获取所有文档。

那么任何人都可以帮助我解决这个问题。 还建议我“遍历所有文件夹,然后按特定类型分隔”将是一个好方法或“使用 CMIS 搜索特定类型的文档查询”将是一个好方法。

提前致谢。

【问题讨论】:

    标签: alfresco alfresco-share opencmis


    【解决方案1】:

    Yagami 的回答是一个好的开始,但有几点需要补充。

    首先,除非您确实需要存储库拥有的每一个属性,否则不要执行“选择 *”。这是一个潜在的性能问题。只问你需要什么。

    其次,您的一位 cmets 谈到按类型细分结果。在 CMIS 中,类型有点像 SQL 表。因此,在您的情况下,您将使用三种自定义类型中的每一种作为 from 子句中的不同类型来执行三个不同的查询:

    select * from test:mainContract;
    select * from test:subContract;
    select * from test:royaltyStatement;
    

    最后,除非您的存储库中只有少量文档,否则您几乎肯定会想要使用分页结果集。否则,您将只能取回服务器配置返回的最大结果数。这可能不足以容纳整个集合。

    有关显示分页结果集的示例,请参阅Apache CMIS: Paging query result

    【讨论】:

    • 非常感谢您的回答。这是有道理的。
    • 如果我查询 select * from test:mainContract;它只提供 1000 个文件。但是存储库中存在超过 1000 个文档。那么我怎样才能得到所有的文件......你能回复吗???
    • @Juff Potts 你能帮我从露天存储库中获取 Aspect 属性吗?我为此创建了一个问题。如果可能,请帮助我...
    【解决方案2】:

    要执行这样的操作(获取所有文档内容),您需要按照以下步骤操作

    第 1 步:创建一个保护类

    我的意思是服务器类,它将包含两个信息(对我来说这是最有价值的信息),其中两个最有个性

    1 - 文档 ID

    2 - 文档名称

    第 2 步:获取所有文档

    要获取所有文档,我们必须使用查询

    String query;
    query = "SELECT * FROM cmis:document ";
    

    您将获得存储库中的所有文档。

    你可以添加一些条件来让你的研究更容易,就像这个例子一样:

    query = "SELECT * FROM cmis:document WHERE IN_FOLDER('" + folderId + "')";
    

    在此示例中,您将获得特定文件夹的文档。

    ItemIterable<QueryResult> resultList = session.query(query, false);
    

    最后

    for (QueryResult qr : resultList) {    
    String idDocument = qr.getPropertyByQueryName("cmis:objectId").getFirstValue().toString();
    String name = qr.getPropertyByQueryName("cmis:name").getFirstValue().toString();
    Document doc = (Document) session.getObject(idDocument);// this is how you can get document with add that's mean no need of path     
    }
    

    您可以在CMIS query 中阅读有关查询的更多信息。

    第3步:将每次信息保存在saver类中

    我认为很明显,每次在出现保护程序类时使用循环(在步骤 2 中)时,您都必须进行保存。

    希望对你有所帮助。

    【讨论】:

    • 如何根据内容类型分离内容?意味着我在存储库中总共有 4 种不同类型的内容。我想要它分开。如果可能的话,请您修改答案。
    • 请给我这个内容类型
    • test:mainContract, test:subContract 和 test:royaltyStatement 这些是内容类型............我想根据内容类型分隔所有内容
    • 在我提供的链接中查看,看看你是否能找到类似的东西,我认为那是文档类型
    • 这些是自定义内容类型,但是我如何根据这些类型来分离内容。您提供的查询将提供所有内容。但在里面我怎么能应用过滤器..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多