2013-02-25 2 views
0

Может ли кто-нибудь опубликовать код OpenCMIS, необходимый для создания нового документа, а затем обновить этот документ, обновив его поток контента? Я не хочу потерять исходный документ - я хочу сохранить историю версий по мере обновления новых документов. Я использую Alfresco, но это должно быть применимо к любому хранилищу CMIS.Создавать и обновлять документы при сохранении истории версий с помощью OpenCMIS

+0

что вы имеете в виду "поддерживать версию"? Например, вы хотите сохранить или изменить номер версии? – skuro

+0

, когда я обновляю документ с помощью document.setContentStream (..), он должен сам изменить версию и изменить содержимое документа и сохранить оба документа в версии History. Я хочу как это – user2106213

+0

не могли бы вы отправить код для создания документа ?? с контролем версий? – user2106213

ответ

7

В Alfresco, чтобы создать новую версию, просто получите частную рабочую копию, которая будет возвращена вам после проверки, обновите поток контента PWC, а затем верните его обратно. Alfresco будет управлять версиями для вас. Вот пример.

Folder folder = (Folder) getSession().getObjectByPath("/cmis-demo"); 

String timeStamp = new Long(System.currentTimeMillis()).toString(); 
String filename = "cmis-demo-doc (" + timeStamp + ")"; 

// Create a doc 
Map <String, Object> properties = new HashMap<String, Object>(); 
properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document"); 
properties.put(PropertyIds.NAME, filename); 
String docText = "This is a sample document"; 
byte[] content = docText.getBytes(); 
InputStream stream = new ByteArrayInputStream(content); 
ContentStream contentStream = getSession().getObjectFactory().createContentStream(filename, Long.valueOf(content.length), "text/plain", stream); 

Document doc = folder.createDocument(
      properties, 
      contentStream, 
      VersioningState.MAJOR); 

System.out.println("Created: " + doc.getId()); 
System.out.println("Content Length: " + doc.getContentStreamLength()); 
System.out.println("Version label:" + doc.getVersionLabel()); 

// Now update it with a new version 
if (doc.getAllowableActions().getAllowableActions().contains(org.apache.chemistry.opencmis.commons.enums.Action.CAN_CHECK_OUT)) { 
    doc.refresh(); 
    String testName = doc.getContentStream().getFileName(); 
    ObjectId idOfCheckedOutDocument = doc.checkOut(); 
    Document pwc = (Document) session.getObject(idOfCheckedOutDocument); 
    docText = "This is a sample document with an UPDATE"; 
    content = docText.getBytes(); 
    stream = new ByteArrayInputStream(content);   
    contentStream = getSession().getObjectFactory().createContentStream(filename, Long.valueOf(content.length), "text/plain", stream);   
    ObjectId objectId = pwc.checkIn(false, null, contentStream, "just a minor change"); 
    doc = (Document) session.getObject(objectId); 
    System.out.println("Version label is now:" + doc.getVersionLabel()); 
} 

При запуске он выдает это:

Created: workspace://SpacesStore/d6f3fca2-bf9c-4a0e-8141-088d07d45359;1.0 
Content Length: 25 
Version label:1.0 
Version label is now:1.1 
Done 
+0

Большое спасибо ... Я хочу знать еще одну вещь, как мы можем изменить ярлык как 2.0 вместо 1.1 ?? – user2106213

+0

Да, вы просто изменили бы главный флаг с false на true, так что вы бы сделали это: ObjectId objectId = pwc.checkIn (true, null, contentStream, «это один из основных изменений»); –

+0

Спасибо, Джефф ... Ты гений – user2106213

Смежные вопросы