如何使用 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
我想从露天存储库中检索所有文档内容。那么任何人都可以帮助我如何使用 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