我使用的是createfolder或streamupdate,问题是,那个版本是两次,我的意思是每次上传都是在露天做的:
调用uploadFile .... 回到文档版本 版本0.2 版本0 1
再次.. 打电话给uploadFile .... 回到文档版本
版本0.4 版本0.3
....我怎么能对versión只做一个上传文件?
以下是“创建文档和更新文档”的代码。
创建文档......
FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis);
byte[] bytes = new byte[(int) file.length()];
dis.readFully(bytes);
Map<String, String> newDocProps = new HashMap<String, String>();
newDocProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
newDocProps.put(PropertyIds.NAME, file.getName());
newDocProps.put(PropertyIds.IS_LATEST_VERSION, "TRUE");
List<Ace> addAces = new LinkedList<Ace>();
List<Ace> removeAces = new LinkedList<Ace>();
List<Policy> policies = new LinkedList<Policy>();
try {
ContentStream contentStream = new ContentStreamImpl(file.getName(), BigInteger.valueOf(bytes.length), fileType, new ByteArrayInputStream(bytes));
Document doc = folder.createDocument(newDocProps, contentStream, VersioningState.MINOR, policies, removeAces, addAces, session.getDefaultContext());
AlfrescoDocument alfDoc = (AlfrescoDocument) doc;
if(alfDoc.hasAspect("P:cm:versionable")) {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("cm:autoVersion", true);
alfDoc.updateProperties(properties);
}
} catch (Exception e) {
if(e.getMessage().contains("Conflict")){
Document document = (Document) session.getObject(session.getObjectByPath(".../Space/"+file.getName()).getId());
ContentStream contentStream = new ContentStreamImpl(file.getName(), BigInteger.valueOf(bytes.length), fileType, new ByteArrayInputStream(bytes));
updateDcoument(document,contentStream);
}
}
}
答案 0 :(得分:0)
在您的代码中,您确实创建了两个版本的文档:
Document doc = folder.createDocument(newDocProps, contentStream, VersioningState.MINOR, policies, removeAces, addAces, session.getDefaultContext());
和
alfDoc.updateProperties(properties);
默认情况下,cm:versionable
设置为cm:autoVersionOnUpdateProps
设置为true
,后一个调用会发出要创建的新版本。您可以通过更改false
定义将该属性设置为对象上的cm:versionable
或全局。请参阅docs。