我使用以下代码使用CMIS API在我的文档服务上创建文件:
zipMapFile.put(PropertyIds.OBJECT_TYPE_ID, "sap:versioned");
zipMapFile.put(PropertyIds.NAME, "g" + g.getId() + ".zip");
Document versionedDocument = openCmisSession.getRootFolder().createDocument(zipMapFile, contentStream, VersioningState.MAJOR);
newZipFileId = versionedDocument.checkOut();
...
上面的代码正常工作,正在生成文件。当我运行以下代码时:
cmisSession.getObject(newZipFileId.getId());
我得到之前创建的文件,没有错误。
但是,当我尝试为此文件上传新版本时,我遇到了问题。
为此,我使用以下代码:
oldZipFileId = newZipFileId;
Document pwc = (Document) cmisSession.getObject(oldZipFileId);
pwc.setContentStream(contentStream, true);
newZipFileId = pwc.checkIn(false, null, null, null);
每当我执行此操作时,我都可以访问较新的版本,而无需运行以下代码:
cmisSession.getObject(newZipFileId.getId());
但是,我无法再访问旧版本了!如果我试着跑:
cmisSession.getObject(oldZipFileId);
我得到 CmisObjectNotFoundException
我失去对旧版本的访问权的那一刻正好是执行方法pwc.checkIn(false, null, null, null);
的时候。在调用之后,尝试获取oldZipId引用的对象会给我一个CmisObjectNotFoundException。
我使用的是MongoDB。
任何帮助表示赞赏!谢谢!
答案 0 :(得分:2)
工作代码应如下所示:
Document versionedDocument = openCmisSession.getRootFolder().createDocument(zipMapFile, contentStream, VersioningState.MAJOR);
oldZipFileId = versionedDocument.getId();
newZipFileId = versionedDocument.checkOut();
Document pwc = (Document) cmisSession.getObject(newZipFileId);
pwc.setContentStream(contentStream, true);
newZipFileId = pwc.checkIn(false, null, null, null);
// access last version
cmisSession.getObject(newZipFileId.getId());
// access old version
cmisSession.getObject(oldZipFileId);
答案 1 :(得分:1)
虽然我不是HCP文档服务版本的专家,但您编写的所有内容都是按照设计的AFAIK工作的。当你检查一个pwc时会有一个新的实际版本(历史上的最新版本),并且pwc消失了。因此,识别pwc的oldZipFileId变为无效。 pwc变成的新实际版本获得了新的对象id。这似乎正是你所观察到的。
答案 2 :(得分:0)
查看旧版本是否在document.getAllVersions()中。