如何使用CMIS对Alfresco进行大规模更新



是否可以在alfresco中使用CMIS进行大规模更新?

我有不同的文档类型和每个文档类型在alfresco存储库中有多个文档。

现在我的要求是,如果我要更新任何文档的任何单个属性,那么它应该反映所有相同类型的文档。

我可以使用CMIS做到这一点吗?

如果是,请提供步骤和示例代码。

Thanks in Advance

比较困难的方法(也是比较繁琐的方法)是查询文档,然后为每个文档设置属性。但是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和浏览器绑定,因此请确保您的服务URL为http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser。

解决方案,我建议做很多更新的目的是使用CMIS查询选择对象具有相同的类型(document, folder…),你可以了解更多关于它与CMIS查询

第一步

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);
}

现在我使用我的查询来获取我想要更新属性的所有文档。

希望这对你有帮助。

相关内容

  • 没有找到相关文章