我正在用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。
任何帮助都是感激的!谢谢你!
工作代码应该如下所示:
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);
虽然我不是HCP文档服务版本控制方面的专家,但您编写的所有内容都是按照AFAIK设计的。当你签入普华永道时,会有一个新的实际版本(历史上最新的版本),普华永道就不见了。因此,标识pwc的oldZipFileId将变得无效。pwc变成的新实际版本得到一个新的对象id。这似乎正是你所观察到的。
查看旧版本是否在document.getAllVersions()中。