如何使用 CMIS 在 Alfresco 中进行批量更新
How to Do Mass Update in Alfresco Using CMIS
是否可以在露天使用 CMIS 进行批量更新。
我有不同的文档类型,每种文档类型在露天存储库中都有多个文档。
现在我的要求是,如果我要更新任何文档的任何单个 属性,那么它应该反映所有相同类型的文档。
我可以使用 CMIS 来做这个吗?
如果是,请提供执行此操作的步骤和示例代码。
提前致谢
为了进行大量更新,我建议的解决方案是使用 CMIS 查询 select object 具有相同类型(document
,folder
...) 您可以通过 Cmis Query
了解更多信息
第一步
String query;
query = "SELECT * FROM cmis:document WHERE IN_FOLDER('" + objectId + "')";
并获得所有 children
ItemIterable<QueryResult> resultList = session.query(query, false);
请注意,出于测试目的,我在此查询中 select 编辑了特定文件夹中的所有文档
第二步
for (QueryResult qr : resultList) {
String idDocument = qr.getPropertyByQueryName("cmis:objectId").getFirstValue().toString();
Document doc = (Document) session.getObject(idDocument);
}
现在我使用我的查询来获取我想要更新属性的所有文档。
希望对您有所帮助。
困难的方法(也是冗长的方法)是查询您的文档,然后为每个文档设置属性。但 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 进行批量更新。
我有不同的文档类型,每种文档类型在露天存储库中都有多个文档。
现在我的要求是,如果我要更新任何文档的任何单个 属性,那么它应该反映所有相同类型的文档。
我可以使用 CMIS 来做这个吗?
如果是,请提供执行此操作的步骤和示例代码。
提前致谢
为了进行大量更新,我建议的解决方案是使用 CMIS 查询 select object 具有相同类型(document
,folder
...) 您可以通过 Cmis Query
第一步
String query;
query = "SELECT * FROM cmis:document WHERE IN_FOLDER('" + objectId + "')";
并获得所有 children
ItemIterable<QueryResult> resultList = session.query(query, false);
请注意,出于测试目的,我在此查询中 select 编辑了特定文件夹中的所有文档
第二步
for (QueryResult qr : resultList) {
String idDocument = qr.getPropertyByQueryName("cmis:objectId").getFirstValue().toString();
Document doc = (Document) session.getObject(idDocument);
}
现在我使用我的查询来获取我想要更新属性的所有文档。
希望对您有所帮助。
困难的方法(也是冗长的方法)是查询您的文档,然后为每个文档设置属性。但 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。