PowerBuilder7.0在Internet中的應用

PowerBuilder7.0在Internet中的應用

(加入日期:2001-6-11)

保存文章至硬盤】【打印文章】【字體:

分享到: 0
隨着Internet /Intranet的發展和萬維網(www)的出現,傳統的客戶機/服務器方式(c/s)逐漸向瀏覽器-Web服務器-數據庫(bwd)方式過渡。後者與前者相比易學易用,操作性強,可擴充和維護性好。文章主要就Powerbuilder在互聯網和企業內部網應用開發中,可採用的幾種方式:最簡單的Web應用,Sybase EA Studio,WEB.PB ,Plugin 和ActiveX等從基本原理與交互過程,開發方法,主要特點和不足作了較詳細的說明。在具體應用中,根據需求和使用環境狀況靈活選擇。

  作爲目前世界上使用最廣泛的數據庫應用程序綜合開發環境以及MIS開發工具之一,Sybase公司的PowerBuilder以其卓越的應用在開發人員當中贏得了經久不衰的盛譽。近來,隨着Internet應用日益普及的推動下,對於目前流行的基於Web的瀏覽器和瘦客戶端的應用系統(即瀏覽器如IE不安裝任何插件),PowerBuilder的Sysbase公司提供了一系列的解決方法。

  一.最簡單的Web應用,僅僅展示某個數據窗口中的數據。從Powerbuilder5.0以上,支持將數據窗口(Data Window)中的數據保存爲HTML的表格形式,具體做法可以是在數據窗口畫筆中/預覽/文件/保存行作爲/保存類型/HTML表格。評價:只能靜態地展示某個數據窗口。

  二.Sysbase公司提供的企業級Web、分佈式和客戶/服務器應用解決方案。利用Sybaese的最新產品Sybase Enterprise Application Studio,它是一整套爲用戶提供全面的企業級Web、分佈式和客戶/服務器應用解決方案的應用開發和提交工具包。Sybase Enterprise Application Studio主要包括如下產品:Powerbuilder7.0,PowerSite3.0,PowerDynamo3.0,Jaguar CTS3.0。

  因爲Internet的分佈式體系已經將企業的業務活動越過公司的防火牆,推廣到企業外部。Web技術已經被證明在動態信息發佈方面既簡單又有效,但是動態頁面服務器(通常又被稱爲Web應用服務器)在保證事務處理數據的完整性方面能力有限,不能很好地調用可重用的業務邏輯。Web應用服務器本身也不能滿足一個完整的業務應用系統在可伸縮性、運行效率、可互操作性和安全性方面的要求。 Sybase EA Studio 3.0是Sybase最新推出的面向分佈式計算和Web計算的多層混合計算環境的產品方案,支持各種標準的組件和接口,具有強大而靈活的開發能力和很高的開發效率。 EA Studio 3.0的核心產品之--Sybase EA Server 3.0是爲充分發揮基於組件和多層體系結構的應用特點而專門設計的高性能提交環境。它集成了操作方便且功能強大的Web應用服務器PowerDynamo 3.0和高性能的組件事務處理服務器Jaguar CTS 3.0。使用PowerDynamo,企業可以用HTML和JavaScript創建簡單的瘦客戶應用。當被瀏覽器調用時,PowerDynamo可以有效地處理包含展示邏輯和數據庫連接信息的模板,快速生成HTML頁面。PowerDynamo的模板和腳本語言能夠處理任何數據和業務邏輯,並按客戶端請求生成相應的HTML頁面,送到Web服務器。PowerDynamo通過嵌入模板中的SQL指令訪問數據,通過調用Jaguar CTS組件的方法訪問複雜的業務邏輯。PowerDynamo的ActiveX事務處理組件運行在Jaguar CTS中,EA Server通過調用它們來執行企業的業務操作。 使用Jaguar CTS可減少分佈式應用開發的複雜性,消除開發者對線索(threading)、加鎖(locking)、事務處理和內存管理的顧慮。

  典型的製作過程可爲:

  1.建立數據窗口。用PowerBuilder建立數據窗口或者PowerSite中的DataWindow Builde建立數據窗口。

  2.在PowerSite中插入DataWindow DTC或者在PowerSite中插入HTML DataWindow DTC,選擇某個數據窗口,並建立數據庫連接,從而將數據窗口顯示在Web頁上。

  具體操作步驟是:在PowerSite中在菜單中選擇插入/成分/ActiveX/Design-Time命令,就可選擇插入DataWindow DTC或者插入HTML DataWindow DTC,在DTC屬性對話框中按…按鈕選擇某個數據窗口,選擇菜單命令工程/數據庫連接,設置好連接的參數即可。  

  需要指出的是:DataWindow DTC和HTML DataWindow DTC都是基於服務器的組件,在客戶端的開發過程中,無法對其進行預覽和測試。就是說暫時無法將數據窗口真正顯示在Web中,如果想窺其面貌,則只能等到工程調試階段,將工程提交給一個支持調試的服務器,然後才能在瀏覽器中將它顯示出來。(做了大量的工作後,在Web頁中竟還看不到數據窗口中的數據,未能享受成功的喜悅,不能不說是一種遺憾)

  3.若想在Web頁中增加更多的交互性,則要在PowerSite的Web頁中插入一些ActiveX控件,並編寫通用的JavaScript腳本,運行ActiveX控件需要安裝事務處理服務器Jaguar CTS 3.0支持。如:想在Web中用按鈕組合來選擇去某個Web頁,則要在Web頁中增加選擇按鈕控件或表單,並編寫JavaScript腳本;也可編寫腳本讓用戶通過填寫表單或控件來更新數據庫中的數據。

  4.設置PowerDynamo應用服務器,提交工程,並調試工程。調試工程一般只能用PowerDynamo應用服務器。提交是一個將完成的應用中的文件從開發環境中遷移到適當的運行環境(一般指一個Web應用服務器)的過程。在PowerSite中,回到服務提供者的工程視圖中,在工程名稱項目上單擊鼠標右鍵,並在彈出的菜單中選擇Deploy Setup命令進行提交設置,選擇好服務器類型,這裏是PowerDynamo,網站配置信息表後,在工程視圖中的工程項目名稱上單擊右鍵並從菜單中Deploy命令即可。

  調試:在PowerSite中,在菜單是選擇Debug/Project Go命令,將打開IE瀏覽器窗口,裝入工程起始頁面。

  5.正式提交。將調試好的Web應用工程提交給應用服務器,這裏的應用服務器是在Internet上,不一定是PowerDynamo應用服務器,也可能是Microsoft公司的ASP應用服務器,微軟的Active Service Pages即ASP是集成在Web服務器IIS中。提交工程需要網絡管理員權限。

  評價:一種瘦客戶機方式,客戶機端除瀏覽器外無須添加其它任何軟件,功能強大,能在Web頁中實現PowerBuilder應用程序的幾乎所有功能,如在Web頁面下數據庫的添加,更新,數據庫的多條件組合進行過濾查詢等,適合企業進行信息處理。但需要Jaguar CTS3.0服務器(國內免費網站中目前尚未提供),PowerDynamo或ASP的支持,增加更多的交互性要編寫JavaScript腳本,工程提交要有網絡管理員的權限。

  三.WEB.PB方式

  WEB.PB是以多層分佈式應用(客戶機-應用服務器-數據庫服務器)爲基礎的。它將客戶機端應用即(WEB.PB的專用客戶端程序)分佈到Web服務器上,作爲一個網關程序(CGI)。Web通過它來調用Powerbuilder應用服務器中定義的方法,實現相關的業務邏輯和數據處理。

  瀏覽器瀏覽嵌入WEB.PB的HTML 文檔時(主要是通過數據採集表和超文本鏈接),Web服務器激活WEB.PB。WEB.PB作爲Powerbuilder分佈式應用的客戶端建立與Powerbuilder服務器應用之間的連接,然後調用其中已定義的功能和方法(如數據庫訪問和文件處理等 ),進行數據處理 ,並將處理結果將以超文本(HTML)語法格式返回給Web服務器,由它再將結果返回給用戶。

  另外,由於多個瀏覽器可同時訪問Web服務器,單獨一個用戶也可跨越多個頁面,而HTTP協議本身無記憶性,因此爲了保證業務邏輯的一致性和用戶訪問的連續性,Powerbuilder專門提供了Webpb.pbl類庫和webpb數據庫,利用其中定義的Usession,Utransaction用戶對象來進行會話和事務管理。

  用WEB.PB方式進行開發時,主要是根據業務需求開發服務器應用,然後選擇合適的通信機制(如TCP/IP,無名管道等),並修改PB.INI文件,以便WEB.PB能與之進行通信。下面我們以一個簡單例子來簡要說明。此例中,用戶在FORM表中選擇產品類型,用SUBMIT 提交表後,WEB.PB將返回具體的產品。

  首先開發服務器應用,分成以下幾步進行:

  a. 用application 畫筆創建一個新應用purchase,在其Library 屬性頁中將Web.PB class Library 的類庫文件webpb.pbl加入查找路徑中。

  b.用window畫筆創建一窗口對象wserver,用於啓動服務器應用,對WEB.PB進行服務。在其上加入"啓動服務器","關閉服務器"命令按鈕,在"啓動服務器"的click事件中定義transport類型的實例變量並賦值,監聽來自Web.PB調用請求。

  Transport cotransport  

  cotransport = create transport

  cotransport.driver="winsock"  //使用TCP/IP協議,與WEB.PB通信

  cotransport.location="136.158.188.12"  //服務器應用的IP地址

  cotransport.application="12560"   //服務器應用的TCP端口號

  cotransport.Listen( )  //開始啓動服務器應用,監聽來自WEB.PB請求

  c.用user object 畫筆創建非可視(NvO)用戶對象uoproduct,在其construct事件中用兩個事務對象型全局變量通過ODBC分別和webpb數據庫(用於WEB.PB調用中的會話和事務管理),應用數據庫進行連接。在destructor事件中,斷開連接並銷燬事務對象(此處程序略)。

  d.創建用戶對象函數fretrieveproduct

  ① 創建fretrieveproduct在查詢時所需用的數據窗口對象dwproduct。用datawindow 畫筆選擇select數據源和grid顯示方式。

  ② 定義用戶對象函數fretrieveproduct,函數參數爲sproducttype (字符型,傳值,)  

  返回值爲字符型。

  string returnhtml

  long lldwrow

  datastore datastore

  datastore .dataobject="dwproduct"

  datastore.settransobject(utransaction)

  lldwrow=datastore.retrieve( sproducttype)

  if lldwrow>0 then  

  returnhtml=returnhtml+datastore.object.datawindow.data.htmltable

  else

  return html="沒有檢索到數據"

  end if

  return returnhtml

  函數的作用是根據用戶選擇的產品類型來調用數據窗口進行數據查詢,並將結果以 HTML形式返回。

  至此我們已完成了服務器應用的開發,下面修改Pbweb.ini文件,添加有關此服務器應用位置信息的節purchase如下:  

  [purchase]

  driver=winsock

  application=12560

  location=136.158.188.12

  最後用FRONTPAGE,文本編輯器等來定製web頁,在其上加入    <FORM  ACTION="//scripts/pbisa60.dll/purchase/uoproduct/fretrieveproduct">

  <P>請選擇產品類型:

  <SELECT NAME="sproducttype">

  <OPTION> 針式打印機

  <OPTION> 噴墨打印機

  <OPTION> 激光打印機 </SELECT>

  <P> <INPUT TYPE="submit"><INPUT TYPE="reset"> </FORM>

  至此,全部工作完畢。在實際運行時,啓動Web服務器和purchase服務器,用戶查詢時即可得到所需結果。

  評價:WEB.PB是一種瘦客戶機方式,客戶機端除瀏覽器外無須添加其它任何軟件,支持Window,Unix,,Macintonish等多種平臺,適合於Internet/Intranet開發,但是相對來講其功能有限,無法發揮Powerbuilder的所有特點,用戶界面不太友好,業務邏輯也較簡單。如以此進行較爲複雜的應用開發必須和Java,Java Applet等結合起來。

  四.PLUG_IN方式

  插入件最早是由網景公司提出的,後來得到了衆多瀏覽器開發廠商的認可,插入件以多種方式擴展瀏覽器的功能。NPPBA60.DLL和NPPBS60.DLL是Powersoft 公司開發的插入件文件。它分爲窗口(Window)和數據窗口(Datawindow)兩種,從安全角度還可分爲普通模式和安全模式。安全模式的插入件限制了Powerbuilder 應用在客戶機上除打印以外的幾乎所有活動。在插入件方式下,我們可以使用Powerbuilder裏的所有控件,函數和方法,發揮它幾乎全部功能。實際上,插入件方式只是傳統的客戶機/服務器結構的應用在Web上的一種表現形式。

  瀏覽器訪問Web服務器得到嵌有窗口插入件的HTML文檔後,瀏覽器識別出EMBED元素,按它的WIDTH和HEIGHT屬性在頁面上爲插入件預留所需空間,並向Web服務器請求卸載.PBD文件。Web服務器先後向瀏覽器傳遞PBD文件的MIME類型(application /vnd. powerbuilder6)和PBD文件。瀏覽器在其Plugin子目錄下,查找並調用NPPBA60.DLL,再由其調用Powerbuilder運行動態庫。這樣,被插入的子窗口就顯示在瀏覽器規定的位置,並執行其Open事件的處理程序,然後開始響應用戶動作,進行事件處理。當用戶轉到其他Web文檔時,PBD文件從內存中被清除。

  用插入件方式開發與普通的Client/Server開發過程大致相同,只是要做一些調整,主要包括:① 嵌入窗口必須是Child 類型,在編程時必須用this,parent等來引用它而不能直接引用它的名字;② 可以使用應用對象內定義的全局變量,但不能使用應用對象的事件;③ 外部文件和所使用的ole控件必須保證在瀏覽器客戶端存在。生成.PBD文件後,掛在Web目錄合適的位置。仍以上面例子爲例,說明開發過程。首先開發 Powerbuilder應用:

  ① 用application畫筆創建一個新應用purchase。

  ② 用window 畫筆創建一個child類型窗口wchildpurchase,上面有數據窗口dwproduct用於瀏覽數據,下拉列表ddlbtype 選擇產品類型,按扭cbretrieve來數據檢取。

  ③ 數據窗口對象和WEB.PB相同。

  ④ 在wchildpurchase的open 事件中,和應用數據庫進行連接。

  Sqlca.database="odbc"

  Sqlca.dbparm="connectstrng='DSN=purchase;UID=dba;PWD=sql"

  Connect using sql;

  ⑤ 在cbretrieve的clicked事件中,進行查詢

  parent.dwproduct.retrieve(ddlb1.text)

  完成上述工作後,用project畫筆生成purchase..pbd文件,將其移入Web目錄中(如..\pbembed目錄下),然後編輯HTML文檔,嵌入如下代碼:

  <P><EMBED SRC="../pbembed/purchase.pbd" WIDTH=400 HEIGHT=250

  WINDOW="wchildpurchase"

  APPLICATION="purchase">

  最後,在Web服務器上爲插入件設置MIME類型。Web服務器所在的操作系統不同,註冊方法也不一樣。以Windows NT爲例,啓動註冊表編輯器(regedt32.exe)並打開HKEYLOCALMACHINE \SYSTEM\CurrentControlSet \Services\InetInfo\Parameters\MimeMa-p,爲MIME映射添加值: application/vnd. powerbuilder,5.這樣PBD文件就能被正確得傳送和下載到瀏覽器端。

  爲了和瀏覽器環境相協調,最好不要或少從child 子窗口再打開其它窗口。通常在使用中可以多用幾個插件(即child 窗口),每個插件完成的功能少一些。對於比較複雜的應用,還可以使用Javascript 來協調插入件之間的同步[3]。

  插入件方式是一種胖客戶機方式,客戶機端除瀏覽器外,還必須裝有Powerbuilder 動態運行庫 ,因此訪問受限,對於Internet來說,不太合適。而對於工作環境和要求都已知的Intranet來說較爲合適,功能較強,實現起來簡便易行,可維護性好。

  五.ActiveX

  Powerbuilder 的ActiveX方式和Plugin方式的原理基本相同,爲簡便起見,在這裏主要說明它們之間的差異。當瀏覽器從服務器中下載嵌有ActiveX的HTML文檔,遇到OBJECT標記時,先預留給定的空間,然後瀏覽器將查找本地註冊的ActiveX控件是否有此註冊號,如有就將其直接顯示,否則視其安全需要從Web服務器中下載ActiveX控件(在OBJECT 的CODEBASE屬性中給出),並在本地機中註冊,然後使用。用ActiveX方式進行開發和Plugin 也基本一樣,在編輯HTML文檔時所用的元素不同(爲OBJECT),以上例爲例:  

  <P>〈OBJECT ID="purchase" WIDTH=400 HEIGHT=250

  CLASSID="CLSID:CEC58653-C842-11CF-A6FB-0805FA8669E>

  <PARAM NAME="Version",VALUE="65536">

  <PARAM NAME="Extentx",VALUE="9440">

  <PARAM NAME="Extenty" VALUE="7112">

  <PARAM NAME="StockProps" VALUE="0">

  <PARAM NAME="PBWindow" VALUE ="wchildpurchase">

  <PARAM NAME="LibList",VALUE="../pbembed/purchase.pbd>

  <PARAM NAME="PBApplication" VALUE="purchase">

  最後,在Windows 95,Windows NT上使用以下命令註冊OCX控件: Regsvr32.exe pbrx60.ocx。

  ActiveX 也是一種胖客戶機方式,客戶機方除瀏覽器外還要有PBRX60.OCX和Powerbuilder 動態運行庫支持。此外,目前ActiveX僅有Windows 平臺的支持,因此ActiveX 目前還不適合用於Internet 開發,而對需求和應用環境已知的Intranet應用比較合適。它與Plugin相比,我們還可以使用pbrx60.ocx的方法TriggerPbevent()和InvokePbfunction()等通過Javascipt和vbscipt和其它ActiveX控件交互,進行更爲複雜的控制和開發。在開發中還要注意對瀏覽器安全選項的設置不能太高,否則無法通過安全檢查,另外目前的PBRX60.ocx是針對IE3.0開發的,在IE4.0上使用有跳框現象。

  結束語

  在以上的分析和說明中主要闡述了幾種開發方法的原理,開發方法和使用特點,注意事項,在使用時可根據要求和開發環境來進行選擇。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章