How to Do Mass Update in Alfresco Using CMIS

纵饮孤独 提交于 2019-11-30 22:10:43

问题


Is it possible to do mass update using CMIS in alfresco.

I have Different Documents Types and Every Document type is having multiple documents in alfresco repository.

Now my requirement is, If i will Update any single property of any document, then it should reflect with all the documents of same type.

Can i do this USING CMIS?

If yes, please provide the steps and sample code to do this.

Thanks in Advance


回答1:


The hard way (and chatty way) is to query for your documents and then set the properties on each one. But the CMIS spec actually provides a better way: Bulk updates.

Here is what the code looks like:

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.");

In my example I am grabbing each document by path, but of course you could run a query and build your list that way as well.

To use this with Alfresco you must use CMIS 1.1 and the browser binding so make sure your service URL is http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser.




回答2:


the solution that i suggest to do in purpose of doing a lot of updates is to use CMIS query to select object with the same type (document,folder ...) you can learn more about it with Cmis Query

First Step

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

and to get all the children

ItemIterable<QueryResult> resultList = session.query(query, false);

Note that for a purpose testing i selected in this query all the document that is inside a particular folder

Second Step

for (QueryResult qr : resultList) {

String idDocument = qr.getPropertyByQueryName("cmis:objectId").getFirstValue().toString();
Document doc = (Document) session.getObject(idDocument);

}

Now i use my query to get all the document that i want to update the properties.

Hope that helped you.



来源:https://stackoverflow.com/questions/39468515/how-to-do-mass-update-in-alfresco-using-cmis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!