用PowerBuilder建立browser-server結(jié)構(gòu)應(yīng)用程序
2024-07-21 02:10:05
供稿:網(wǎng)友
用powerbuilder6.0建立browser-server結(jié)構(gòu)應(yīng)用程序
1998.10.20 新疆財(cái)院計(jì)算中心 孫彬 王東
【摘要】本文主要論述powerbuilder6.0實(shí)現(xiàn) browser/server結(jié)構(gòu)的internet解決方案和工作方式,對(duì)實(shí)現(xiàn)該方式的幾種重要模塊的數(shù)據(jù)流程進(jìn)行論述,最后給出實(shí)例。
powerbuilder 6.0實(shí)現(xiàn)“web瀏覽器-數(shù)據(jù)庫服務(wù)器”方案的前提條件是構(gòu)建分布式應(yīng)用體系。將 powerbuilder6.0應(yīng)用分布到internet結(jié)構(gòu)下,也就是把powerbuilder 6.0客戶端應(yīng)用分布到web服務(wù)器上,當(dāng)瀏覽器客戶端向web 服務(wù)器發(fā)出服務(wù)請(qǐng)求時(shí),web服務(wù)器自動(dòng)調(diào)用powerbuilder應(yīng)用軟件系統(tǒng), 從而實(shí)現(xiàn)各種業(yè)務(wù)軟件的internet結(jié)構(gòu)功能。
一、組成browser/server結(jié)構(gòu)的模塊結(jié)構(gòu)。
由上圖所示, 用 powerbuilder6. 0 開發(fā)的各種基于internet的應(yīng)用,是利用powerbuilder6.0 提供的分布式應(yīng)用技術(shù)及powerscripts編程技術(shù)來實(shí)現(xiàn)的,相當(dāng)于編寫分布式應(yīng)用環(huán)境下的服務(wù)器應(yīng)用。例如采用powerscripts語言環(huán)境、數(shù)據(jù)窗口技術(shù)等。其制作流程及工作原理是:
1. 建立及配置 web 服務(wù)器。 powerbuilder 中自帶o'reilly公司基于windowsnt 3.51以上版本和win 95/98平臺(tái)的32位多線程個(gè)人web服務(wù)器website 1.1版。該web 服務(wù)器提供了完整的web服務(wù)創(chuàng)建、管理環(huán)境和安全機(jī)制。
2.在web服務(wù)器上建立可執(zhí)行程序(web.pb)。web.pb(pbcgi60.exe)程序主要功能是調(diào)用powerbuilder應(yīng)用服務(wù)器中預(yù)置的處理程序,包括分析執(zhí)行用戶對(duì)象中的用戶函數(shù),反饋html控制流和生成解釋插入件程序等。
web.pb是用來開發(fā)基于web應(yīng)用的基本部件,該部件本身就是web上的一個(gè)網(wǎng)關(guān)應(yīng)用程序。該工具提供從 web服務(wù)器到powerbuilder應(yīng)用服務(wù)器的訪問,允許用戶在 internet以及intranet下,通過web對(duì)數(shù)據(jù)庫進(jìn)行近于完全的操縱。同時(shí),通過web.pb,動(dòng)態(tài)創(chuàng)建html文檔亦成為可能。web.pb程序是web服務(wù)器和 powerbuilder應(yīng)用服務(wù)器相連接的橋梁。使用web.pb構(gòu)建web應(yīng)用有如下優(yōu)點(diǎn):
a.支持cgi、isapi、nsapi、msapi等多種網(wǎng)關(guān)程序接口。
b.支持powerbuilder中數(shù)據(jù)窗口的引用。
c.易于將以前編寫的powerbuilder應(yīng)用移植到web環(huán)境下。
d.易于創(chuàng)建嵌入powerbuilder應(yīng)用程序的html文件,應(yīng)用服務(wù)器在運(yùn)行環(huán)境下,將根據(jù)用戶需求, 動(dòng)態(tài)生成html語法,發(fā)布完全動(dòng)態(tài)的信息。
e.支持?jǐn)?shù)據(jù)庫連接。powerbuilder所能夠連接到的數(shù)據(jù)庫都可以被瀏覽器用戶訪問到,使得 web服務(wù)與數(shù)據(jù)庫服務(wù)通過powerbuilder 6.0完整地結(jié)合起來。
3.建立powerbuilder應(yīng)用服務(wù)器。powerbuilder應(yīng)用服務(wù)器主要是一些用于激活powerbuilder6.0 業(yè)務(wù)應(yīng)用的類庫程序組成。創(chuàng)建上圖所示的powerbuilder應(yīng)用服務(wù)器時(shí),須引用powerbuilder6.0 web類庫,類庫中定義了五種定制的類用戶對(duì)象,封裝了創(chuàng)建html語法及事務(wù)管理所需的函數(shù)、結(jié)構(gòu)和實(shí)例等多種實(shí)體,可用來創(chuàng)建html語法、管理客戶瀏覽器連接的狀態(tài)等。powerbuilder 6.0應(yīng)用服務(wù)器相當(dāng)于分布式應(yīng)用中客戶端應(yīng)用,用于向powerbuilder6.0業(yè)務(wù)應(yīng)用發(fā)出調(diào)用請(qǐng)求。執(zhí)行方法是:當(dāng)powerbuilder6.0 應(yīng)用服務(wù)器監(jiān)聽到web.pb的請(qǐng)求后,則啟動(dòng)powerbuilder應(yīng)用服務(wù)器中已預(yù)定義的業(yè)務(wù)處理程序。
例如,當(dāng)用戶在瀏覽器端使用web瀏覽器(ie或netscape)瀏覽頁面時(shí),通過在html頁面中嵌入的 <a>或<form>元素,web服務(wù)器可自動(dòng)激活web.pb應(yīng)用。活動(dòng)的web服務(wù)器首先調(diào)用powerbuilder6.0的web.pb類程序,作為powerbuilder 分布式應(yīng)用中的客戶端應(yīng)用,建立與powerbuilder 6.0應(yīng)用服務(wù)器的連接,然后調(diào)用powerbuilder6.0應(yīng)用服務(wù)器中定義的各個(gè)業(yè)務(wù)功能,也就是用戶自定義對(duì)象中封裝的用戶函數(shù),包括數(shù)據(jù)庫訪問和文件處理等數(shù)據(jù)處理功能。
4.建立powerbuilder業(yè)務(wù)應(yīng)用程序。在用戶自定義對(duì)象中,創(chuàng)建用戶自定義函數(shù)。功能要求是根據(jù)瀏覽器端用戶的需求,進(jìn)行業(yè)務(wù)數(shù)據(jù)處理,把處理結(jié)果以html頁格式,反饋給web.pb程序,經(jīng)常用于人事管理、財(cái)務(wù)管理、信息數(shù)據(jù)處理和系統(tǒng)管理等業(yè)務(wù)工作。
powerbuilder業(yè)務(wù)應(yīng)用程序有插入件(plug_ins)和嵌入html文件兩種風(fēng)格。plug-ins(插入件)的使用方法又分成window plug-ins和datawindow plug-ins兩種。
window plug-ins 插入件編制業(yè)務(wù)程序的的方法是 : 在html頁面上,嵌入并顯示powerbuilder6.0中child 類型的窗口對(duì)象,可放置數(shù)據(jù)窗口(datawindow)、樹狀瀏覽(treeview)、tab頁等豐富多彩的控件類型, 豐富html頁面的表現(xiàn)形式。當(dāng)客戶端用瀏覽器瀏覽頁面時(shí),web服務(wù)器將psr文件或pbd文件卸載給客戶,客戶瀏覽器接收到psr文件和pbd文件,將child窗口對(duì)象嵌入在web 頁面中,如果嵌入的是窗口對(duì)象,則窗口上定義的功能在瀏覽器環(huán)境下同樣能使用,如窗口上定義了數(shù)據(jù)庫操縱的功能,則在瀏覽器客戶端能直接連接操縱數(shù)據(jù)庫。plug-ins起到了將powerbuilder6.0對(duì)象嵌入到頁面中的作用,數(shù)據(jù)窗口具有豐富的顯示風(fēng)格,用戶比較歡迎瀏覽器上“powerbuilder child類數(shù)據(jù)窗口”的數(shù)據(jù)表現(xiàn)形式。
window activex的使用方法與window plug-ins類似,用來在html頁面中嵌入并顯示powerbuilder中child 類型的窗口對(duì)象。該組件可以和html中的vbscripts和javascripts交互使用。
單純嵌入html文件的方法是流行的編程趨勢(shì), 也就是說根本不用插入件產(chǎn)品,客戶端只需安裝常規(guī)的web瀏覽器,便能實(shí)現(xiàn)真正“瘦”的 browser/client/server 結(jié)構(gòu)體系。
總之,powerbuilder6.0 應(yīng)用服務(wù)器將業(yè)務(wù)處理程序的執(zhí)行結(jié)果以html格式返回給web服務(wù)器。web服務(wù)器再將html發(fā)布給用戶,客戶瀏覽器端在瀏覽器上接收到結(jié)果。
二、簡(jiǎn)單的internet應(yīng)用實(shí)例
1.選用web服務(wù)器,配置web.pb程序。web服務(wù)器種類很多,在此選用websuit1.1服務(wù)器,其它種類的web 服務(wù)器類似。web.pb程序包括pbcgi60.exe、psisa60.dll、pbnsl60.dll、pbns260.dll、webbagent.dll和pbweb.ini等文件。 注意:設(shè)置映射目錄/scripts/為c:/ website/ cgi-shl;將上述web.pb文件復(fù)制到/scripts/目錄下;將pbweb.ini文件拷貝到windows nt或windows 95 的系統(tǒng)目錄下;在webpb.ini文件中加入以下內(nèi)容:
[pb60]
driver=winsock
application=10082
location=202.201.208.6
2.在powerbuilder6.0開發(fā)平臺(tái)上,選取internet選項(xiàng),創(chuàng)建 powerbuilder6. 0 應(yīng)用服務(wù)器。 技術(shù)要點(diǎn)是:建立internet應(yīng)用,加入webpb.pbl 類庫文件并作啟動(dòng)服務(wù)器的腳本,內(nèi)容是:
transport.mytransport
mytransport=create transport
mytransport="winsock"
my transport.location="202.201.208.6"
//powerbuilder6.0應(yīng)用服務(wù)器監(jiān)聽地址
mytransport.application="10082"
//服務(wù)端口號(hào)
mytransport.listen()
//啟動(dòng)監(jiān)聽服務(wù)
return
3、設(shè)置業(yè)務(wù)數(shù)據(jù)庫服務(wù)器和sybase sql anywhere本地庫wedpb.db的連接。其中業(yè)務(wù)數(shù)據(jù)存放到數(shù)據(jù)庫服務(wù)器,例如:sql6.5、sybase 11、informix 6.0、ingres和db2等類型的數(shù)據(jù)庫;本地庫webpb.db中,只存放powerbuilder 6.0應(yīng)用服務(wù)器的控制信息。
4、創(chuàng)建用戶對(duì)象,并為該用戶對(duì)象編寫處理腳本。例如:創(chuàng)建用戶對(duì)象ur,并給constructor事件編寫如下腳本:
mytransaction=create transaction
mytransaction.dbms='odbc"
mytransaction.dbparm="connectstring='dsn=webpb'"
connect using mytransaction;
if mytransaction.sqlcode<>0 then
messagebox("mytransaction.error="+string(mytransaction. &
sql_dbcode),mytransaction.sqlerrtext)
end if
sqlca.dbms="mss (msoft) sql server 6.5"
sqlca.database="xyw"
sqlca.userid="sa"
sqlca.servername="server"
sqlca.logid="sa"
connect using sqlca;
if sqlca.sqlcode<>0 then
messagebox("sqlca.error="+string(sqlca.sql_dbcode),sqlca.sqlerrtext)
end if
給destructor事件編寫如下腳本:
disconnect using mytransaction
disconnect using sqlca
目的是:當(dāng)web.pb調(diào)用powerbuilder6.0服務(wù)器時(shí),用戶對(duì)象自動(dòng)先建立與數(shù)據(jù)庫的連接,調(diào)用結(jié)束后斷開連接。
5、編寫用戶自定義函數(shù),各種業(yè)務(wù)工作的數(shù)據(jù)處理都由該類函數(shù)來完成。例如,在用戶對(duì)象ur上,創(chuàng)建一查詢功能的函數(shù)fp(),其內(nèi)容是:
string return_html
long ii
datastore data_fp
data_fp=create datastore
data_fp.dataobject="dw_fp"
//dw_fp為已經(jīng)做好的查詢數(shù)據(jù)窗口
data_fp.settransobject(mytransaction)
ii=date_fp.retrieve()
//檢索到的記錄數(shù)存入變量ii
if ii>=1 then
return_html+=data_fp.object.datawindow.data.htmltable
else
return_html="沒有檢索到滿足條件的數(shù)據(jù)"
end if
return return_html
6、啟動(dòng)服務(wù)器,再啟動(dòng)powerbuilder6.0應(yīng)用服務(wù)器; 在客戶瀏覽器端瀏覽含有如下html語法的頁面:
<h2>查詢頁面實(shí)例</h2>
<a href="/scripts/pbcgi60.exe/pb60/ur/fp?"> 查詢開始</a>
這樣powerbuilder6.0數(shù)據(jù)窗口dw_fp的內(nèi)容就可以通過點(diǎn)擊超文本鏈接“查詢開始”而顯示在客戶瀏覽器界面上,完成一個(gè)簡(jiǎn)單的“瘦”的browser/server應(yīng)用。