是否可以在露天使用CMIS进行批量更新。
我有不同的文档类型,每种文档类型在露天存储库中都有多个文档。
现在我的要求是,如果我将更新任何文档的任何单个属性,那么它应该反映所有相同类型的文档。
我可以使用CMIS吗?
如果是,请提供相应的步骤和示例代码。
先谢谢
答案 0 :(得分:5)
艰难的方式(和繁琐的方式)是查询您的文档,然后在每个文档上设置属性。但CMIS规范实际上提供了一种更好的方式:批量更新。
代码如下所示:
ArrayList<CmisObject> docList = new ArrayList<CmisObject>();
Document doc1 = (Document) getSession().getObjectByPath("/bulk/bulktest1.txt");
docList.add(doc1);
Document doc2 = (Document) getSession().getObjectByPath("/bulk/bulktest2.txt");
docList.add(doc2);
Document doc3 = (Document) getSession().getObjectByPath("/bulk/bulktest3.txt");
docList.add(doc3);
HashMap<String, Object> props = new HashMap<String, Object>();
props.put("cmis:description", "description set in bulk");
List<BulkUpdateObjectIdAndChangeToken> updatedIds = getSession().bulkUpdateProperties(docList, props, null, null);
System.out.println("Updated " + updatedIds.size() + " docs.");
在我的示例中,我按路径抓取每个文档,但当然您也可以运行查询并以此方式构建列表。
要在Alfresco中使用此功能,您必须使用CMIS 1.1和浏览器绑定,因此请确保您的服务网址为http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser。
答案 1 :(得分:1)
我建议为进行大量更新而做的解决方案是使用CMIS查询来选择具有相同类型的对象(document
,folder
...)您可以了解更多与Cmis Query
第一步
String query;
query = "SELECT * FROM cmis:document WHERE IN_FOLDER('" + objectId + "')";
并让所有孩子
ItemIterable<QueryResult> resultList = session.query(query, false);
请注意,我在此查询中选择的目的是测试特定文件夹中的所有文档
第二步
for (QueryResult qr : resultList) {
String idDocument = qr.getPropertyByQueryName("cmis:objectId").getFirstValue().toString();
Document doc = (Document) session.getObject(idDocument);
}
现在我使用我的查询来获取我想要更新属性的所有文档。
希望能帮到你。