有人发布创建新文档所需的OpenCMIS代码,然后通过更新其内容流来更新该文档吗?我不想丢失原始文档 - 我希望在更新新文档时维护版本历史记录。我使用的是Alfresco,但这适用于任何CMIS存储库。
答案 0 :(得分: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