iWebOffice2003/06简单快速集成指南
来源:中国电子政务网 更新时间:2008-03-11
              

为了帮助开发人员能够快速将控件集成于系统中,特借本指南为开发人员介绍控件的工作原理和集成的方法。

下面将以iWebOffice2003的演示程序为例给大家做介绍。示例的开发语言为asp,其他开发语言也会顺带提到。

----------------------------------------------------------------------------------------------------------------------

一、控件的工作原理

iWebOffice控件其实是有两个文件(或者称两个控件)组成的。一个用于集成在页面上的iWebOffice2003.ocx文件和一个用户后台服务器上的iMsgServer2000.dllJAVA开发语言下则是DBstep目录下的iMsgServer2000.class)文件。

控件的工作其实就是前后台通信和处理的过程。iWebOffice2003.ocx集成在页面上,通过javascript脚本调用,用于文档的编辑,以及传递信息到服务器;iMsgServer2000.dll在服务器端运行,用于解析iWebOffice2003.ocx控件发过来的信息包,以及将服务器上处理的结果反馈给客户端的iWebOffice2003.ocx

客户端控件的函数功能分两种:

1、              不和服务器交互的功能,这类函数实现一个文档表面的功能,不需要和服务器端交互(即不向服务器端的处理页面发数据),如:设置书签内容、获取文档的内容、获取文档痕迹、插入本地文档和图片等;

2、              另一类是要和服务器交互的功能,这类函数调用时客户端控件都会将控件中的信息打包发向处理页面,处理页面引用服务器端控件来解析传过来的内容,并进行处理,具体服务器页面程序执行那端代码,在我们的示例程序里都有关于具体交互OfficeServer页面OPTION值的注释,处理完后将信息通过服务器端控件打包,再发送给客户端,这类函数需要一个“客户端”—>“服务器处理页面”—>“客户端”的流程才能完成工作,如:打开文档、保存文档、插入服务器上的文档到当前文档中、套用模版、签名盖章等。

 

二、控件的集成步骤

1、 注册服务器端组件

演示程序包中有一份名称为《COM组件安装.doc》的文档,里面介绍了WINDOWS平台下如何注册服务器端组件,请开发人员参考操作。

开发语言为JAVA的话可以不用注册。只要保持iMsgServer2000.class文件在DBstep目录下就可以了。

2、 数据库准备

演示中提供了演示用的数据库文件,如果希望集成时省点心可以直接用我们提供的表。相信开发之前都会看看演示程序,所以表应该都会有的。使用演示程序提供的表可以方便的使用后面会说到的officeserver文件,不用做大量的修改。开发人员可以先用这些表做集成,等理解了控件的工作方式,可以再使用自己的表。

3、 集成客户端控件

23739A7E-5741-4D1C-88D5-D50B18F7C347" codebase=" iWebOffice2003.ocx#version=6,0,0,4 " >

在需要进行文档编辑和保存的页面上,将上面的代码放在希望显示文档的地方。其中:id是可以开发人员定义的,是指控件在页面上形成对象的名称;classid是固定的,是控件的注册编号;codebase由两部分组成,codebase=后面到#version之前的部分是控件的下载地址,#version=之后的部分是控件的版本号。控件的下载地址和版本号都务必写正确,否则可能造成控件不能正常下载、显示和使用。请注意,版本在这里之间是用”,”来间隔的。

控件的版本可以通过点击iWebOffice2003.ocx文件的属性查看,如图:

 

4、 设置客户端控件的必要属性

在使用控件打开文档之前,需要设置控件的一些必要属性。这些属性都是客户端控件的,所以需要用javascript语句在页面上设置客户端控件对象的这些属性。

请打开演示程序的DocumentEdit.asp页面,找到Load()这个javascript函数——在演示程序中是一个打开文档的函数。首先就可以看到一些控件对象重要属性的设置,如:

webform.WebOffice.WebUrl="<%=mServerUrl%>";

webform.WebOffice.RecordID="<%=mRecordID%>";

webform.WebOffice.Template="<%=mTemplate%>";

webform.WebOffice.FileType="<%=mFileType%>";

webform.WebOffice.EditType="<%=mEditType%>";

webform.WebOffice.UserName="<%=mUserName%>";

上述属性可以在技术白皮书中查到准确的意义和解释,不过在这里还是为开发人员介绍一下。请注意,这里的调用形式为:form.控件对象名.属性=””;

WebUrl:指向一个后台处理页面。当调用需要后台处理的功能函数时,客户端控件会将信息全部打包并发送给这个属性指向的页面。然后由该页面接收信息、处理然后将处理后的信息打包返回给客户端控件。该属性不能为空或出错,否则报错。演示程序中的这个页面一般是officeserver.xxx页面,如officeserver.aspasp开发)、officeserver.jspjsp开发)、OfficeServer.aspx.csc#开发)等等。

RecordID:文档编号。用于向后台传需要打开的文档的编号。演示程序中是用当前时间做编号,开发人员可以根据自己系统的情况来设置。可以为空,为空时如果调用打开文档函数则会判断是否有模版编号,如果有打开模版;没有模版编号或打开模版失败时打开一个空白文档。

Template:模版编号。用于向后台传需要打开的模版的编号。需要打开模版时设置,不打开模版时可以为空。

FileType:文件类型。要打开的文档类型,可以是.doc/.xls/.ppt/.wps

EditType:编辑方式。打开文档后的编辑方式,可以是0=阅读;1=修改[无痕迹]2=修改[有痕迹]3=核稿。EditType还有一个更为灵活的设置方式能满足用户各种表现形式的需要,更多设置请参考技术白皮书中的相关内容。

UserName:编辑用户。编辑文档的用户。

上述属性中WebUrlFileTypeEditTypeUserName为重要属性,不能空缺,请开发时务必注意。客户端控件对象更多的属性及其意义,请参考技术白皮书中的内容。

5、 打开、保存和关闭文档

刚才的Load()这个javascript函数在属性设置的后面有一个WebOpen()接口;这个是用来打开文档的函数。这个函数是没有参数的,因为必要的信息都在之前的属性中设置了。开发人员在设置完那些属性后,调用WebOpen()就可以打开文档了。

保存文档的函数是webform.WebOffice.WebSave()。调用这个函数,客户端控件将文档内容和控件属性都发送到后台处理页面(officeserver.asp),然后在该页面中来实现保存。

在退出文档编辑页面时,需要调用关闭文档的接口函数:webform.WebOffice.WebClose()用于释放资源,一般可以在页面bodyonunload事件中来调用。

上述函数在演示程序中都能找到。

6、 officeserver.asp文件的作用

Officeserver在演示程序中就是后台处理页面。开发人员开发时名称可以根据自己需要,但是一定要在使用到了控件的页面中为控件对象的weburl属性指定正确的访问处理页面的路径。注意,路径为绝对路径,如:http://iweboffice/officeserver.asp。如果开发人员现在是使用演示程序中的表结构,并且数据库连接对象也使用名为DBDemoSession对象来保存,那么演示程序的Officeserver文件基本上可以直接使用,不用修改。(JAVA开发的话就是修改数据库连接类了:iDBManager2000.java

用编辑器打开这个文件,我们了解一下里面的结构。

前面定义了变量和函数,然后从“mFilePath=Server.MapPath(".")”开始,是程序的起点。首先实例化了服务器组件的对象,然后用这个对象来接受客户端传的信息。接着解析信息,并判断传过来的“OPTION”的变量值。这个“OPTION”值是客户端控件根据用户调用函数的不同自动进行设置的(接口函数调用后对应OPTION值的变化在技术白皮书中有对照,同时在我们的示例程序里都有注释说明)。然后在这里,针对不同的OPTION值需要有不同的处理方式,也就是对不同的客户端函数调用,这里做不同的处理。演示程序提供了一些处理的方式,开发人员可能需要针对自己的系统情况做一些修改或取舍。比如:有些查询的数据库表、字段可能要修改,有些演示程序中不足的功能需要自己添加。

同时,这里可以看到之前控件一些重要的属性,在这里会被用到。如mRecordIDmFileTypemUserName等等。

这里请注意mFileBody这个对象,他用来保存WORD文档的内容。所以在需要对文档进行操作的时候都会用到这个对象,比如:打开/保存文档、打开/保存模版、插入文档等等。在打开文档时注意将mFileBody的内容付给MsgObj.MsgFileBody;而保存时将MsgObj.MsgFileBody付给mFileBody

7、 打开/保存文档流程说明

为了开发人员更清楚的理解控件的工作方式,这里以流程的形式讲述一下打开/保存文档的处理过程。

打开文档:流程开始:1、选择列表中的一条要打开的数据      2、数据传进DocumentEdit页面【文档编号(RecordID)、文档类型(FileType)、打开方式(EditType)、打开用户(UserName)被传进来】      3、传进来的信息被设置给客户端控件的属性       4、属性设置后调用控件WebOpen()函数打开文档      5、控件OPTION值被自动设置成LOADFILE,控件的全部信息被控件打包,传给WebUrl指定的页面      6、处理页面实例化服务器端组件     7、使用服务器组件对象来接收传过来的信息        8、解析数据包,判断OPTION     9、发现OPTION值为LOADFILE,进入LOADFILE处理方式      10、取文档编号(RecordID     11、通过RecordID检索数据库,找到需要打开文档的记录      12、打开保存文档的大字段,将数据写进mFileBody      13、将mFileBody中的数据付给服务器端控件      14、服务器端控件将信息打包      15、通过Response对象将数据包写回客户端      16、客户端解析数据包信息,根据EditType设置的方式将文档显示出来。流程结束

保存文档:流程开始:1、在这之前我们假设控件必要的属性已经被设置     2、使用WebSave()函数保存文档      3、控件OPTION值被自动设置成SAVEFILE,控件的全部信息被控件打包,传给WebUrl指定的页面     4、处理页面实例化服务器端组件     5、使用服务器组件对象来接收传过来的信息     6、解析数据包,判断OPTION     7、发现OPTION值为SAVEFILE,进入SAVEFILE处理方式     8、文档编号(RecordID)并将文档数据付给mFileBody      9、通过RecordID检索数据库,找到需要打开文档的记录,如果没有则新建     10、保存数据至数据表中     11、清除文档数据,服务器端控件将信息打包      12、通过Response对象将数据包写回客户端       13、客户端解析数据包信息,返回是否保存成功的信息。流程结束

三、演示程序的结构

示例程序环境如下: 

页面文件:

页面文件

说明

DocumentList.xxx

数据列表页面,用于打开、新建文档

DocumentEdit.xxx

文档编辑页面

DocumentSave.xxx

表单内容保存页面,用于保存文档编辑页面中表单里的信息

OfficeServer.xxx

文档信息后台处理的交互页面

目录Template

模版管理文件夹

TemplateList.xxx

模版列表页面

TemplateEdit.xxx

模版编辑页面

TemplateForm.xxx

套用模版用的页面

TemplateSave.xxx

模版提交保存的页面

TemplateDel.xxx

模版删除页面

目录BookMark

标签管理文件夹

BookMarkList.xxx

标签列表页面

BookMarkEdit.xxx

标签编辑页面

BookMarkAdd.xxx

标签新增页面

…………

…………

目录Signature

印章管理文件夹

目录Document

保存文档在服务器的文件夹中

目录HTMLHTMLIMAGE

保存转换成HTML页面的文件夹

数据表:

表名

说明

Document

文档基本信息表,保存基本信息

Document_File

文档正文信息表,保存数据

Template_File

模板信息表,保存模版数据

Version_File

文档版本正文信息表,保存版本的文档信息

Signature

签章基本表

Document_Signature

文档签章记录信息表,保存针对文档中的签名和印章信息

BookMarks

标签基本表(如果应用到标签功能,就需要该表)

Template_BookMarks

模板对应标签表,保存定义模版时加入在模版中的标签

   

 

全文完。