PowerBuilder7.0在Internet中的应用
随着Internet /Intranet的发展和万维网(www)的出现,传统的客户机/服务器方式(c/s)逐渐向浏览器-Web服务器-数据库(bwd)方式过渡。后者与前者相比易学易用,操作性强,可扩充和维护性好。
作为目前世界上使用最广泛的数据库应用程序综合开发环境以及MIS开发工具之一,Sybase公司的PowerBuilder以其卓越的应用在开发人员当中赢得了经久不衰的盛誉。近来,随着Internet应用日益普及的推动下,对于目前流行的基于Web的浏览器和瘦客户端的应用系统(即浏览器如IE不安装任何插件),PowerBuilder的Sysbase公司提供了一系列的解决方法。
一.最简单的Web应用,仅仅展示某个数据窗口中的数据。从Powerbuilder5.0以上,支持将数据窗口(Data Window)中的数据保存为HTML的表格形式,具体做法可以是在数据窗口画笔中/预览/文件/保存行作为/保存类型/HTML表格。评价:只能静态地展示某个数据窗口。
二.Sysbase公司提供的企业级Web、分布式和客户/服务器应用解决方案。利用Sybaese的最新产品Sybase Enterprise Application Studio,它是一整套为用户提供全面的企业级Web、分布式和客户/服务器应用解决方案的应用开发和提交工具包。Sybase Enterprise Application Studio主要包括如下产品:Powerbuilder7.0,PowerSite3.0,PowerDynamo3.0,Jaguar CTS3.0。
因为Internet的分布式体系已经将企业的业务活动越过公司的防火墙,推广到企业外部。Web技术已经被证明在动态信息发布方面既简单又有效,但是动态页面服务器(通常又被称为Web应用服务器)在保证事务处理数据的完整性方面能力有限,不能很好地调用可重用的业务逻辑。Web应用服务器本身也不能满足一个完整的业务应用系统在可伸缩性、运行效率、可互操作性和安全性方面的要求。 Sybase EA Studio 3.0是Sybase最新推出的面向分布式计算和Web计算的多层混合计算环境的产品方案,支持各种标准的组件和接口,具有强大而灵活的开发能力和很高的开发效率。 EA Studio 3.0的核心产品之--Sybase EA Server 3.0是为充分发挥基于组件和多层体系结构的应用特点而专门设计的高性能提交环境。它集成了操作方便且功能强大的Web应用服务器PowerDynamo 3.0和高性能的组件事务处理服务器Jaguar CTS 3.0。使用PowerDynamo,企业可以用HTML和JavaScript创建简单的瘦客户应用。当被浏览器调用时,PowerDynamo可以有效地处理包含展示逻辑和数据库连接信息的模板,快速生成HTML页面。PowerDynamo的模板和脚本语言能够处理任何数据和业务逻辑,并按客户端请求生成相应的HTML页面,送到Web服务器。PowerDynamo通过嵌入模板中的SQL指令访问数据,通过调用Jaguar CTS组件的方法访问复杂的业务逻辑。PowerDynamo的ActiveX事务处理组件运行在Jaguar CTS中,EA Server通过调用它们来执行企业的业务操作。 使用Jaguar CTS可减少分布式应用开发的复杂性,消除开发者对线索(threading)、加锁(locking)、事务处理和内存管理的顾虑。
典型的制作过程可为:
1.建立数据窗口。用PowerBuilder建立数据窗口或者PowerSite中的DataWindow Builde建立数据窗口。
2.在PowerSite中插入DataWindow DTC或者在PowerSite中插入HTML DataWindow DTC,选择某个数据窗口,并建立数据库连接,从而将数据窗口显示在Web页上。
具体操作步骤是:在PowerSite中在菜单中选择插入/成分/ActiveX/Design-Time命令,就可选择插入DataWindow DTC或者插入HTML DataWindow DTC,在DTC属性对话框中按…按钮选择某个数据窗口,选择菜单命令工程/数据库连接,设置好连接的参数即可。
需要指出的是:DataWindow DTC和HTML DataWindow DTC都是基于服务器的组件,在客户端的开发过程中,无法对其进行预览和测试。就是说暂时无法将数据窗口真正显示在Web中,如果想窥其面貌,则只能等到工程调试阶段,将工程提交给一个支持调试的服务器,然后才能在浏览器中将它显示出来。(做了大量的工作后,在Web页中竟还看不到数据窗口中的数据,未能享受成功的喜悦,不能不说是一种遗憾)
3.若想在Web页中增加更多的交互性,则要在PowerSite的Web页中插入一些ActiveX控件,并编写通用的JavaScript脚本,运行ActiveX控件需要安装事务处理服务器Jaguar CTS 3.0支持。如:想在Web中用按钮组合来选择去某个Web页,则要在Web页中增加选择按钮控件或表单,并编写JavaScript脚本;也可编写脚本让用户通过填写表单或控件来更新数据库中的数据。
4.设置PowerDynamo应用服务器,提交工程,并调试工程。调试工程一般只能用PowerDynamo应用服务器。提交是一个将完成的应用中的文件从开发环境中迁移到适当的运行环境(一般指一个Web应用服务器)的过程。在PowerSite中,回到服务提供者的工程视图中,在工程名称项目上单击鼠标右键,并在弹出的菜单中选择Deploy Setup命令进行提交设置,选择好服务器类型,这里是PowerDynamo,网站配置信息表后,在工程视图中的工程项目名称上单击右键并从菜单中Deploy命令即可。
调试:在PowerSite中,在菜单是选择Debug/Project Go命令,将打开IE浏览器窗口,装入工程起始页面。
5.正式提交。将调试好的Web应用工程提交给应用服务器,这里的应用服务器是在Internet上,不一定是PowerDynamo应用服务器,也可能是Microsoft公司的ASP应用服务器,微软的Active Service Pages即ASP是集成在Web服务器IIS中。提交工程需要网络管理员权限。
评价:一种瘦客户机方式,客户机端除浏览器外无须添加其它任何软件,功能强大,能在Web页中实现PowerBuilder应用程序的几乎所有功能,如在Web页面下数据库的添加,更新,数据库的多条件组合进行过滤查询等,适合企业进行信息处理。但需要Jaguar CTS3.0服务器(国内免费网站中目前尚未提供),PowerDynamo或ASP的支持,增加更多的交互性要编写JavaScript脚本,工程提交要有网络管理员的权限。
三.WEB.PB方式
WEB.PB是以多层分布式应用(客户机-应用服务器-数据库服务器)为基础的。它将客户机端应用即(WEB.PB的专用客户端程序)分布到Web服务器上,作为一个网关程序(CGI)。Web通过它来调用Powerbuilder应用服务器中定义的方法,实现相关的业务逻辑和数据处理。
浏览器浏览嵌入WEB.PB的HTML 文档时(主要是通过数据采集表和超文本链接),Web服务器激活WEB.PB。WEB.PB作为Powerbuilder分布式应用的客户端建立与Powerbuilder服务器应用之间的连接,然后调用其中已定义的功能和方法(如数据库访问和文件处理等 ),进行数据处理 ,并将处理结果将以超文本(HTML)语法格式返回给Web服务器,由它再将结果返回给用户。
另外,由于多个浏览器可同时访问Web服务器,单独一个用户也可跨越多个页面,而HTTP协议本身无记忆性,因此为了保证业务逻辑的一致性和用户访问的连续性,Powerbuilder专门提供了Webpb.pbl类库和webpb数据库,利用其中定义的Usession,Utransaction用户对象来进行会话和事务管理。
用WEB.PB方式进行开发时,主要是根据业务需求开发服务器应用,然后选择合适的通信机制(如TCP/IP,无名管道等),并修改PB.INI文件,以便WEB.PB能与之进行通信。下面我们以一个简单例子来简要说明。此例中,用户在FORM表中选择产品类型,用SUBMIT 提交表后,WEB.PB将返回具体的产品。
首先开发服务器应用,分成以下几步进行:
a. 用application 画笔创建一个新应用purchase,在其Library 属性页中将Web.PB class Library 的类库文件webpb.pbl加入查找路径中。
b.用window画笔创建一窗口对象wserver,用于启动服务器应用,对WEB.PB进行服务。在其上加入"启动服务器","关闭服务器"命令按钮,在"启动服务器"的click事件中定义transport类型的实例变量并赋值,监听来自Web.PB调用请求。
Transport cotransport
cotransport = create transport
cotransport.driver="winsock" //使用TCP/IP协议,与WEB.PB通信
cotransport.location="136.158.188.12" //服务器应用的IP地址
cotransport.application="12560" //服务器应用的TCP端口号
cotransport.Listen( ) //开始启动服务器应用,监听来自WEB.PB请求
c.用user object 画笔创建非可视(NvO)用户对象uoproduct,在其construct事件中用两个事务对象型全局变量通过ODBC分别和webpb数据库(用于WEB.PB调用中的会话和事务管理),应用数据库进行连接。在destructor事件中,断开连接并销毁事务对象(此处程序略)。
d.创建用户对象函数fretrieveproduct
① 创建fretrieveproduct在查询时所需用的数据窗口对象dwproduct。用datawindow 画笔选择select数据源和grid显示方式。
② 定义用户对象函数fretrieveproduct,函数参数为sproducttype (字符型,传值,)
返回值为字符型。
string returnhtml
long lldwrow
datastore datastore
datastore .dataobject="dwproduct"
datastore.settransobject(utransaction)
lldwrow=datastore.retrieve( sproducttype)
if lldwrow>0 then
returnhtml=returnhtml+datastore.object.datawindow.data.htmltable
else
return html="没有检索到数据"
end if
return returnhtml
函数的作用是根据用户选择的产品类型来调用数据窗口进行数据查询,并将结果以 HTML形式返回。
至此我们已完成了服务器应用的开发,下面修改Pbweb.ini文件,添加有关此服务器应用位置信息的节purchase如下:
[purchase]
driver=winsock
application=12560
location=136.158.188.12
最后用FRONTPAGE,文本编辑器等来定制web页,在其上加入 <FORM ACTION="//scripts/pbisa60.dll/purchase/uoproduct/fretrieveproduct">
<P>请选择产品类型:
<SELECT NAME="sproducttype">
<OPTION> 针式打印机
<OPTION> 喷墨打印机
<OPTION> 激光打印机 </SELECT>
<P> <INPUT TYPE="submit"><INPUT TYPE="reset"> </FORM>
至此,全部工作完毕。在实际运行时,启动Web服务器和purchase服务器,用户查询时即可得到所需结果。
评价:WEB.PB是一种瘦客户机方式,客户机端除浏览器外无须添加其它任何软件,支持Window,Unix,,Macintonish等多种平台,适合于Internet/Intranet开发,但是相对来讲其功能有限,无法发挥Powerbuilder的所有特点,用户界面不太友好,业务逻辑也较简单。如以此进行较为复杂的应用开发必须和Java,Java Applet等结合起来。
四.PLUG_IN方式
插入件最早是由网景公司提出的,后来得到了众多浏览器开发厂商的认可,插入件以多种方式扩展浏览器的功能。NPPBA60.DLL和NPPBS60.DLL是Powersoft 公司开发的插入件文件。它分为窗口(Window)和数据窗口(Datawindow)两种,从安全角度还可分为普通模式和安全模式。安全模式的插入件限制了Powerbuilder 应用在客户机上除打印以外的几乎所有活动。在插入件方式下,我们可以使用Powerbuilder里的所有控件,函数和方法,发挥它几乎全部功能。实际上,插入件方式只是传统的客户机/服务器结构的应用在Web上的一种表现形式。
浏览器访问Web服务器得到嵌有窗口插入件的HTML文档后,浏览器识别出EMBED元素,按它的WIDTH和HEIGHT属性在页面上为插入件预留所需空间,并向Web服务器请求卸载.PBD文件。Web服务器先后向浏览器传递PBD文件的MIME类型(application /vnd. powerbuilder6)和PBD文件。浏览器在其Plugin子目录下,查找并调用NPPBA60.DLL,再由其调用Powerbuilder运行动态库。这样,被插入的子窗口就显示在浏览器规定的位置,并执行其Open事件的处理程序,然后开始响应用户动作,进行事件处理。当用户转到其他Web文档时,PBD文件从内存中被清除。
用插入件方式开发与普通的Client/Server开发过程大致相同,只是要做一些调整,主要包括:① 嵌入窗口必须是Child 类型,在编程时必须用this,parent等来引用它而不能直接引用它的名字;② 可以使用应用对象内定义的全局变量,但不能使用应用对象的事件;③ 外部文件和所使用的ole控件必须保证在浏览器客户端存在。生成.PBD文件后,挂在Web目录合适的位置。仍以上面例子为例,说明开发过程。首先开发 Powerbuilder应用:
① 用application画笔创建一个新应用purchase。
② 用window 画笔创建一个child类型窗口wchildpurchase,上面有数据窗口dwproduct用于浏览数据,下拉列表ddlbtype 选择产品类型,按扭cbretrieve来数据检取。
③ 数据窗口对象和WEB.PB相同。
④ 在wchildpurchase的open 事件中,和应用数据库进行连接。
Sqlca.database="odbc"
Sqlca.dbparm="connectstrng='DSN=purchase;UID=dba;PWD=sql"
Connect using sql;
⑤ 在cbretrieve的clicked事件中,进行查询
parent.dwproduct.retrieve(ddlb1.text)
完成上述工作后,用project画笔生成purchase..pbd文件,将其移入Web目录中(如..\pbembed目录下),然后编辑HTML文档,嵌入如下代码:
<P><EMBED SRC="../pbembed/purchase.pbd" WIDTH=400 HEIGHT=250
WINDOW="wchildpurchase"
APPLICATION="purchase">
最后,在Web服务器上为插入件设置MIME类型。Web服务器所在的操作系统不同,注册方法也不一样。以Windows NT为例,启动注册表编辑器(regedt32.exe)并打开HKEYLOCALMACHINE \SYSTEM\CurrentControlSet \Services\InetInfo\Parameters\MimeMa-p,为MIME映射添加值: application/vnd. powerbuilder,5.这样PBD文件就能被正确得传送和下载到浏览器端。
为了和浏览器环境相协调,最好不要或少从child 子窗口再打开其它窗口。通常在使用中可以多用几个插件(即child 窗口),每个插件完成的功能少一些。对于比较复杂的应用,还可以使用Javascript 来协调插入件之间的同步[3]。
插入件方式是一种胖客户机方式,客户机端除浏览器外,还必须装有Powerbuilder 动态运行库 ,因此访问受限,对于Internet来说,不太合适。而对于工作环境和要求都已知的Intranet来说较为合适,功能较强,实现起来简便易行,可维护性好。
五.ActiveX
Powerbuilder 的ActiveX方式和Plugin方式的原理基本相同,为简便起见,在这里主要说明它们之间的差异。当浏览器从服务器中下载嵌有ActiveX的HTML文档,遇到OBJECT标记时,先预留给定的空间,然后浏览器将查找本地注册的ActiveX控件是否有此注册号,如有就将其直接显示,否则视其安全需要从Web服务器中下载ActiveX控件(在OBJECT 的CODEBASE属性中给出),并在本地机中注册,然后使用。用ActiveX方式进行开发和Plugin 也基本一样,在编辑HTML文档时所用的元素不同(为OBJECT),以上例为例:
<P>〈OBJECT ID="purchase" WIDTH=400 HEIGHT=250
CLASSID="CLSID:CEC58653-C842-11CF-A6FB-0805FA8669E>
<PARAM NAME="Version",VALUE="65536">
<PARAM NAME="Extentx",VALUE="9440">
<PARAM NAME="Extenty" VALUE="7112">
<PARAM NAME="StockProps" VALUE="0">
<PARAM NAME="PBWindow" VALUE ="wchildpurchase">
<PARAM NAME="LibList",VALUE="../pbembed/purchase.pbd>
<PARAM NAME="PBApplication" VALUE="purchase">
最后,在Windows 95,Windows NT上使用以下命令注册OCX控件: Regsvr32.exe pbrx60.ocx。
ActiveX 也是一种胖客户机方式,客户机方除浏览器外还要有PBRX60.OCX和Powerbuilder 动态运行库支持。此外,目前ActiveX仅有Windows 平台的支持,因此ActiveX 目前还不适合用于Internet 开发,而对需求和应用环境已知的Intranet应用比较合适。它与Plugin相比,我们还可以使用pbrx60.ocx的方法TriggerPbevent()和InvokePbfunction()等通过Javascipt和vbscipt和其它ActiveX控件交互,进行更为复杂的控制和开发。在开发中还要注意对浏览器安全选项的设置不能太高,否则无法通过安全检查,另外目前的PBRX60.ocx是针对IE3.0开发的,在IE4.0上使用有跳框现象。
结束语
在以上的分析和说明中主要阐述了几种开发方法的原理,开发方法和使用特点,注意事项,在使用时可根据要求和开发环境来进行选择。