为了帮助开发人员能够快速将控件集成于系统中,特借本指南为开发人员介绍控件的工作原理和集成的方法。
下面将以iWebOffice2003的演示程序为例给大家做介绍。示例的开发语言为asp,其他开发语言也会顺带提到。
----------------------------------------------------------------------------------------------------------------------
iWebOffice控件其实是有两个文件(或者称两个控件)组成的。一个用于集成在页面上的iWebOffice2003.ocx文件和一个用户后台服务器上的iMsgServer2000.dll(JAVA开发语言下则是DBstep目录下的iMsgServer2000.class)文件。
控件的工作其实就是前后台通信和处理的过程。iWebOffice2003.ocx集成在页面上,通过javascript脚本调用,用于文档的编辑,以及传递信息到服务器;iMsgServer2000.dll在服务器端运行,用于解析iWebOffice2003.ocx控件发过来的信息包,以及将服务器上处理的结果反馈给客户端的iWebOffice2003.ocx
客户端控件的函数功能分两种:
1、 不和服务器交互的功能,这类函数实现一个文档表面的功能,不需要和服务器端交互(即不向服务器端的处理页面发数据),如:设置书签内容、获取文档的内容、获取文档痕迹、插入本地文档和图片等;
2、 另一类是要和服务器交互的功能,这类函数调用时客户端控件都会将控件中的信息打包发向处理页面,处理页面引用服务器端控件来解析传过来的内容,并进行处理,具体服务器页面程序执行那端代码,在我们的示例程序里都有关于具体交互OfficeServer页面OPTION值的注释,处理完后将信息通过服务器端控件打包,再发送给客户端,这类函数需要一个“客户端”—>“服务器处理页面”—>“客户端”的流程才能完成工作,如:打开文档、保存文档、插入服务器上的文档到当前文档中、套用模版、签名盖章等。
演示程序包中有一份名称为《COM组件安装.doc》的文档,里面介绍了WINDOWS平台下如何注册服务器端组件,请开发人员参考操作。
开发语言为JAVA的话可以不用注册。只要保持iMsgServer2000.class文件在DBstep目录下就可以了。
演示中提供了演示用的数据库文件,如果希望集成时省点心可以直接用我们提供的表。相信开发之前都会看看演示程序,所以表应该都会有的。使用演示程序提供的表可以方便的使用后面会说到的officeserver文件,不用做大量的修改。开发人员可以先用这些表做集成,等理解了控件的工作方式,可以再使用自己的表。
在需要进行文档编辑和保存的页面上,将上面的代码放在希望显示文档的地方。其中:id是可以开发人员定义的,是指控件在页面上形成对象的名称;classid是固定的,是控件的注册编号;codebase由两部分组成,codebase=后面到#version之前的部分是控件的下载地址,#version=之后的部分是控件的版本号。控件的下载地址和版本号都务必写正确,否则可能造成控件不能正常下载、显示和使用。请注意,版本在这里之间是用”,”来间隔的。
控件的版本可以通过点击iWebOffice2003.ocx文件的属性查看,如图:
在使用控件打开文档之前,需要设置控件的一些必要属性。这些属性都是客户端控件的,所以需要用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.asp(asp开发)、officeserver.jsp(jsp开发)、OfficeServer.aspx.cs(c#开发)等等。
RecordID:文档编号。用于向后台传需要打开的文档的编号。演示程序中是用当前时间做编号,开发人员可以根据自己系统的情况来设置。可以为空,为空时如果调用打开文档函数则会判断是否有模版编号,如果有打开模版;没有模版编号或打开模版失败时打开一个空白文档。
Template:模版编号。用于向后台传需要打开的模版的编号。需要打开模版时设置,不打开模版时可以为空。
FileType:文件类型。要打开的文档类型,可以是.doc/.xls/.ppt/.wps。
EditType:编辑方式。打开文档后的编辑方式,可以是0=阅读;1=修改[无痕迹];2=修改[有痕迹];3=核稿。EditType还有一个更为灵活的设置方式能满足用户各种表现形式的需要,更多设置请参考技术白皮书中的相关内容。
UserName:编辑用户。编辑文档的用户。
上述属性中WebUrl、FileType、EditType和UserName为重要属性,不能空缺,请开发时务必注意。客户端控件对象更多的属性及其意义,请参考技术白皮书中的内容。
刚才的Load()这个javascript函数在属性设置的后面有一个WebOpen()接口;这个是用来打开文档的函数。这个函数是没有参数的,因为必要的信息都在之前的属性中设置了。开发人员在设置完那些属性后,调用WebOpen()就可以打开文档了。
保存文档的函数是webform.WebOffice.WebSave()。调用这个函数,客户端控件将文档内容和控件属性都发送到后台处理页面(officeserver.asp),然后在该页面中来实现保存。
在退出文档编辑页面时,需要调用关闭文档的接口函数:webform.WebOffice.WebClose()用于释放资源,一般可以在页面body的onunload事件中来调用。
上述函数在演示程序中都能找到。
Officeserver在演示程序中就是后台处理页面。开发人员开发时名称可以根据自己需要,但是一定要在使用到了控件的页面中为控件对象的weburl属性指定正确的访问处理页面的路径。注意,路径为绝对路径,如:http://iweboffice/officeserver.asp。如果开发人员现在是使用演示程序中的表结构,并且数据库连接对象也使用名为DBDemo的Session对象来保存,那么演示程序的Officeserver文件基本上可以直接使用,不用修改。(JAVA开发的话就是修改数据库连接类了:iDBManager2000.java)
用编辑器打开这个文件,我们了解一下里面的结构。
前面定义了变量和函数,然后从“mFilePath=Server.MapPath(".")”开始,是程序的起点。首先实例化了服务器组件的对象,然后用这个对象来接受客户端传的信息。接着解析信息,并判断传过来的“OPTION”的变量值。这个“OPTION”值是客户端控件根据用户调用函数的不同自动进行设置的(接口函数调用后对应OPTION值的变化在技术白皮书中有对照,同时在我们的示例程序里都有注释说明)。然后在这里,针对不同的OPTION值需要有不同的处理方式,也就是对不同的客户端函数调用,这里做不同的处理。演示程序提供了一些处理的方式,开发人员可能需要针对自己的系统情况做一些修改或取舍。比如:有些查询的数据库表、字段可能要修改,有些演示程序中不足的功能需要自己添加。
同时,这里可以看到之前控件一些重要的属性,在这里会被用到。如mRecordID、mFileType、mUserName等等。
这里请注意mFileBody这个对象,他用来保存WORD文档的内容。所以在需要对文档进行操作的时候都会用到这个对象,比如:打开/保存文档、打开/保存模版、插入文档等等。在打开文档时注意将mFileBody的内容付给MsgObj.MsgFileBody;而保存时将MsgObj.MsgFileBody付给mFileBody。
为了开发人员更清楚的理解控件的工作方式,这里以流程的形式讲述一下打开/保存文档的处理过程。
示例程序环境如下:
页面文件:
页面文件 |
说明 |
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 |
保存文档在服务器的文件夹中 |
目录HTML或HTMLIMAGE |
保存转换成HTML页面的文件夹 |
数据表:
表名 |
说明 |
Document |
文档基本信息表,保存基本信息 |
Document_File |
文档正文信息表,保存数据 |
Template_File |
模板信息表,保存模版数据 |
Version_File |
文档版本正文信息表,保存版本的文档信息 |
Signature |
签章基本表 |
Document_Signature |
文档签章记录信息表,保存针对文档中的签名和印章信息 |
BookMarks |
标签基本表(如果应用到标签功能,就需要该表) |
Template_BookMarks |
模板对应标签表,保存定义模版时加入在模版中的标签 |
全文完。