如何使用CMIS在Alfresco中进行批量更新

是否可以在露天使用CMIS进行批量更新。

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

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

我可以使用CMIS吗?

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

提前致谢

艰难的方式(和繁琐的方式)是查询您的文档,然后在每个文档上设置属性。 但CMIS规范实际上提供了一种更好的方法:批量更新。

这是代码的样子:

ArrayList docList = new ArrayList(); 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 props = new HashMap(); props.put("cmis:description", "description set in bulk"); List 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查询来选择具有相同类型的对象( documentfolder …),您可以通过Cmis Query了解更多相关信息

第一步

 String query; query = "SELECT * FROM cmis:document WHERE IN_FOLDER('" + objectId + "')"; 

并得到所有的孩子

 ItemIterable resultList = session.query(query, false); 

请注意,我在此查询中选择的目的是测试特定文件夹中的所有文档

第二步

 for (QueryResult qr : resultList) { String idDocument = qr.getPropertyByQueryName("cmis:objectId").getFirstValue().toString(); Document doc = (Document) session.getObject(idDocument); } 

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

希望对你有所帮助。