版本控制
当文档启用了版本控制,扩展组件则不会覆盖任何内容。每次更改都会存储为单独的 WebdavDocumentVersion 实例,因此文档会保留完整历史记录,较早版本仍然可使用。
文档版本通过两种方式创建:
-
自动创建:每次文档内容写入服务端时,即用户在桌面应用中保存文档,或 WebDAV 客户端有新上传内容时。会在当前最新版本之后添加新版本。
-
手动创建:在下面介绍的 WebDAV 文档版本 视图中进行操作。
默认情况下,WebdavDocument 类型的所有属性都会启用版本控制。可以通过 @WebdavSupport 注解为特定属性禁用版本控制,也可以通过 jmix.webdav.versioning-enabled 属性全局禁用。
WebDAV 文档版本
WebDAV document versions 视图显示文档的历史记录,并支持用户进行管理:添加版本、以旧版本为基础创建新版本、打开特定版本以及将某个版本作为文件下载。这是用户界面中除了编辑文档本身之外,唯一可以直接处理版本历史的地方。
有两种方式可以打开 WebDAV document versions 视图:
-
通过 WebdavDocumentUploadField 组件,点击组件中显示的文档版本链接。
-
通过 WebDAV 文档 视图中的 Manage versions 按钮。
WebDAV document versions 对话框打开时如下:
待定版本
在此对话框中添加的版本不会立即存储,而是仅存在于对话框中。其编号会带有 * 符号,表示还未与文档关联。
保存时,会存储待定版本,且编号也会最终确定。如果关闭对话框而不保存,那待定版本将永远不会与文档关联,最终被 WebdavDocumentVersionsCleaningJob 删除。
| Refresh 按钮会从数据库重新加载历史记录,并丢弃所有待定版本。如果已复制或上传了某个版本,但尚未保存,那这些版本将会丢失。 |
操作
WebDAV document versions 对话框可以进行下列操作:
-
创建新版本:点击 Upload 选择需要上传的文件。上传的文件将根据最新的版本号进行编号并标记为 待定版本。
-
基于已有版本创建新版: 选择一个文档版本,然后单击 Copy to head 按钮进行复制,并根据最新的文档版本号为其分配一个编号并标记为 待定版本。该功能可以将文档回退至较早的版本而不丢失这期间的改动。
-
编辑文档: 点击 Open 按钮在关联的桌面应用中打开文档进行编辑。该操作总是打开最新的版本,无论表格中选择的哪个版本。每次在桌面应用中保存文档时,都会往服务端发送一个新版本,然后通过 Refresh 可以查看。
-
查看文档(只读): 点击文件名链接。选择的版本以只读模式打开。
-
下载版本: Download 按钮将选择的版本分别下载为文件。Download as ZIP 选项可以将这些版本打包成单一
files.zip文件。两种情况下,都会在文件名中加入版本号,例如,example-v3.docx、document-v1.docx。
解决冲突策略
当在 WebDAV document versions 对话框中添加新版本时,如果在对话框打开期间数据库中出现了新版本,那么就会出现冲突。冲突解决策略就是定义在这种情况下,如何协调版本。
冲突只能在保存时才可能发生。如果文档在对话框加载后被修改,就会发生冲突,无论修改是怎么发生的:可能是另一个用户在对话框中操作,也可能桌面应用保存文档,又或者 WebDAV 客户端或应用程序代码调用扩展组件的服务。
扩展组件提供以下冲突解决策略:
| 策略 | 描述 |
|---|---|
拒绝合并(默认使用)。不保存任何内容,显示警告,当前用户在对话框中添加的版本被丢弃。存储的历史记录保持不变。 |
|
保留两组版本。后保存的版本会重新编号,排在数据库中存储的最后一个版本之后,因此不会丢失任何内容。 |
|
保留当前用户在对话框中添加的版本,并删除期间存储在数据库中的其他新版本。 |
|
保留数据库中存储的版本,并删除当前用户在对话框中添加的版本。 |
|
|
没有冲突时自动使用。对话框中的所有版本都会被保存。不能作为冲突解决策略。 |
比较策略结果
为说明各策略之间的差异,假设一个文档有版本 1、2 和 3。你打开 WebDAV document versions 对话框并上传一个文件,该文件显示为 待定 版本 4*。与此同时,另一个用户从桌面应用程序两次保存了同一文档,因此数据库中的文档现在有版本 4 和 5。然后你保存对话框。
最后结果由策略决定:
| 策略 | 保存后的版本 |
|---|---|
|
|
|
|
|
|
|
|
如果另一个用户没有保存文档,就不会有冲突:将应用 FastForwardMergePolicy,你的上传会保存为版本 4。