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

时间:2017-04-17 10:08:54

标签: alfresco alfresco-share opencmis

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

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

任何人都可以帮助我。 还建议我" 遍历所有文件夹,然后按特定类型分开 "将是一个好的方法OR" 使用CMIS查询搜索特定类型的文档 "将是一个很好的方法。

先谢谢。

2 个答案:

答案 0 :(得分:4)

Yagami的答案是一个良好的开端,但还有一些事情需要补充。

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

其次,您的一条评论涉及按类型细分结果。在CMIS中,类型有点像SQL表。因此,在您的情况下,您将使用from子句中的三种自定义类型作为不同类型执行三种不同的查询:

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

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

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

答案 1 :(得分: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步:每次在保护程序类中保存

我认为很明显,每次使用循环(在步骤2中)都需要在保存类中出现。

我希望能帮助你。