PageOffice文件并发控制
1. 功能介绍
PageOffice的并发控制功能用来解决多个用户在线编辑同一篇文档可能造成的互相覆盖修改结果的技术难题。
B/S架构下用户访问都是并发的,也就是说经常会出现同时N个用户对一个服务器页面发出请求,这就有可能同一个文档被多个用户同时打开进行编辑。为什么会出现互相覆盖呢?举个简单例子,例如A用户先访问页面打开了一个文档开始编辑,这时B用户访问相同的页面打开了同一个文档也开始编辑,B用户可能很快就完成了文档修改工作并且保存到服务器。随后A用户也完成了工作并保存文档到服务器。这时,服务器上的这个文档已经变成了A用户修改的最后结果,B用户的修改被A的保存操作覆盖从而消失了。
PageOffice的并发控制能够保证同一时间同一篇文档只能由一个人打开,而这样复杂的控制只需要开发者简单对TimeSlice属性赋值即可实现。无论打开的文档是存放在数据库还是存在物理磁盘里,只要对此文档设置了并发控制,那么实现的效果都是只有当前用户可以对此文档进行编辑、保存等操作,其他用户只能以只读的形式打开。在并发控制期间,其他用户有三个选择,分别是“终止”、“重试”和“忽略”。选择“终止”,则关闭当前提示对话框,对此文档不进行任何操作;选择“重试”,则可以了解当前操作用户的编辑时间是否已经用完,同时可以看到当前操作用户的剩余编辑时间;选择“忽略”,则以只读方式打开此文档,即只能阅读此文档,不能对此文档进行编辑、修改、保存等操作。
2. 如何实现并发控制
PageOfficeCtrl1.setTimeSlice(4); PageOfficeCtrl1.WebOpen("doc/abc.doc",PageOffice.OpenModeType. docAdmin, "a");
用户b的打开文档的操作如下:
PageOfficeCtrl1.setTimeSlice(4); PageOfficeCtrl1.WebOpen("doc/abc.doc", PageOffice.OpenModeType. docAdmin, "b");
那么如果对doc/abc.doc这个文档设置了并发控制的话,当a打开此文档后,b只能以只读方式打开此文档,直到a的控制时间结束后,b才可以对此文档进行编辑。
PageOfficeCtrl1.setTimeSlice(4); PageOfficeCtrl1.WebOpen("a.aspx?id=1", PageOffice.OpenModeType. docAdmin, "a");
用户b的打开文档的操作如下:
PageOfficeCtrl1.TimeSlice = 4; PageOfficeCtrl1.WebOpen("a.aspx?id=1", PageOffice.OpenModeType. docAdmin, "b");
那么如果对这个a.aspx?id=1地址下载的文档设置了并发控制的话,当a打开此文档后,b只能以只读方式打开此文档,直到a的控制时间结束后,b才可以对此文档进行编辑。
(1)例如都是两个不同的动态页面地址都可以下载同一个文件:地址a.aspx?id=1和地址b.aspx?id=1下载的是服务器端同一个文档,用户a的打开文档的代码是:
PageOfficeCtrl1.setTimeSlice(4); PageOfficeCtrl1.WebOpen("a.aspx?id=1", PageOffice.OpenModeType.docAdmin, "a");
用户b的打开文档的代码是:
PageOfficeCtrl1.setTimeSlice(4); PageOfficeCtrl1.WebOpen("b.aspx?id=1", PageOffice.OpenModeType. docAdmin, "b");
这样虽然“a.aspx?id=1”和“b.aspx?id=1”打开的是同一个文档,但是因为WebOpen的第一个参数值不同,对于PageOffice来说打开文档的URL也不同,PageOffice认为是两个不同的文件,这种情况并发控制就不起作用了。
(2)例如一个用动态页面地址和一个用文档名结尾的URL地址:访问“a.aspx?id=1”下载的文件就是doc/abc.doc,用户a的打开文档的代码是:
PageOfficeCtrl1.setTimeSlice(4); PageOfficeCtrl1.WebOpen("a.aspx?id=1", PageOffice.OpenModeType. docAdmin, "a");
用户b的打开文档的代码是:
PageOfficeCtrl1.TimeSlice = 4; PageOfficeCtrl1.WebOpen("doc/abc.doc", PageOffice.OpenModeType. docAdmin, "b",);
还是因为WebOpen的第一个参数值不同,虽然打开的是同一个文档,但是因为PageOffice认为两个文档的URL不一样,所以并发控制也不起作用。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218833.html原文链接:https://javaforall.net
