一引言
我們知道現在隨著Internet應用的不斷深化人們對Web服務器所查詢的信息就不僅僅限於以文件方式存放於服務器端的靜態超文本文件有時需要借助關系新數據庫來存放變化的數據並在Web服務器於數據庫服務器之間以CGI等方法建立兩者的連接使Web服務器能夠實現對數據庫的動態的及時的查詢並將最新的數據(結果)返回給浏覽器
於是在Internet應用中就出現了如圖所示的這樣一種結構
圖
客戶浏覽器—Web服務器—數據庫服務器三級結構
當然這一結構的實現用ASP等開發網絡數據庫的軟件也能夠實現並且正在成為日益流行的趨勢但是對於已經擁有大量用戶的PB來說其對Internet的支持就可以讓PB用戶迅速轉移到Web的開發上來而不需要再重新學習一門語言
另外我們如果稍稍留心的話就不難發現現在用PB開發出來的所謂的MIS系統千篇一律幾乎都是一個模式用戶先登錄進入系統後出現一個MDI窗口帶有數項菜單菜單下面又有若干菜單通過菜單打開一個個窗口……當然並不是說這種傳統的方式有什麼缺點只是它和當今正日益流行的網頁的形式比較起來還是遜色不少網頁的友好形式更受廣大用戶的歡迎而PB的Web方式正是迎合了當今Internet時代發展的潮流——可以用網頁的形式再現PB的傳統強大功能
而且隨著越來越多的企事業單位上網很多單位不僅僅要有自己的一套MIS系統而且還迫切需要開發自己的網絡數據庫系統來向外界更好的宣傳自己這時候一般的選擇往往是這兩種系統各自獨立的開發一套不可避免地造成了一定程度的浪費並且這兩種系統的開發商是同一家還好若是兩家開發商那麼在不同的時候還要進行不斷的協商這不能不說又是一種浪費如果能有一種方法可以把兩種系統最大限度的把兩種系統結合起來就能夠節約各種財力人力和物力還會大大提高辦公效率
二PB/的Internet Developer Toolkit(IDT)
經典的開發工具PB/對Internet支持可以說是它的一個主要特性可以說這是在IDT基礎上的一個全新的飛躍通過將IDT(Internet Developer Toolkit)工具集成到PB的開發環境中通過這些工具開發人員可以將現有的一些應用移植到Internet中也可以開發新的面向Internet的應用
在圖所示的的結構下PB提供了Internet應用的兩種訪問方式這兩種訪問方式是
·基於Plugin(插入件)的Client/Server方式
·基於WebPB的Browser/Server方式
對應於這兩種方式主要是在IDT上選擇的不同
采用PB的IDT開發應用的方法和PB的一般應用的開發方法是類似的通過這些工具可以將現有的一些應用移植到Internet中也可以開發新的面向Internet的應用
在PB/中提供了WebPBDataWindow PluginWindow Plugin和Window Active等一系列面向Internet的工具每個工具所實現的功能所依賴的平台都不盡相同PB的IDT主要有三種部件
.DataWindow Plugin
使用該Plugin可以在IE或者Netscape等浏覽器中直接查看用PowerBuilder的Datawindow生成的報表PSR格式的文件當然不能直接修改了也不是動態生成的而是閱讀已經生成好並存下來的文件
Window Plugin
這個Plugin可就不是僅僅顯示靜態數據了它在浏覽器中中運行PB生成的Child Window而這個Child Window是包含在PB的動態連接庫(PBD)中傳送過來的用起來就象獨立的PB程序一樣可以有數據窗口OLEOCX等各種各樣的控制可以遠程操作數據庫可以極大的發揮PB的功能
WEBPB
WebPB是用來開發基於Web應用的基本部件該部件本身就是Web上的一個網關應用程序該工具提供從 Web服務器到PowerBuilder應用服務器的訪問允許用戶在 Internet以及Intranet下通過Web對數據庫進行近於完全的操縱同時通過WebPB動態創建HTML文文件亦成為可能WebPB程序是Web服務器和 PowerBuilder應用服務器相連接的橋梁它支持CGIISAPINSAPIMSAPI等多種網關程序接口
不管怎麼樣必須要明確這樣一個結論PB的Internet應用開發是由兩個部分組成的一個是面向服務器的應用程序主要采用的是WebPB技術另外一個是面向客戶端的技術包括各種內插件和ActiveX技術這是兩種不同的技術路線在實施的時候必須加以充分的考慮從另外一個角度可以看出各種內插件和ActiveX技術是為了將現有的應用擴展到Internet中去而WebPB主要是面向新應用的開發當然這也不是絕對的Plugin技術照樣可以開發新的應用特別是Intranet的應用
三開發策略的選擇
.PB的Internet/Intranet總體計劃實施策略選擇
現在好象一直存在著瘦客戶端和胖客戶端的爭論這裡不評價這兩者的優劣但是這肯定是實施策略時要考慮到的問題如果希望采用純的瘦客戶端那麼兩種Pugin技術和Active技術就不是最好的選擇
采用瘦客戶機 策略——即WebPB方式能夠減少在客戶端軟件方面的投資因為這種瘦客戶機一般只需要浏覽器這種核心部件另外瘦客戶機對計算機的性能要求也比較低不需要客戶機承擔多少運算的負載大量的運算任務都由服務器來承擔
如果采用中間策略那麼可以在客戶端加載Plugin和ActiveX(現在的浏覽器一般都支持這種技術)並且支持MINE格式的內容這樣一來客戶即便能夠承擔一些表現邏輯方面的任務但是業務邏輯的大部分運算任務仍然在服務器端完成這種其實就是Window Plugin方式它尤其適用於Intranet網中
最後一種是傳統的C/S策略其實就是胖客戶方式由於大部分程序都駐留在客戶端它對客戶機的要求也很高這種方式在現在的Intranet中估計遲早要被淘汰
在具體的IDT工具的選擇策略上主要有三個方面的選擇
)如果是需要實現客戶端訪問數據庫並在客戶機上進行業務處理最好使用Window Plugin它不僅可以最大限度地發揮PB的強大功能而且對用戶非常友好告別老套的菜單走向了豐富多彩的網頁形式
)如果客戶端需要預先編制好的報表應采用DataWindow Plugin為上佳它能夠在浏覽器內顯示已經生成並存儲在Web服務器上的PSR報表因為這個報表是預先生成的所以不需要訪問數據庫用戶可以在浏覽器內查看打印和保存報表PSR報表的格式多樣能夠給WWW浏覽增添不少風采
)如果需要使用集中控制的數據庫和業務邏輯程序那麼最好使用WebPB
.開發系統具體策略的考慮及分布式的介紹
由於要建立的Web方式的圖書館系統主要是基於Intranet的結合上面所說的幾種考慮因此大部分應用就采用了Window Plugin的方式這不僅能體現PB一向的強大功能而且能充分讓你去發揮其功能把MIS系統管理和豐富多彩的網頁結合起來了
Web服務器用的是微軟的PWS(Personal Web Server)WebPB用的是PBCGIEXE(表示是CGI標准)Sybase數據庫NT平台
開發過程中大量使用了數據庫連接單多條件數據查詢以及各種控件的Visible屬性尤其是在Tab控件中用到了selectionchanged事件的newindex屬性(以便每重新點擊一個Tabpage可以重新操作而不受以前操作的影響)大大增強了表現效果
還要補充一點的是在建立應用的過程中要注意的一點是不要使用全局對象特別是在child窗口不能用SQLCA作為事物對象(它應該算一個全局變量Window Plugin方式不支持全局變量)一定要重新自定義一個事物對象mytransaction若使用SQLCA單獨運行窗口還可以一旦要在客戶端浏覽器中出現肯定會報錯而在這兒幾乎沒有哪本參考書特意強調過初學者創建自己的應用時很容易在此走彎路
以上只算是建立了PB的應用程序還要做的有生成PBD文件並放到web共享目錄下編寫HTML語句嵌入窗口放到服務器目錄下這裡的關鍵性的HTML語句是
<body> <embed src=cgipbd/bookspbd width= height= window=w_bugao> </body>
WebPB是基於PowerBuilder分布式應用技術之上的WebPB替代了客戶端的代理而已在PB分布式應用中PB客戶應用和PB服務器應用程序之間的對象分布如所圖所示
圖
使用WebPB進行基於服務器的開發可以讓PB建立基於服務器的Web應用允許Web浏覽器訪問分布式PB應用程序的服務這些分布式的基於服務器的應用程序可以動態生成HTML頁或將HTML發送到Web浏覽器這允許用戶支持真正的瘦客戶機體系也就是在客戶機上只需一個浏覽器這種方式也可以稱為純的Browser/Server方式
如圖所示客戶端通過Proxy對象定義服務器應用程序之中的應用對象而WebPB不同於傳統的客戶端應用WebPB不同於傳統的客戶端應用WebPB文件取代了客戶端的應用程序起作用相當於訪問服務器應用程序的接口在浏覽器中用戶可以訪問分布式PB應用程序中的任何不可視對象的屬性和方法用戶還可以向方法傳遞參數Web服務器與WebPB通信將這些信息發送給分布式PB應用程序應用程序會執行方法並將結果以動態HTML的形式返回給浏覽器
建立WebPB應用的過程如下
a 建立並測試服務應用(這裡是pb_net)
·創建應用對象
·創建應用啟動窗口
·創建傳輸對象
·創建不可視用戶對象
·編寫用戶對象函數
b 編寫可調用服務應用的HTML頁面這可通過FrontPage等主頁編輯器也可通過WebPB的編程WIZARD來做
c 將應用編譯成可執行文件
d 編輯WebPB的幾個初始化文件
e 設置Web服務器(主要是文件類型和Web目錄的設置等)
f 啟動服務應用和Web服務器
g 用浏覽器訪問應用
服務應用的編寫和分布式應用類似就不再贅述這裡需要補充一點的是編寫用戶對象是WebPB應用中的頭等大事並且WebPB中的數據窗口一般用的都是Datastore這裡創建了一個用戶對象uo_pbdemo實際上用戶對象應該盡量要創建的多才好特別是在那些大型的應用中
WebPB方式的應用都是通過HTML中的錨點Anchor(<A>)定義的超鏈接或者是FORM(<FORM>)元素的可輸入域中鍵入信息後單擊Submit按鈕(定義的也有超鏈接)來激活WebPB實現的而這些超鏈接的對象形式上都是指向各個用戶對象中的函數的(這些函數的返回值均是一系列的HTML文文件)這一點務必要明確其實這一點也是WebPB方式的核心思想概念所在
這裡uo_pbdemo建立了數個函數挑出頗具代表性的一個的描述如下
//從數據庫中提取新書介紹
//f_retrieve_newbooks()無參數返回值是string類型的
string ls_html
string ls_search_arg
long ll_rows_retrieved
ds_names = CREATE datastore
ds_namesdataobject=d_newbooks
ds_namessettransobject(gtr_trans)
ll_rows_retrieved= ds_namesretrieve()
IF ll_rows_retrieved > THEN
ls_html=ds_namesobjectdatawindowdatahtmltable
ELSE
ls_html = 此次找不到新書!
END IF
RETURN ls_html
這是非常關鍵的一段代碼其實就是調用了數據窗口的htmltable屬性而已要知道這種思想可以說是貫穿了整個WebPB應用的全過程
啟動浏覽器就可以檢索到新書了當然還有一個前提是服務器確定是在監聽即剛建立的pb_inet應用必須在運行中
最後還要在服務器端配置幾個INI文件Hosts文件services文件和PBWEBINI文件當然這項工作實際上應該在整個工作之前所做的
四對三種開發方式的總結
.關於Window Plugin的幾點體會
)Window Plugin最適用於Intranet網前面提到過原因因為需要浏覽器的支持而且需要在浏覽器端安裝程序文件另外一個原因就是Window Plugin主要的執行環境還是浏覽器本身所在的本地機環境只有在內部網的情況下才能夠對應用執行的環境進行比較好的控制避免出錯
)Window Plugin適用於在浏覽器端有比較復雜的用戶接口的情況可避免編寫大量的HTML和CGI程序開發Internet經常遇到的一個難題就是在客戶端沒有足夠的組件現在有了Window Plugin只要願意就能把獨立的PB應用程序轉移到浏覽器中來執行
)並且Window Plugin移植和修改現有的應用程序到Web上也可以說是不費什麼力氣還可以充分享受數據窗口的強大功能
)在Intranet環境下安全等因素就不是那麼重要了可允許應用程序訪問客戶機的磁盤使用戶能夠將本地的資源和服務器的資源結合起來應用
)筆者看來這三種IDT中Window Plugin方式是最值得用的
關於DataWindow Plugin的幾點體會
)DataWindow Plugin可以在Web上發布復雜的報表加快向Web用戶的發布
)它克服了HTML的限制提供復雜的報表包括列表形式交叉表形式和圖形方式等
)它沒有安全限制因為PSR文件是制度的而這個報表並不在本地
運行PSR報表在浏覽器中除了顯示之外只能夠運行保存數據和打印兩種功能因此是十分安全的
)DataWindow Plugin時靜態顯示報表的一種方法無法直接修改這種方法顯示的數據和報表格式但可以在一個中央位置更新報表
)PSR格式的報表能夠包含多種顯示風格的數據窗口但在DataWindow Plugin中不支持Rich Text格式的報表
.WebPB構建Web應用有如下優點
a 支持CGIISAPINSAPIMSAPI等多種網關程序接口
b 支持PowerBuilder中數據窗口的引用
c 易於將以前編寫的PowerBuilder應用移植到Web環境下
d 易於創建嵌入PowerBuilder應用程序的HTML文件應用服務器在運行環境下將根據用戶需求 動態生成HTML語法發布完全動態的信息
e 支持數據庫連接PowerBuilder所能夠連接到的數據庫都可以被浏覽器用戶訪問到使得 Web服務與數據庫服務通過Powerbuilder 完整地結合起來
另外談一點對WebPB的不足之處雖然說Sybase公司極力地讓PB支持Web方式並且采取了很多方案其中一種就是其引以為豪的WebPB的確WebPB在網絡數據庫方面確實有不小的成績可以采用集中式數據庫管理但它在開發網絡數據庫方面也絕不會成為流行的趨勢它開發初衷就是主要面對廣大PB的老用戶的(老用戶更容易上手)而且它在頁面的開發上過於單調且不說動態性不強光是一大堆類庫函數加上每個函數還有數個參數而且創建頁面其實比手寫HTML語言還要辛苦(因為它要返回一個完整的字符串到浏覽器)聯想到當今的社會發展非常注重效率很難設想從頭單純學習PB的IDT而僅僅為了編輯過於普通的網頁和開發網絡數據庫因此在這方面也就是說WebPB廣泛推廣的價值不大但是對於已經掌握了PB的開發用戶來說如果不想學習新的語言或工具用WebPB開發也是一個很好的選擇
注雖然當今PB已經發展到版本但是仍然有很多的開發者依舊用著他們認為是最為經典的/版本本文基本上是在版本上運行的筆者認為卻一點都不過時因為友好的web風格的窗口肯定是大勢所趨
From:http://tw.wingwit.com/Article/program/SQL/201311/16404.html