1998.10.20 新疆財院計算中心 孫彬 王東
摘要本文主要論述Powerbuilder6.0實現 Browser/Server結構的Internet解決方案和工作方式,對實現該方式的幾種重要模塊的數據流程進行論述,最後給出實例。
PowerBuilder 6.0實現“Web瀏覽器-數據庫服務器”方案的前提條件是構建分布式應用體系。將 Powerbuilder6.0應用分布到Internet結構下,也就是把PowerBuilder 6.0客戶端應用分布到Web服務器上,當瀏覽器客戶端向Web 服務器發出服務請求時,Web服務器自動調用Powerbuilder應用軟件系統, 從而實現各種業務軟件的Internet結構功能。
壹、組成Browser/Server結構的模塊結構。
由上圖所示, 用 Powerbuilder6. 0 開發的各種基於Internet的應用,是利用PowerBuilder6.0 提供的分布式應用技術及PowerScripts編程技術來實現的,相當於編寫分布式應用環境下的服務器應用。例如采用PowerScripts語言環境、數據窗口技術等。其制作流程及工作原理是:
1. 建立及配置 Web 服務器。 PowerBuilder 中自帶O'Reilly公司基於WindowsNT 3.51以上版本和Win 95/98平臺的32位多線程個人Web服務器WebSite 1.1版。該Web 服務器提供了完整的Web服務創建、管理環境和安全機制。
2.在Web服務器上建立可執行程序(Web.Pb)。Web.pb(Pbcgi60.exe)程序主要功能是調用PowerBuilder應用服務器中預置的處理程序,包括分析執行用戶對象中的用戶函數,反饋HTML控制流和生成解釋插入件程序等。
Web.PB是用來開發基於Web應用的基本部件,該部件本身就是Web上的壹個網關應用程序。該工具提供從 Web服務器到PowerBuilder應用服務器的訪問,允許用戶在 Internet以及Intranet下,通過Web對數據庫進行近於完全的操縱。同時,通過Web.PB,動態創建HTML文檔亦成為可能。Web.PB程序是Web服務器和 PowerBuilder應用服務器相連接的橋梁。使用Web.PB構建Web應用有如下優點:
a.支持CGI、ISAPI、NSAPI、MSAPI等多種網關程序接口。
b.支持PowerBuilder中數據窗口的引用。
c.易於將以前編寫的PowerBuilder應用移植到Web環境下。
d.易於創建嵌入PowerBuilder應用程序的HTML文件,應用服務器在運行環境下,將根據用戶需求, 動態生成HTML語法,發布完全動態的信息。
e.支持數據庫連接。PowerBuilder所能夠連接到的數據庫都可以被瀏覽器用戶訪問到,使得 Web服務與數據庫服務通過Powerbuilder 6.0完整地結合起來。
3.建立PowerBuilder應用服務器。PowerBuilder應用服務器主要是壹些用於激活Powerbuilder6.0 業務應用的類庫程序組成。創建上圖所示的PowerBuilder應用服務器時,須引用Powerbuilder6.0 Web類庫,類庫中定義了五種定制的類用戶對象,封裝了創建HTML語法及事務管理所需的函數、結構和實例等多種實體,可用來創建HTML語法、管理客戶瀏覽器連接的狀態等。PowerBuilder 6.0應用服務器相當於分布式應用中客戶端應用,用於向PowerBuilder6.0業務應用發出調用請求。執行方法是:當Powerbuilder6.0 應用服務器監聽到Web.PB的請求後,則啟動PowerBuilder應用服務器中已預定義的業務處理程序。
例如,當用戶在瀏覽器端使用Web瀏覽器(IE或Netscape)瀏覽頁面時,通過在HTML頁面中嵌入的 <A>或<FORM>元素,Web服務器可自動激活Web.PB應用。活動的Web服務器首先調用PowerBuilder6.0的Web.PB類程序,作為PowerBuilder 分布式應用中的客戶端應用,建立與PowerBuilder 6.0應用服務器的連接,然後調用PowerBuilder6.0應用服務器中定義的各個業務功能,也就是用戶自定義對象中封裝的用戶函數,包括數據庫訪問和文件處理等數據處理功能。
4.建立PowerBuilder業務應用程序。在用戶自定義對象中,創建用戶自定義函數。功能要求是根據瀏覽器端用戶的需求,進行業務數據處理,把處理結果以HTML頁格式,反饋給web.pb程序,經常用於人事管理、財務管理、信息數據處理和系統管理等業務工作。
PowerBuilder業務應用程序有插入件(Plug_ins)和嵌入HTML文件兩種風格。Plug-ins(插入件)的使用方法又分成Window plug-ins和Datawindow plug-ins兩種。
Window plug-ins 插入件編制業務程序的的方法是 : 在HTML頁面上,嵌入並顯示PowerBuilder6.0中Child 類型的窗口對象,可放置數據窗口(DataWindow)、樹狀瀏覽(TreeView)、Tab頁等豐富多彩的控件類型, 豐富HTML頁面的表現形式。當客戶端用瀏覽器瀏覽頁面時,Web服務器將PSR文件或PBD文件卸載給客戶,客戶瀏覽器接收到PSR文件和PBD文件,將Child窗口對象嵌入在Web 頁面中,如果嵌入的是窗口對象,則窗口上定義的功能在瀏覽器環境下同樣能使用,如窗口上定義了數據庫操縱的功能,則在瀏覽器客戶端能直接連接操縱數據庫。Plug-ins起到了將PowerBuilder6.0對象嵌入到頁面中的作用,數據窗口具有豐富的顯示風格,用戶比較歡迎瀏覽器上“Powerbuilder Child類數據窗口”的數據表現形式。
Window ActiveX的使用方法與Window plug-ins類似,用來在HTML頁面中嵌入並顯示PowerBuilder中Child 類型的窗口對象。該組件可以和HTML中的VBScripts和JavaScripts交互使用。
單純嵌入HTML文件的方法是流行的編程趨勢, 也就是說根本不用插入件產品,客戶端只需安裝常規的Web瀏覽器,便能實現真正“瘦”的 Browser/Client/Server 結構體系。
總之,Powerbuilder6.0 應用服務器將業務處理程序的執行結果以HTML格式返回給Web服務器。Web服務器再將HTML發布給用戶,客戶瀏覽器端在瀏覽器上接收到結果。
二、簡單的Internet應用實例
1.選用Web服務器,配置Web.pb程序。Web服務器種類很多,在此選用Websuit1.1服務器,其它種類的Web 服務器類似。Web.pb程序包括pbcgi60.exe、psisa60.dll、pbnsl60.dll、pbns260.dll、webbagent.dll和pbweb.ini等文件。 註意:設置映射目錄/scripts/為c:\ website\ cgi-shl;將上述Web.pb文件復制到/scripts/目錄下;將pbweb.ini文件拷貝到WINDOWS NT或WINDOWS 95 的系統目錄下;在webpb.ini文件中加入以下內容:
[pb60]
driver=winsock
application=10082
location=202.201.208.6
2.在Powerbuilder6.0開發平臺上,選取Internet選項,創建 Powerbuilder6. 0 應用服務器。 技術要點是:建立Internet應用,加入webpb.pbl 類庫文件並作啟動服務器的腳本,內容是:
transport.mytransport
mytransport=create transport
mytransport="winsock"
my transport.location="202.201.208.6"
//PowerBuilder6.0應用服務器監聽地址
mytransport.application="10082"
//服務端口號
mytransport.listen()
//啟動監聽服務
return
3、設置業務數據庫服務器和sybase SQL Anywhere本地庫wedpb.db的連接。其中業務數據存放到數據庫服務器,例如:SQL6.5、Sybase 11、Informix 6.0、Ingres和DB2等類型的數據庫;本地庫webpb.db中,只存放PowerBuilder 6.0應用服務器的控制信息。
4、創建用戶對象,並為該用戶對象編寫處理腳本。例如:創建用戶對象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
目的是:當Web.pb調用Powerbuilder6.0服務器時,用戶對象自動先建立與數據庫的連接,調用結束後斷開連接。
5、編寫用戶自定義函數,各種業務工作的數據處理都由該類函數來完成。例如,在用戶對象UR上,創建壹查詢功能的函數fp(),其內容是:
string return_html
long ii
datastore data_fp
data_fp=create datastore
data_fp.dataobject="dw_fp"
//dw_fp為已經做好的查詢數據窗口
data_fp.settransobject(mytransaction)
ii=date_fp.retrieve()
//檢索到的記錄數存入變量ii
if ii>=1 then
return_html+=data_fp.object.datawindow.data.htmltable
else
return_html="沒有檢索到滿足條件的數據"
end if
return return_html
6、啟動服務器,再啟動Powerbuilder6.0應用服務器; 在客戶瀏覽器端瀏覽含有如下HTML語法的頁面:
<h2>查詢頁面實例</h2>
<A href="/scripts/pbcgi60.exe/pb60/ur/fp?"> 查詢開始</A>
這樣Powerbuilder6.0數據窗口dw_fp的內容就可以通過點擊超文本鏈接“查詢開始”而顯示在客戶瀏覽器界面上,完成壹個簡單的“瘦”的browser/server應用。