一、什么是版本管理?

在介绍版本管理之前,我们先设想一个场景:

某天领导要求我们做一份表格,需要统计公司所有员工的餐费数据用于报销,于是我们统计了所有的餐费数据,整理为了一个表格发送给领导,美滋滋的准备下班。

这个时候,领导说,试用期内的员工餐费数据需要单独处理,分开报销,于是我们又重新筛选出了试用期内员工数据,重新做了表格。

接着领导又说,经过财务部讨论,最终还是决定一起报销了。

我们可能就傻眼了,已经将表格内试用期内员工数据删除了,再一个个添加进去也太麻烦了!

如果我们之前将统一报销的表格另外保存就好了,这样就可以直接拿来使用了。

当你产生了这种念头,说明已经有了版本管理的需求。

版本管理其实就是一种记录文档变化的方式,用于保存特定版本的内容。当我们需要查看某一版本的文档时,再具体查看即可,如果需要对其修改,再另存为一个新版本的文档。

按照这样的思路,我们延续刚才的场景:

此时我们电脑中已经保存了多个版本文档:费用update1.xlsx、费用update2.xlsx、费用update3.xlsx…….

随着员工信息的变动,文档的个数也在逐个递增。有时候一天内入职/离职多个同事,这个表会更新好几遍;还会出现因粗心保存错了,当日的数据又得重新再填的问题……

随着困难逐步暴露出来,我们终于意识到靠人工去维护各个版本的文档还是很困难的。

二、文档版本管理的技术难点

上升到企业角度,文档管理工作更是至关重要。由于企业文档管理工作不到位造成的经济损失或信用危机更是屡见不鲜。在企业文档版本管理中,常见的问题如下:

1、文档版本混乱

常规的文档管理多是通过区分文件名的方式来判断的,正如前面所述,当文件频繁修改、版本数量不断增多时,极易出现版本混乱、查找困难等问题。在需要共享文件时,也易出现发送错误版本的可能性。

2、文档版本冲突

当某位同事修改文档后,需要将这个文件共享给所有同事,并且其他同事也需要同步修改,以保证文档的一致性。如果多位同事同时做出修改,整个同步过程将非常复杂且难以人工判断,极易出现遗漏、修改错误等问题。

3、数据安全无法保证

多人维护同一个文件时,编辑权限难以对应具体角色,修改过程中容易出现编辑重复、编辑错误、甚至于数据丢失等问题。

4、操作记录难以追溯

在最后一位同事完成修改行为之后,我们拿到的是一份最新文档。但是从文档中无法判断出某一个数据的修改是由哪位同事、什么时间、如何修改的。这就造成如果出现问题,容易互相推诿责任。

三、企业文档管理解决方案

庆幸的是,随着现在互联网技术的发展,已经有成熟的技术可以帮助我们来解决这些困难。本文基于葡萄城纯前端类Excel表格控件SpreadJS为例,提供一个解决版本管理的优雅设计和实现思路。

SpreadJS是一款可嵌入Web系统的纯前端类Excel的表格控件,在纯前端的运行环境下,可以双向兼容90%以上Excel原生功能,并保持了类Excel的操作体验,可以让熟悉Excel的用户无缝衔接,无需培训即可上手使用。

下图我们所看到的就是使用SpreadJS做的一个在线文档管理系统示例demo:

用户可直接新建表格,也可以加载本地的excel文件,SpreadJS都有提供相应的接口。

同样的,也提供了导出json或excel的功能,可以根据实际业务需求保存至服务端或数据库。

新建或加载文件后,我们就可以借助SpreadJS来做一些编辑或修改行为。

上图所示是基于SpreadJS二次开发实现的组件化在线表格编辑器,可以看到整体的设计风格是与Excel高度类似的,也更符合用户的操作习惯。可以通过操作工具栏提供的内置功能,或者基于SpreadJS现有API进行二次开发,编辑修改文档。

SJS提供了丰富的命令和事件来监听修改行为,在本demo中,每做一次修改之后,使用SpreadJS的toJSON方法进行数据的导出,来记录每一次的变动情况。

如果有多个修改行为,可以在这些行为完成之后,对此文档进行导出保存,来作为一个新的版本。

相应的,如果想还原至某一个版本或记录,就可以使用fromJSON方法加载这个版本对应的数据进行导入。

除此之外, SpreadJS在权限设计方面也给予了开发者很大的自由度,作为一个前端控件产品,开发者可以结合实际业务需求,对不同权限给予相应的可见性、文件加载限制。
并且,SpreadJS提供了相应的接口,可以设置表单、行列等元素是否可见、利用表单保护功能,可以对单元格的编辑权限进行限制;也可以根据用户实际需求自定制工具栏按钮的可用状态等。
丰富灵活的API接口,满足了更多用户的定制化需求。

总体来说,在企业文档管理上,SpreadJS发挥的优势如下:

1、文档版本有序管理

使用SpreadJS构建的版本管理系统可以有效解决文档版本混乱问题,借助SpreadJS提供API,可以对文档生成时机精确判别,自动生成版本文档。

2、避免文档内容冲突

借助SpreadJS可建立统一的文件管理平台,不同用户可在线访问同个文件,实现文件间的传递或同步,避免多人编辑出现的内容冲突问题

3、权限控制保证数据安全

利用web项目的开发优势和SpreadJS提供的相关API,可对不同角色设置相应操作权限,满足部分单元格禁止编辑、文件只读、审批上报等需求,保证文件数据的安全性。

4、降低成本提升开发效率

SpreadJS兼具 “高性能、跨平台、与 Excel 高度兼容”的产品特性,结合配套后端产品GcExcel可快速开发满足企业需求的文档版本管理系统,保证文件版本质量的同时,也提升了团队开发效率,降低企业开发成本。

本文完整的演示及Demo工程源码,请访问:葡萄城表格技术 - 文档版本管理

更多纯前端表格在线demo示例:hhttps://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html

纯前端表格应用场景:https://www.grapecity.com.cn/developer/spreadjs\#scenarios

移动端示例(可扫码体验):http://demo.grapecity.com.cn/spreadjs/mobilesample/