1、用Web.PB开发瘦客户机Web应用 (深圳:独孤求败 2003-05-20) Powersoft的Web.PB技术可以将分布式PowerBuilder的客户端应用分布到Web服务器上,由Web服务器调用PowerBuilder应用。用户可以用WebPB技术实现完全瘦客户机的PB Web应用。 1.Web应用的执行过程 浏览器访问Web服务器,向Web服务器提出请求,服务器给浏览器返回HTML文档。如果HTML页面中嵌入了通过〈A〉元素链接到WebPB的超级链接,或HTML页面中嵌入了通过〈FORM〉元素对WebPB的调用,则Web服务器调用WebPB建立与Powe
2、rBuilder服务器应用的连接,向PowerBuilder服务器应用提出请求,PowerBuilder服务器应用处理请求。如有数据库访问的请求,则PowerBuilder服务器应用访问数据库服务器。PowerBuilder服务器应用将处理结果以HTML文档格式返回到Web服务器。Web服务器将PowerBuilder服务器应用的处理结果以HTML文档格式发布给浏览器。 2.应用实例 本人已将利用Web.PB技术开发的学校管理查询系统应用于实际应用中。下面通过简单的例子说明如何利用Web.PB技术实现瘦客户机的Web应用。 2.1. 运行环境 服务器为HP NetSer
3、ver 5/133 LC,内装Windows NT 4.0、SQL Server 6.5、IIS 40和PowerBuilder 6.0。 2.2. 配置 拷贝WebPB文件,将PBISA60DLL拷入\scripts虚拟目录下,拷贝PBWEBINI文件到WINNT目录下。用记事本编辑\Winnt\System32\Drivers\Etc\目录下的Hosts和Services文件,在Hosts文件中填加一行:202.194.168.88 server—sls,在Services文件中填加一行:pb—sls—server 10099/tcp。 2.3. 创建PowerB
4、uilder服务器应用 2.3.1. 创建服务器应用及应用对象 启动PowerBuilder,点取PowerBar上Application画笔,进入Application工作区。从Application工作区上的PainterBar点取New,创建一个新的PowerBuilder应用sls.pbl。按下“保存”按钮,弹出“Save Application”对话框,定义Application对象“sls”,按下“OK”按钮。弹出“Application”对话框,选择对话框中“NO”按钮,应用sls.pbl创建完成。修改该应用对象的Library属性,在Application工作区中点
5、击PainterBar上的Property工具,弹出“Application”对话框,选择“Libraries”。定义应用的可搜索路径,填加“c:\program Files\Powersoft\PB6\IT\webpb.pbl”,按下“OK”按钮,服务器应用及应用对象创建完毕。 2.3.2. 创建PowerBuilder服务器应用的用户界面 点取PowerBar上Windows画笔,弹出“Select Window”窗口,点取“New”按钮,进入新创建的窗口的工作区。在该窗口上放置两个命令按钮cb—1、cb—2和一个静态文本st—1,在两个命令按钮cb—1、cb—2上的文本分别改
6、为“启动服务器应用”、“关闭服务器应用”。 定义窗口上transport类型实例变量mytransport,用于监听Web.PB的调用请求: transport mytransport 为cb—1的Clicked事件编程如下: transport mytransport mytransport=CREATE transport mytransport.driver=″winsock″ mytransport.location=″202.194.168.88″ mytransport.application=″10099″ mytransport.Listen()
7、 IF (mytransport.ErrCode<>0) THEN MessageBox(″错误信息″,″服务器应用不能启动监听~r~n″+″错误号为:″+string(mytransport.ErrCode)+″~r~n″+″错误信息为:″+mytransport.ErrText) Close(this.getparent()) return ELSE St—1.text=″服务器正在运行″ END IF 为cb—2的Clicked事件编程如下: Close(Parent) 上述工作完成后,选取选单项File下的Save选单项,弹出“
8、Save Window”对话框,定义窗口名为w—sls—server,然后点击“OK”按钮,保存窗口。这个窗口对象将是应用服务器中第一个打开的窗口。为应用对象sls的open事件编写如下程序: open(w—sls—server) 2.3.3. 创建PowerBuilder服务器应用中的用户对象 进入PowerBuilder工作区,点取PowerBar上User Object画笔,弹出“Select User Object”对话框。选择“New”按钮,弹出“New User Object”对话框。选择Class类Custom用户对象,单击“OK”按钮,进入到用户对象工作区。选
9、取选单项File下的Save选单项,弹出“Save User Object”对话框,输入“u—sls”,然后点击“OK”按钮,保存该用户对象。 为用户对象u—sls的constructor事件编写处理程序: transaction mytransaction mytransaction=CREATE transaction mytransaction.dbms=″odbc″ mytransaction.dbparm=″ConnectString=′DSN=Powersoft Demo DB V6;″&+″UID=dba;PWD=sql′ ″ CONNECT
10、USING mytransaction; Sqlca.dbms=″odbc″ Sqlca.dbparm=″ConnectString=′DSN=Powersoft Webpb;UID=dba;PWD=sql′″ CONNECT USING sqlca; IF sqlca.sqlcode<>0 THEN MessageBox(″Sqlca Error:″+String(sqlca.sqldbcode), sqlca.SqlErrText) END IF 为该用户对象的destructor事件编写处理程序: transa
11、ction mytransaction DISCONNECT USING mytransaction; DISCONNECT USING SQLCA; DESTROY mytransaction 这样,当Web.PB调用PowerBuilder服务器应用中用户对象时先建立了和数据库的连接。当调用完成时关闭连接。 在用户对象u—sls的工作区中,选取选单项Declare下的Instance Variables选单项,定义用户对象上的实例变量,输入: u—html—form my—html—form u—session my—session u—tr
12、ansaction my—transaction integer ii—count datastore mydatastore 按下“OK”按钮,返回用户对象工作区。 创建用户对象函数在查询时所需的数据窗口对象dw—rsda(假定已创建了Powersoft Demo DB V6库rsda(bh,xm,xb,bm,…)表),进入PowerBuilder工作区。点取PowerBar上Data Window画笔,弹出“Select DataWindow”对话框。点击“New”按钮,弹出“New DataWindow”对话框,在“DataSource”选择框中选择Quick S
13、elect,“Presentation Style”选择框中选择Grid。点击“OK”按钮,弹出“Quick Select”对话框,选取表rsda和表中相应的列(bh,xm,xb,bm)。按下“OK”按钮,进入数据窗口工作区,存此数据窗口为“dw—rsda”。 打开已创建好的用户对象u—sls。在用户对象工作区点取选单项Declare下的“User Object Functions”选单项,弹出“Select Function in User Object”对话框。单击“New”按钮,弹出“New Function”对话框。在此对话框中定义函数的参数及返回值。定义函数名为:f—rsda,
14、函数返回值为:string。点击“OK”按钮,进入函数编程工作区,编写程序如下: string return—html long ll—dw—row transaction mytransaction datastore datastore—rsda datastore—rsda=CREATE datastore datastore—rsda.dataobject=″dw—rsda″ datastore—rsda.settransobject(mytransaction) ll—dw—row=datastore—rsda.retrieve()
15、 IF LL—dw—row>=1 THEN Return—html=return—html+ datastore—rsda.object.datawindow.data.htmltable ELSE Return—html=″没有检索到数据″ END IF RETURN return—html 这个函数的主要作用是调用数据窗口dw—rsda进行数据查询,将查询结果以HTML的语法格式返回。Web服务器将得到这个返回参数,并发布给调用函数的浏览器客户。 2.4. 用Web.PB Wizard创建访问Web.PB的HTML文件 在PowerB
16、uilder环境下,点取PowerBar上的Web.PB Wizard画笔。输入或浏览选择Web.PB要访问的PowerBuilder服务器应用名后,点击“Next”按钮。在弹出的窗口中选择所需的用户对象u—sls,然后点击“Next”,在弹出的窗口中选择所需的用户对象函数f—rsda。然后点击“Next”,在弹出的窗口中分别作如下的选择:在Select the program interface框中选择“Internet Server API(ISAPI)”,在Enter the URL path for CGI program框中输入“/scripts”,在Select the HTML
17、style框中选择“Anchor”。然后点击“Next”按钮,在弹出的窗口中分别作如下的选择:在位置框中输入“C:\winnt\pbweb.ini”,在Enter Server Alias Section框中输入“Internet”,在Driver框中选择“Winsock”,在Application框中输入“10099”,在Location框中输入“20219416888”。然后点击“Next”按钮,在弹出的窗口中,在HERF text框中输入“人事档案查询”,在Specity location and name of HTML file框中输入“c:\intepub\wwwroot\r
18、sdaweb.htm”。然后点击“Next”按钮,在弹出的窗口中点击“Finish”。到此为止,能够访问PowerBuilder服务器应用中用户对象u—sls上函数f—rsda的HTML页面已经完成。 2.5. 启动服务器应用 在PowerBuilder环境下,按下PowerBar上的Run画笔,应用打开w—sls—server窗口,点取“启动服务器应用”按钮。在静态文本框中显示“服务器正在运行”,使服务器应用能够监听Web.PB的调用。 2.6. 启动浏览器浏览 打开IE4.0,在Location框中输入:http://202.194.168.88/rsdaweb.htm,然后再在“人事档案查询”上单击,则在页面中按照PowerBuilder的Data Window格式显示出rsda表中的记录。






