2016-09-13 13 views
0

Возможно ли массовое обновление с использованием CMIS во всём мире.Как сделать массовое обновление в Alfresco с помощью CMIS

У меня разные типы документов и каждый тип документа имеет несколько документов в репозитории под открытым небом.

Теперь мое требование: если я обновляю какое-либо одно свойство любого документа, оно должно отражать все документы того же типа.

Могу ли я сделать это ИСПОЛЬЗОВАНИЕ CMIS?

Если да, предоставьте шаги и пример кода для этого.

Заранее спасибо

+1

нужно больше деталей, когда вы говорите. Тип документа: что вы имеете в виду?!? дайте пример. –

+0

Тип документа означает мой собственный тип контента. Я также создал разные страницы свойств для разных типов документов. –

ответ

5

Жесткий путь (и болтливый способ) заключается в том, чтобы запрашивать ваши документы, а затем устанавливать свойства для каждого из них. Но спецификация 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.

+0

Я ошибаюсь, когда говорю, что между вашим решением и моей? –

+1

@YagamiLight Это решение обрабатывает «массовую» часть с массовым расходом. Это не так. – Akah

+2

Разница между моим решением и вашим (повторение результатов в наборе поиска и настройка свойств для каждого результата поиска) заключается в том, что каждый раз, когда вы устанавливаете свойства в отдельном документе, это поездка на сервер.В моем решении клиент сообщает серверу: «Внесите эти изменения во все эти документы», а затем сервер выполнит все изменения, которые являются более эффективными, отчасти потому, что он включает только одну поездку на сервер. –

1

решение, которое я предлагаю сделать в целях делать много обновлений, чтобы использовать CMIS запрос для выбора объекта с таким же типом (document, folder ...) вы можете узнать больше об этом с Cmis Query

Первый шаг

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

} 

сейчас я использую свой запрос, чтобы получить весь документ, который я хочу обновить.

Надеюсь, что это помогло вам.

+0

@ deps это работает?!? –