一WEBPB的工作原理
POWERBUILDER對分布式計算的支持使得它能夠通過INTERNET/INTRANET來調用遠程對象服務通過WEBPB可以將POWERBILDER的分布式計算能力擴展到WWW網中WEBPB允許服務器動態地將內容轉換成HTML傳送到客戶端的浏覽器中當一個HTML文檔調用了一個遠程對象的方法或者函數時WEBPB將請求結果傳送給POWERBUILDER的服務應用由POWERBUILDER的服務應用執行相應的代碼並將結果返回給浏覽器這就是WEBPB的工作原理它實際上是通過網關接口(CGI)來調用PB應用服務的在HTML中有兩個標簽可以用來調用PB的應用服務窗體< FORM >和錨點< A >前者是在窗體命令中激活一個PB應用後者是通過調用超鏈接來指向PB應用的
二系統的運行環境
合肥市電信局網管中心目前運行的電話網網管系統有本地網集中監控和維護系統和長途網管系統其中本地網網管系統采用安徽省自行開發的一套系統服務器為ALPHA 小型機操作系統為Digital Unix 長途網管采用郵電部電信總局統一開發的ROMA系統操作系統為SCO UNIX數據庫均為SYBASE SQL SERVER我們另外采用了一台IBM Netfinity 作為WEB服務器采用Microsoft Windows NT 為操作系統 IIS提供WWW服務在安裝POWERBUILDER 時選擇自定義安裝然後選擇Internet Tools中的WEBPB選項即可
三配置IIS服務器
Microsoft Internet Information Server(IIS)的主目錄下有一個子目錄\scrips這是IIS用來存放CGI程序的目錄如果需要使用標准CGI程序則將\PB\IT\BIN\PBCGIEXE復制到這個目錄下即可如果使用ISAPI接口則需要復制的文件是pbisadll
但是為了保證服務能正常運行還必須自行查看IIS服務的目錄映像表其步驟如下
確定IIS已經安裝且運行正常
運行Internet Service Manager程序
選擇需要安裝配置的Web服務(IIS支持多種服務並能夠對多台計算機的服務進行管理)
從菜單條中選擇屬性菜單下的服務屬性菜單項
選擇Directories頁
確定有一個別名為/scripts/的目錄項(別名即虛擬目錄名)
選擇/scripts/並單擊Properties按鈕
確定Execute是在Access組中唯一被選中的項目(在這個目錄中不允許客戶機執行讀寫操作)
如果對屬性作了修改選擇OK進行保存
如果沒有/scripts目錄可以添加一個
四編輯hosts 和 services 文件
采用任何一個文本編輯器編輯這兩個文件通常hosts文件在c:\winnt\system\driver\etc目錄下添加下面一行:
HFSA
其中HFSA為主機名為IP地址
在c:\winnt\services文件中添加下面一行
myapp /tcp
這一行的意義在於將所創立的PB服務添加到Windows的服務注冊文件中使用TCP/IP協議的應用程序都需要使用一個端口服務應用程序將在這個端口布置一個監聽程序這個程序能夠捕捉到任何發送到這個端口的請求並將請求輸送到應用程序中比如HTTP協議協議使用端口FTP采用TCP的端口這裡指定myapp 使用TCP的端口獲取一個可用端口的方法是把上一行的端口號加即可
五查詢目標
SQL SERVER名: HFWG_SYB
數據庫名exsydb
表名和表結構s_a
字段名數據類型長度字段意義
Ofcnamechar局名
Dateint日期
Timesmallint時間
Namechar路由名稱
NcitInt電路數
Ncctfloat 可用電路數
Pegsint呼叫次數
SeizInt占用次數
Succint成功次數
AnswInt應答次數
Serlfloat 占用話務量
Rerlfloat 通話話務量
Retriesint 中繼重選次數
no_answint 久叫不應次數
cong_dist int 對端擁塞次數
ls_busyint 對端市話忙次數
ts_busyint 對端長話忙次數
要求在浏覽器中輸入日期和時間對表s_a查詢並在網頁中反映出結果
六創建Powerbuilder應用程序
新建一個應用(myapp)
新建一個窗口(w_)定義一個instance 變量(i_server_transport)
單擊應用畫板中的script按鈕為myapp應用的open事件編寫代碼如下
open(w_)
打開窗口w_為它的open事件編寫代碼如下
int li_ListenReturnCode
/*創建傳輸對象並設置其屬性*/
i_server_transport = CREATE transport
i_server_transportdriver=winsock //采用TCP/IP協議
i_server_transportapplication=myapp //應用名稱
i_server_transportlocation=HFSA //本地連接
/*監聽客戶並返回狀態值*/
li_ListenReturnCode= i_server_transportListen()
if(li_ListenReturnCode< >) then
MessageBox(服務器監聽出錯&
服務器不能正常進行監聽~r~n~r~n+&
請確保當前TCP/IP服務不能被其它埠占據以及+&
myapp /tcpstopsign!)
Halt
Endif
為w_的close事件編寫代碼如下:
i_server_transportstopListening() //停止在埠的監聽
DESTORY i_server_transport //從內存中清除傳輸對象
close(parent)
創建一個datawindow(d_zy)查詢條件為日期時間這是POWERBUILDER的特色之一這裡就不作詳細解釋
定義一個用戶對象u_web_ct並定義一個UserObject Function f_get_a(integer dateinteger time) return string
其代碼如下
datastore ds_tf
string ls_html
int li_rowcount
//連接數據庫
sqlcaDBMS=SYC Sybase System CTLIB
sqlcaDatabase=exsydb
sqlcaUserId=sa
sqlcaDbpass=
sqlcaLogPass=
sqlcaServerName=HFWG_SYB
sqlcaLogId=sa
sqlcaDbParm=
connect using sqlca;
if sqlcasqlcode < > then
Messagebox( connect error)
end if
ds_tf = create datastore
ds_tfdataobject=d_a
ds_tfSetTransObject(sqlca)
li_rowcount=ds_tfRetrieve(datetime)
if li_rowcount= then
disconnect using sqlca;
return no record!
elseif li_rowcount< then
disconnect using sqlca;
Return retrieve failure!
end if
ls_html = ds_tfObjectDataWindowdataHTMLTable
destroy ds_tf
disconnect using sqlca;
return ls_html
七使用
在主頁中添加如下代碼
< form name=form method=post
action=http:///scripts/
pbcgiexe/internet/u_web_ct/f_get_a? >
< font size= >< b >< p >日期 < input type=text name=
date size= > < /b >< /font >< /p >
< p >< b >< font size= >時間: < /font >< font size= >
< input type=text name=time size= > < /font >< /b >< /p >
< p >< input type=submit name=Submit value=Submit > < /p >
< /form >
運行myapp應用啟動浏覽器輸入日期和時間結果如下:
八小結
由於POWERBUILDER是專業級的數據庫開發工具可以不受數據庫的種類和平台的限制采用它的WEBPB技術來進行Internet/Intranet開發能夠將開發者的精力都集中到業務邏輯的實現上而不是花費大量的時間去考慮和數據庫連接的問題這種基於浏覽器/服務器結構的應用優勢在於系統的維護簡單幾乎所有的工作都集中在WEB服務器上大大減少了對多個客戶端的維護工作另外由於能夠將運算任務合理地分布在浏覽器和服務器之間整個系統運行的費用也將大大降低
From:http://tw.wingwit.com/Article/program/SQL/201311/16361.html