[摘要]流星雨 一、引言 我们知道,现在随着Internet应用的不断深化,人们对Web服务器所查询的信息就不仅仅限于以文件方式存放于服务器端的静态超文本文件。有时需要借助关系新数据库来存放变化的数据,并在Web服务器于数据库服务器之间以CGI等方法建立两者的连接,使Web服务器能够实现对数据库的动态的...
流星雨
一、引言
我们知道,现在随着Internet应用的不断深化,人们对Web服务器所查询的信息就不仅仅限于以文件方式存放于服务器端的静态超文本文件。有时需要借助关系新数据库来存放变化的数据,并在Web服务器于数据库服务器之间以CGI等方法建立两者的连接,使Web服务器能够实现对数据库的动态的及时的查询,并将最新的数据(结果)返回给浏览器。
于是在Internet应用中就出现了如图1所示的这样一种结构。
图1 客户浏览器—Web服务器—数据库服务器三级结构
当然这一结构的实现,用ASP等开发网络数据库的软件也能够实现,并且正在成为日益流行的趋势,但是对于已经拥有大量用户的PB来说,其对Internet的支持就可以让PB用户迅速转移到Web的开发上来而不需要再重新学习一门语言。
另外,我们如果稍稍留心的话就不难发现,现在用PB开发出来的所谓的MIS系统千篇一律几乎都是一个模式:用户先登录,进入系统后出现一个MDI窗口,带有数项菜单,菜单下面又有若干菜单,通过菜单打开一个个窗口……当然并不是说这种传统的方式有什么缺点,只是它和当今正日益流行的网页的形式比较起来,还是逊色不少,网页的友好形式更受广大用户的欢迎。而PB的Web方式正是迎合了当今Internet时代发展的潮流——可以用网页的形式再现PB的传统强大功能。
而且,随着越来越多的企事业单位上网,很多单位不仅仅要有自己的一套MIS系统,而且还迫切需要开发自己的网络数据库系统,来向外界更好的宣传自己。这时候一般的选择往往是这两种系统各自独立的开发一套,不可避免地造成了一定程度的浪费。并且这两种系统的开发商是同一家还好,若是两家开发商,那么在不同的时候还要进行不断的协商,这不能不说又是一种浪费。如果能有一种方法可以把两种系统最大限度的把两种系统结合起来,就能够节约各种财力、人力和物力,还会大大提高办公效率。
二、PB6.0/6.5的Internet Developer Toolkit(IDT)
经典的开发工具PB6.0/6.5,对Internet支持可以说是它的一个主要特性,可以说这是在IDT基础上的一个全新的飞跃。通过将IDT(Internet Developer Toolkit)工具集成到PB的开发环境中,通过这些工具,开发人员可以将现有的一些应用移植到Internet中,也可以开发新的面向Internet的应用。
在图1所示的的结构下,PB提供了Internet应用的两种访问方式。这两种访问方式是:
。基于Plugin(插入件)的Client/Server方式
。基于Web.PB的Browser/Server方式
对应于这两种方式,主要是在IDT上选择的不同。
采用PB的IDT开发应用的方法和PB的一般应用的开发方法是类似的,通过这些工具,可以将现有的一些应用移植到Internet中,也可以开发新的面向Internet的应用。
在PB6.0/6.5中,提供了Web.PB、DataWindow Plug-in、Window Plug-in和Window Active等一系列面向Internet的工具,每个工具所实现的功能、所依赖的平台都不尽相同。PB的IDT主要有三种部件:
1.DataWindow Plugin
使用该Plugin可以在IE或者Netscape等浏览器中直接查看用PowerBuilder的Datawindow生成的报表--PSR格式的文件。当然不能直接修改了,也不是动态生成的。而是阅读已经生成好并存下来的文件。
2. Window Plugin
这个Plugin可就不是仅仅显示静态数据了。它在浏览器中中运行PB生成的Child Window,而这个Child Window是包含在PB的动态连接库(PBD)中传送过来的。用起来就象独立的PB程序一样,可以有数据窗口、OLE、OCX等各种各样的控制,可以远程操作数据库。可以极大的发挥PB的功能。
3. WEB.PB
Web.PB是用来开发基于Web应用的基本部件,该部件本身就是Web上的一个网关应用程序。该工具提供从 Web服务器到PowerBuilder应用服务器的访问,允许用户在 Internet以及Intranet下,通过Web对数据库进行近于完全的操纵。同时,通过Web.PB,动态创建HTML文文件亦成为可能。Web.PB程序是Web服务器和 PowerBuilder应用服务器相连接的桥梁。它支持CGI、ISAPI、NSAPI、MSAPI等多种网关程序接口。
不管怎么样,必须要明确这样一个结论,PB的Internet应用开发是由两个部分组成的,一个是面向服务器的应用程序,主要采用的是Web.PB技术。另外一个是面向客户端的技术,包括各种内插件和ActiveX技术。这是两种不同的技术路线,在实施的时候,必须加以充分的考虑。从另外一个角度可以看出,各种内插件和ActiveX技术是为了将现有的应用扩展到Internet中去,而Web.PB主要是面向新应用的开发。当然这也不是绝对的,Plug-in技术照样可以开发新的应用特别是Intranet的应用。
三、开发策略的选择
1.PB6.5的Internet/Intranet总体计划实施策略选择
现在好象一直存在着“瘦客户端”和“胖客户端”的争论,这里不评价这两者的优劣,但是这肯定是实施策略时要考虑到的问题。如果希望采用纯的“瘦客户端”,那么两种Pug-in技术和Active技术就不是最好的选择。
采用“瘦客户机” 策略——即Web.PB方式,能够减少在客户端软件方面的投资,因为这种瘦客户机一般只需要浏览器这种核心部件。另外,瘦客户机对计算机的性能要求也比较低,不需要客户机承担多少运算的负载,大量的运算任务都由服务器来承担。
如果采用“中间”策略,那么,可以在客户端加载Plug-in和ActiveX(现在的浏览器一般都支持这种技术),并且支持MINE格式的内容。这样一来,客户即便能够承担一些表现逻辑方面的任务。但是,业务逻辑的大部分运算任务仍然在服务器端完成。这种其实就是Window Plug-in方式,它尤其适用于Intranet网中。
最后一种是传统的C/S策略,其实就是“胖客户”方式。由于大部分程序都驻留在客户端,它对客户机的要求也很高。这种方式在现在的Intranet中估计迟早要被淘汰。
在具体的IDT工具的选择策略上,主要有三个方面的选择:
1)如果是需要实现客户端访问数据库并在客户机上进行业务处理,最好使用Window Plug-in,它不仅可以最大限度地发挥PB的强大功能,而且对用户非常友好,告别老套的菜单走向了丰富多彩的网页形式。
2)如果客户端需要预先编制好的报表,应采用DataWindow Plug-in为上佳。它能够在浏览器内显示已经生成并存储在Web服务器上的PSR报表。因为这个报表是预先生成的,所以不需要访问数据库。用户可以在浏览器内查看、打印和保存报表。PSR报表的格式多样,能够给WWW浏览增添不少风采。
3)如果需要使用集中控制的数据库和业务逻辑程序,那么最好使用Web.PB。
2.开发系统具体策略的考虑及分布式的介绍
由于要建立的Web方式的图书馆系统主要是基于Intranet的,结合上面所说的几种考虑,因此大部分应用就采用了Window Plug-in的方式,这不仅能体现PB一向的强大功能,而且能充分让你去发挥其功能,把MIS系统管理和丰富多彩的网页结合起来了。
Web服务器用的是微软的PWS(Personal Web Server),Web.PB用的是PBCGI60.EXE(表示是CGI标准),Sybase数据库,NT平台。
开发过程中大量使用了数据库连接,单、多条件数据查询以及各种控件的.Visible属性,尤其是在Tab控件中用到了selectionchanged事件的newindex属性(以便每重新点击一个Tabpage可以重新操作而不受以前操作的影响),大大增强了表现效果。
还要补充一点的是,在建立应用的过程中要注意的一点是不要使用全局对象,特别是在child窗口不能用SQLCA作为事物对象(它应该算一个全局变量,Window Plug-in方式不支持全局变量),一定要重新自定义一个事物对象mytransaction。若使用SQLCA单独运行窗口还可以,一旦要在客户端浏览器中出现肯定会报错,而在这儿几乎没有哪本参考书特意强调过,初学者创建自己的应用时很容易在此走弯路。
以上只算是建立了PB的应用程序,还要做的有:生成.PBD文件并放到web共享目录下;编写HTML语句嵌入窗口,放到服务器目录下,这里的关键性的HTML语句是:
<body> <embed src=cgi-pbd/books.pbd width=700 height=600 window=w_bugao> </body>
Web.PB是基于PowerBuilder分布式应用技术之上的,Web.PB替代了客户端的代理而已。在PB分布式应用中,PB客户应用和PB服务器应用程序之间的对象分布如所图2所示。
图 2
使用Web.PB进行基于服务器的开发,可以让PB建立基于服务器的Web应用,允许Web浏览器访问分布式PB应用程序的服务。这些分布式的基于服务器的应用程序可以动态生成HTML页或将HTML发送到Web浏览器。这允许用户支持真正的“瘦”客户机体系,也就是在客户机上只需一个浏览器。这种方式也可以称为纯的Browser/Server方式。
如图2所示,客户端通过Proxy对象定义服务器应用程序之中的应用对象。而Web.PB不同于传统的客户端应用,Web.PB不同于传统的客户端应用,Web.PB文件取代了客户端的应用程序,起作用相当于访问服务器应用程序的接口。在浏览器中,用户可以访问分布式PB应用程序中的任何不可视对象的属性和方法。用户还可以向方法传递参数。Web服务器与Web.PB通信将这些信息发送给分布式PB应用程序,应用程序会执行方法并将结果以动态HTML的形式返回给浏览器。
建立Web.PB应用的过程如下:
a. 建立并测试服务应用(这里是pb_net)
·创建应用对象
·创建应用启动窗口
·创建传输对象
·创建不可视用户对象
·编写用户对象函数
b. 编写可调用服务应用的HTML页面,这可通过FrontPage等主页编辑器,也可通过Web.PB的编程WIZARD来做。
c. 将应用编译成可执行文件。
d. 编辑Web.PB的几个初始化文件
e. 设置Web服务器(主要是文件类型和Web目录的设置等)
f. 启动服务应用和Web服务器。
g. 用浏览器访问应用。
服务应用的编写和分布式应用类似,就不再赘述。这里需要补充一点的是,编写用户对象是Web.PB应用中的头等大事,并且Web.PB中的数据窗口一般用的都是Datastore。这里创建了一个用户对象uo_pbdemo,实际上用户对象应该尽量要创建的多才好,特别是在那些大型的应用中。
Web.PB方式的应用都是通过HTML中的锚点Anchor(<A>)定义的超链接或者是FORM(<FORM>)元素的可输入域中键入信息后单击Submit按钮(定义的也有超链接)来激活Web.PB实现的。而这些超链接的对象形式上都是指向各个用户对象中的函数的(这些函数的返回值均是一系列的HTML文文件),这一点务必要明确,其实这一点也是Web.PB方式的核心思想概念所在。
这里uo_pbdemo建立了数个函数,挑出颇具代表性的一个的描述如下:
//从数据库中提取新书介绍
//f_retrieve_newbooks()无参数,返回值是string类型的
string ls_html
string ls_search_arg
long ll_rows_retrieved
ds_names = CREATE datastore
ds_names.dataobject="d_newbooks"
ds_names.settransobject(gtr_trans)
ll_rows_retrieved= ds_names.retrieve()
IF ll_rows_retrieved > 0 THEN
ls_html=ds_names.object.datawindow.data.htmltable
ELSE
ls_html = '此次找不到新书!'
END IF
RETURN ls_html
这是非常关键的一段代码,其实就是调用了数据窗口的htmltable属性而已,要知道这种思想可以说是贯穿了整个Web.PB应用的全过程。
启动浏览器就可以检索到新书了。当然还有一个前提是:服务器确定是在监听,即刚建立的pb_inet应用必须在运行中。
最后还要在服务器端配置几个INI文件:Hosts文件、services文件和PBWEB.INI文件,当然这项工作实际上应该在整个工作之前所做的。
四、对三种开发方式的总结
1.关于Window Plug-in的几点体会
1)Window Plug-in最适用于Intranet网,前面提到过原因,因为需要浏览器的支持,而且需要在浏览器端安装程序文件。另外一个原因就是,Window Plug-in主要的执行环境还是浏览器本身所在的本地机环境,只有在内部网的情况下,才能够对应用执行的环境进行比较好的控制,避免出错。
2)Window Plug-in适用于在浏览器端有比较复杂的用户接口的情况,可避免编写大量的HTML和CGI程序。开发Internet经常遇到的一个难题就是在客户端没有足够的组件。现在,有了Window Plug-in,只要愿意,就能把独立的PB应用程序转移到浏览器中来执行。
3)并且,Window Plug-in移植和修改现有的应用程序到Web上也可以说是不费什么力气,还可以充分享受数据窗口的强大功能。
4)在Intranet环境下,安全等因素就不是那么重要了,可允许应用程序访问客户机的磁盘,使用户能够将本地的资源和服务器的资源结合起来应用。
5)笔者看来,这三种IDT中,Window Plug-in方式是最值得用的。
2. 关于DataWindow Plug-in的几点体会
1)DataWindow Plug-in可以在Web上发布复杂的报表,加快向Web用户的发布。
2)它克服了HTML的限制,提供复杂的报表,包括列表形式、交叉表形式和图形方式等。
3)它没有安全限制,因为PSR文件是制度的,而这个报表并不在本地
运行。PSR报表在浏览器中除了显示之外,只能够运行保存数据和打印两种功能,因此是十分安全的。
4)DataWindow Plug-in时静态显示报表的一种方法,无法直接修改这种方法显示的数据和报表格式,但可以在一个中央位置更新报表。
5)PSR格式的报表能够包含多种显示风格的数据窗口,但在DataWindow Plug-in中,不支持Rich Text格式的报表。
3.Web.PB构建Web应用有如下优点:
a. 支持CGI、ISAPI、NSAPI、MSAPI等多种网关程序接口。
b. 支持PowerBuilder中数据窗口的引用。
c. 易于将以前编写的PowerBuilder应用移植到Web环境下。
d. 易于创建嵌入PowerBuilder应用程序的HTML文件,应用服务器在运行环境下,将根据用户需求, 动态生成HTML语法,发布完全动态的信息。
e. 支持数据库连接。PowerBuilder所能够连接到的数据库都可以被浏览器用户访问到,使得 Web服务与数据库服务通过Powerbuilder 6.0完整地结合起来。
另外,谈一点对Web.PB的不足之处。虽然说Sybase公司极力地让PB支持Web方式并且采取了很多方案其中一种就是其引以为豪的Web.PB,的确,Web.PB在网络数据库方面确实有不小的成绩,可以采用集中式数据库管理。但它在开发网络数据库方面也绝不会成为流行的趋势,它开发初衷就是主要面对广大PB的老用户的(老用户更容易上手),而且它在页面的开发上过于单调,且不说动态性不强,光是一大堆类库函数,加上每个函数还有数个参数,而且创建页面其实比手写HTML语言还要辛苦(因为它要返回一个完整的字符串到浏览器)。联想到当今的社会发展非常注重效率,很难设想从头单纯学习PB的IDT而仅仅为了编辑过于普通的网页和开发网络数据库。因此在这方面也就是说Web.PB广泛推广的价值不大,但是对于已经掌握了PB的开发用户来说,如果不想学习新的语言或工具,用Web.PB开发也是一个很好的选择。
注:虽然当今PB已经发展到8.0版本,但是仍然有很多的开发者依旧用着他们认为是最为经典的6.0/6.5版本。本文基本上是在6.5版本上运行的,笔者认为却一点都不过时,因为友好的web风格的窗口肯定是大势所趋。
……