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