一、WEB.PB的工作原理
POWERBUILDER對分布式計算的支持使得它能夠通過INTERNET/INTRANET來調用遠程對象服務。通過WEB.PB,可以將POWERBILDER的分布式計算能力擴展到WWW網中。WEB.PB允許服務器動態地將內容轉換成HTML傳送到客戶端的瀏覽器中。當一個HTML文檔調用了一個遠程對象的方法或者函數時,WEB.PB將請求結果傳送給POWERBUILDER的服務應用,由POWERBUILDER的服務應用執行相應的代碼,并將結果返回給瀏覽器。這就是WEB.PB的工作原理,它實際上是通過網關接口(CGI)來調用PB應用服務的。在HTML中有兩個標簽,可以用來調用PB的應用服務:窗體< FORM >和錨點< A >,前者是在窗體命令中激活一個PB應用,后者是通過調用超鏈接來指向PB應用的。
二、系統的運行環境
合肥市電信局網管中心目前運行的電話網網管系統有本地網集中監控和維護系統和長途網管系統,其中本地網網管系統采用安徽省自行開發的一套系統,服務器為ALPHA 4000小型機,操作系統為Digital Unix 64,長途網管采用郵電部電信總局統一開發的ROMA系統,操作系統為SCO UNIX,數據庫均為SYBASE SQL SERVER。我們另外采用了一臺IBM Netfinity 3000作為WEB服務器,采用Microsoft Windows NT 4.0為操作系統, IIS4.0提供WWW服務。在安裝POWERBUILDER 6.0時選擇自定義安裝,然后選擇Internet Tools中的WEB.PB選項即可。
三、配置IIS服務器
Microsoft Internet Information Server(IIS)的主目錄下有一個子目錄\scrips,這是IIS用來存放CGI程序的目錄。如果需要使用標準CGI程序,則將\PB6\IT\BIN\PBCGI60.EXE復制到這個目錄下即可,如果使用ISAPI接口,則需要復制的文件是pbisa60.dll。
但是為了保證服務能正常運行,還必須自行查看IIS服務的目錄映像表,其步驟如下:
1、確定IIS已經安裝且運行正常。
2、運行Internet Service Manager程序。
3、選擇需要安裝配置的Web服務(IIS支持多種服務,并能夠對多臺計算機的服務進行管理)。
4、從菜單條中選擇屬性菜單下的服務屬性菜單項。
5、選擇Directories頁。
6、確定有一個別名為/scripts/的目錄項(別名即虛擬目錄名)。
7、選擇/scripts/,并單擊Properties按鈕。
8、確定Execute是在Access組中唯一被選中的項目(在這個目錄中不允許客戶機執行讀寫操作)。
9、如果對屬性作了修改,選擇OK進行保存。
10、如果沒有/scripts目錄,可以添加一個。
四、編輯hosts 和 services 文件
采用任何一個文本編輯器,編輯這兩個文件。通常hosts文件在c:\winnt\system32\driver\etc目錄下,添加下面一行:
134.65.5.212 HFSA
其中HFSA為主機名,134.65.5.212為IP地址。
在c:\winnt\services文件中添加下面一行
myapp 100015/tcp
這一行的意義在于將所創立的PB服務添加到Windows的服務注冊文件中。使用TCP/IP協議的應用程序都需要使用一個端口,服務應用程序將在這個端口布置一個監聽程序,這個程序能夠捕捉到任何發送到這個端口的請求,并將請求輸送到應用程序中。比如,HTTP協議協議使用端口80,FTP采用TCP的端口21。這里指定myapp 使用TCP的端口100015。獲取一個可用端口的方法是把上一行的端口號加1即可。
五、查詢目標
SQL SERVER名: "HFWG2_SYB"
數據庫名:exsydb
表名和表結構:s12_a010007
字段名 數據類型 長度 字段意義 Ofcname char 10 局名 Date int 4 日期 Time smallint 2 時間 Name char 16 路由名稱 Ncit Int 4 電路數 Ncct float 8 可用電路數 Pegs int 4 呼叫次數 Seiz Int 4 占用次數 Succ int 4 成功次數 Answ Int 4 應答次數 Serl float 8 占用話務量 Rerl float 8 通話話務量 Retries int 4 中繼重選次數 no_answ int 4 久叫不應次數 cong_dist int 4 對端擁塞次數 ls_busy int 4 對端市話忙次數 ts_busy int 4 對端長話忙次數
要求在瀏覽器中輸入日期和時間,對表s12_a010007查詢,并在網頁中反映出結果。
六、創建Powerbuilder應用程序
1、 新建一個應用(myapp)。
2、 新建一個窗口(w_1),定義一個instance 變量(i_server_transport)。
3、 單擊應用畫板中的script按鈕,為myapp應用的open事件編寫代碼如下:
open(w_1)
4、 打開窗口w_1,為它的open事件編寫代碼如下
int li_ListenReturnCode /*創建傳輸對象,并設置其屬性*/ i_server_transport = CREATE transport i_server_transport.driver="winsock" //采用TCP/IP協議 i_server_transport.application="myapp" //應用名稱 i_server_transport.location="HFSA" //本地連接 /*監聽客戶,并返回狀態值*/ li_ListenReturnCode= i_server_transport.Listen() if(li_ListenReturnCode< >0) then MessageBox("服務器監聽出錯"& "服務器不能正常進行監聽:~r~n~r~n"+& "請確保當前TCP/IP服務不能被其它埠占據,以及"+& "myapp 10015/tcp",stopsign!) Halt Endif
5、 為w_1的close事件編寫代碼如下:
i_server_transport.stopListening() //停止在埠的監聽 DESTORY i_server_transport //從內存中清除傳輸對象 close(parent)
6、 創建一個datawindow(d_zy),查詢條件為日期、時間。這是POWERBUILDER的特色之一,這里就不作詳細解釋。
7、 定義一個用戶對象u_web_ct1,并定義一個UserObject Function f_get_2a01(integer date,integer time) return string
其代碼如下:
datastore ds_tf string ls_html int li_rowcount //連接數據庫 sqlca.DBMS="SYC Sybase System 10 CTLIB" sqlca.Database="exsydb" sqlca.UserId="sa" sqlca.Dbpass="" sqlca.LogPass="" sqlca.ServerName="HFWG2_SYB" sqlca.LogId="sa" sqlca.DbParm=""
connect using sqlca;
if sqlca.sqlcode < > 0 then Messagebox(" ","connect error") end if
ds_tf = create datastore
ds_tf.dataobject="d_a01" ds_tf.SetTransObject(sqlca) li_rowcount=ds_tf.Retrieve(date,time)
if li_rowcount=0 then disconnect using sqlca; return "no record!" elseif li_rowcount< 0 then disconnect using sqlca; Return "retrieve failure!" end if
ls_html = ds_tf.Object.DataWindow.data.HTMLTable
destroy ds_tf disconnect using sqlca;
return ls_html
七、 使用
1、在主頁中添加如下代碼:
< form name="form1" method="post" action="http://134.65.5.212/scripts/ pbcgi60.exe/internet/u_web_ct1/f_get_2a01?" >
< font size="-3" >< b >< p >日期: < input type="text" name= "date" size="20" > < /b >< /font >< /p > < p >< b >< font size="-7" >時間: < /font >< font size="-3" > < input type="text" name="time" size="20" > < /font >< /b >< /p > < p >< input type="submit" name="Submit" value="Submit" > < /p > < /form >
2、運行myapp應用,啟動瀏覽器,輸入日期和時間,結果如下:
八、小結
由于POWERBUILDER是專業級的數據庫開發工具,可以不受數據庫的種類和平臺的限制,采用它的WEB.PB技術來進行Internet/Intranet開發,能夠將開發者的精力都集中到業務邏輯的實現上,而不是花費大量的時間去考慮和數據庫連接的問題。這種基于瀏覽器/服務器結構的應用優勢在于系統的維護簡單,幾乎所有的工作都集中在WEB服務器上,大大減少了對多個客戶端的維護工作。另外,由于能夠將運算任務合理地分布在瀏覽器和服務器之間,整個系統運行的費用也將大大降低。
|