如何使用 Open CMIS 从 alfresco 存储库中检索所有文件内容并分离文件类型

How to retrieve all document content from alfresco repository with seperation of document types using Open CMIS

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

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

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

提前致谢。

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

第 1 步:创建一个保护程序 Class

我对服务器 class 的意思是,它将包含两个信息(对我来说这是最有价值的信息),其中两个最重要的是字符变化

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步:保存每次信息到保护程序class

我认为很明显,每次使用循环(在步骤 2 中)时都必须保存保存程序 class。

希望对您有所帮助。

Yagami 的回答是一个好的开始,但还有一些事情要补充。

首先,不要执行 "select *" 除非你确实需要存储库中的每一个 属性。这是一个潜在的性能问题。只问你需要什么。

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

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

最后,除非您的存储库中只有少数文档,否则您几乎肯定会想要使用分页结果集。否则,您将只能返回服务器配置为 return 的最大结果数。这可能不够大,无法获得整套。

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