|
|
#4
freele_china2008-08-22 15:09
Powersoft的Web.PB技朮可以將分布式PowerBuilder的客戶端應用分布到Web服務器上
Powersoft的Web.PB技朮可以將分布式PowerBuilder的客戶端應用分布到Web服務器上﹐由Web服務器調用PowerBuilder應用。用戶可以用Web□PB技朮實現完全瘦客戶機的PB Web應用。
1.Web應用的執行過程
瀏覽器訪問Web服務器﹐向Web服務器提出請求﹐服務器給瀏覽器返回HTML文檔。如果HTML頁面中嵌入了通過〈A〉元素鏈接到Web□PB的超級鏈接﹐或HTML頁面中嵌入了通過〈FORM〉元素對Web□PB的調用﹐則Web服務器調用Web□PB建立與PowerBuilder服務器應用的連接﹐向PowerBuilder服務器應用提出請求﹐PowerBuilder服務器應用處理請求。如有數據庫訪問的請求﹐則PowerBuilder服務器應用訪問數據庫服務器。PowerBuilder服務器應用將處理結果以HTML文檔格式返回到Web服務器。Web服務器將PowerBuilder服務器應用的處理結果以HTML文檔格式發布給瀏覽器。
2.應用實例
本人已將利用Web.PB技朮開發的學校管理查詢系統應用于實際應用中。下面通過簡單的例子說明如何利用Web.PB技朮實現瘦客戶機的Web應用。
2.1. 運行環境
服務器為HP NetServer 5/133 LC﹐內裝Windows NT 4.0﹑SQL Server 6.5﹑IIS 4□0和PowerBuilder 6.0。
2.2. 配置
拷貝Web□PB文件﹐將PBISA60□DLL拷入\scripts虛擬目錄下﹐拷貝PBWEB□INI文件到WINNT目錄下。用記事本編輯\Winnt\System32\Drivers\Etc\目錄下的Hosts和Services文件﹐在Hosts文件中填加一行﹕202.194.168.88 server─sls﹐在Services文件中填加一行﹕pb─sls─server 10099/tcp。
2.3. 創建PowerBuilder服務器應用
2.3.1. 創建服務器應用及應用對象
啟動PowerBuilder﹐點取PowerBar上Application畫筆﹐進入Application工作區。從Application工作區上的PainterBar點取New﹐創建一個新的PowerBuilder應用sls.pbl。按下“保存”按鈕﹐彈出“Save Application”對話框﹐定義Application對象“sls”﹐按下“OK”按鈕。彈出“Application”對話框﹐選擇對話框中“NO”按鈕﹐應用sls.pbl創建完成。修改該應用對象的Library屬性﹐在Application工作區中點擊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上的文本分別改為“啟動服務器應用”﹑“關閉服務器應用”。
定義窗口上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()
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選單項﹐彈出“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”按鈕﹐進入到用戶對象工作區。選取選單項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 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事件編寫處理程序﹕
transaction 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─transaction 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 Select﹐“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﹐函數返回值為﹕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()
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文件
在PowerBuilder環境下﹐點取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 style框中選擇“Anchor”。然后點擊“Next”按鈕﹐在彈出的窗口中分別作如下的選擇﹕在位置框中輸入“C:\winnt\pbweb.ini”﹐在Enter Server Alias Section框中輸入“Internet”﹐在Driver框中選擇“Winsock”﹐在Application框中輸入“10099”﹐在Location框中輸入“202□194□168□88”。然后點擊“Next”按鈕﹐在彈出的窗口中﹐在HERF text框中輸入“人事檔案查詢”﹐在Specity location and name of HTML file框中輸入“c:\intepub\wwwroot\rsdaweb.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表中的記錄。
|