在线Word编辑

在我们的OA项目中,一般都有一个需求就是在线编辑文档的功能。在一般的OA产品中,一般会集成一些第三方的Office组件,如NTKO等等,第三方的组件功能很强大,我也不是很清楚这些功能的实现细节,但只是单纯的在线编辑来说,现在有一种比较简单的方案,就是使用基于HTTP 1.1扩展而来的WebDAVWeb Distributed Authoring and Versioning)。

WebDAV可以直接使用浏览器、网上邻居来管理远程Web服务器上的WebDAV文件夹中的文件,在Windows系统中,要完成这个功能需要服务器和客户端双方面的协调。

服务器端的设置

开始WebDAV扩展(使用SharePoint.OpenDocuments时非必需)

我们在IIS中选择“Web 服务扩展”,找到WebDAV,然后允许。

由于在线编辑需要在客户端直接修改服务器的文件,所以我们必需开始站点或者虚拟目录中打开“写入”权限:

 

在目录安全性中,这里中我现在的设置是要开启匿名访问,以方便公网用户访问站点,然后不开启“集成Windows验证”,这样可以避免在访问站点时需要输入用户名和密码的过程。但由于开启了“写入”的权限,这会给服务器造成安全上的隐患,所以在设置的时候需要根据自己的情况来采取相应的安全策略。我现在的程序是跑在内网的OA,所以安全级别是很低的,所以我进行了这样的设置。

在开启了站点或者虚拟目录的“写入”权限,并开启了默认的匿名账户且关闭了“集成Windows身份验证”后,现在需要为存储允许修改的文件的目录进行权限的设定。

我存储文件的目录为attachment,它里面存储了我要向分众开放的或协作编辑的文件,在使用VS2008默认发布后它的权限默认是继承上级目录的,所以首先要取消继承,然后来设定自己的权限:

去掉“允许父项的继承权限传播到该对象和所有子对象,包括那些此明确定义的项目”,然后点击应用,会弹出如上对话框,这里要点击“复制”按钮,以便将父级的权限复制到当前的目录,这样attachment就有一父目录的权限,省去了定义一些基本权限的工作。当然如果你点击了删除以后,这个attachment目录就会变成空权限的,然后就得自己一步步的加一些基本权限了,比如Administrator的账号权限等等。

在获取了父对象的权限后,默认Internet 来宾账号是被拒绝的,这里需要对这个账号进行编辑,点击“Internet 来宾账号”,然后点击“编辑”按钮,后弹出如下对话框:

这里根据一般读取和更改、写入的权限是要设置的,否则就有可能不能读取,或者读取了不能修改。当然,这个要根据你的需求,假如你只是想让用户打开浏览而不需要更改,当然就可以适当的去掉“更改”和“写入”的权限。我现在的需求是能读能写,但不能删除,所以我去掉了与“删除”有关的两个选项。确定好要设定的权限后,就可以点击“确定”按钮了。

为了使我们对attachment目录设定的权限使得子目录和文件也能够相应的继承,还需要勾选“用在此显示的可以应用到子对象的项目替代所有子对象的权限项目”复选框,这样就可以在父目录设定的权限覆盖了所有子目录和文件的权限,方便我们统一进行管理。

经过以上设置,服务器端的设置工作就完成了。

客户端

如果是需要使用浏览器来打开和编辑服务器上的文档,那么这里需要客户端打开WebClient这个服务。但是我现在的需求只是能在客户端打开服务器端的Word文档,这个可以使用其它的方式。

Office XP以后,Office安装后就带了一个OCX控件,这个控件允许我们调用它来编辑服务器上的文件,我们可以使用JavaScript脚本来调用它:

        function getSPOpenDocumentObject() {

            if (window.sharePoingOpentDocuments) {

                return window.sharePoingOpentDocuments;

            }

            else {

                var progids = ["SharePoint.OpenDocuments.3", "SharePoint.OpenDocuments.2", "SharePoint.OpenDocuments.1"];

                for (var i = 0; i < progids.length; ++i) {

                    try {

                        return (window.sharePoingOpentDocuments = new ActiveXObject(progids[i]));

                    }

                    catch (e)

                    { }

                }

 

                return null;

            }

        }

在得到了这个对象以后,我们就可以使用getSPOpenDocumentObject().EditDocument('http://xxx.com/xx.doc') 来编辑文档了。

 
注:实现这个需求其实没有涉及WebDAV这个功能,但是写在里面算作是一个记录吧。要实现在线编辑,其实只要将服务器的权限设对,然后在客户端调用OCX控件就可以达到目的了
由于我是在Word里编辑的,而且没有保留抓图文件,而转到随笔里就没法带上图片了,所以我将Word文件上传,有需要看图片的可以直接看Word文档:
Word文件下载
posted @ 2009-09-13 14:12  吴东雷  阅读(2270)  评论(0编辑  收藏  举报