2015-07-08 4 views
0

Я создаю файл на моем документе службы с CMIS API, используя следующий код:КМИС Versioning не работает, как ожидалось

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

См., Если старая версия находится в document.getAllVersions().

+0

No. Когда метод CreateDocument() выполняется, версия создается и getAllVersions() возвращает версию. В следующей строке, когда pwc.checkOut() выполняется, создается новая версия и getAllVersions() возвращает две версии. Однако, когда новая новая версия создается путем вызова pwc.checkIn(), getAllVersions() все еще возвращает только две версии. Первая версия, созданная createDocument(), не потеряна (она все еще существует), однако вторая версия, созданная методом checkout(), заменяется новой версией, созданной методом checkIn(). – felipeek

+0

Не знаю, ясно ли я, если вы не могли понять, пожалуйста, скажите мне – felipeek

+0

Являются ли два документа, возвращенные getAllVersions() правильными после checkIn? Осмотрите contentStream и свойства объектов, возвращаемых getAllVersions. Предыдущие ссылки на объекты Document могут меняться после checkIn. Кроме того, я думаю, что PWC может исчезнуть после успешной проверки. – daves

1

Хотя я не эксперт по управлению версиями в HCP Document Service, все, что вы пишете, работает как разработанный AFAIK. Когда вы проверите pwc, появится новая фактическая версия (последняя версия в истории), а pwc исчезнет. Следовательно, ваш старый ZipFileId, идентифицирующий pwc, становится недействительным. Новая фактическая версия, с которой pwc стала, получает новый идентификатор объекта. Это похоже на то, что вы наблюдали.

+0

, так что я больше не могу получить доступ к старой версии? Я думал, что с использованием CMIS-версии у меня будет возможность получить доступ ко всем версиям документа – felipeek

1

И рабочий код должен выглядеть следующим образом:

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);