-->

How to Do Mass Update in Alfresco Using CMIS

2019-02-16 05:23发布

问题:

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.