PB7.0中實現Jaguar GTS組件開發廣州金宇恆科技有限公司 陳紀山 |
01-6-25 下午 05:42:09 |
PB7.0 與Jaguar CTS(組件事務服務器) 做到了緊密集成,只需要編寫少量代碼,就可以建立基於Jaguar CTS 的組件,同時Jaguar CTS本身內置PB虛擬機,使用PB7.0編寫的組件可以直接與Jaguar CTS進行高效通信。這樣PB組件通過Jaguar CTS與後臺數據庫建立連接,方便地實現基於三層體系結構的開發。 |
建立Jaguar 組件 |
在PB中有三種方法可以建立Jaguar組件: |
1、Start Wizard:建立一個新的應用、新的用戶對象和新的工程; |
2、Object Wizard:在已有的應用的基礎上建立一個新的用戶對象和工程; |
3、Project Wizard:從已有的用戶對象中生成一個Jaguar組件。 |
你可以根據需要選擇以上三種方法之一來建立Jaguar組件。建立Jaguar組件一般有如下四步: |
1、使用Start Wizard(或者Object Wizard、Project Wizard)來建立一個新的應用、新的用戶對象和新的工程; |
2、爲用戶對象加入方法、事件和實例變量; |
3、測試組件; |
4、發佈組件至Jaguar CTS。 |
建立Jaguar客戶端應用 |
爲了實現客戶端與Jaguar組件的通信,需按如下步驟建立Jaguar客戶端應用: |
1、使用Jaguar Connection Object Wizard建立一個連接對象; |
2、使用Jaguar Proxy Wizard來建立一個工程,使用該工程產生代理對象; |
3、建立窗口、菜單、腳本來做一個客戶端圖形用戶界面; |
4、編寫適當的代碼來創建Jaguar組件實例並且訪問它的方法(通過代理對象); |
5、測試客戶端應用; |
6、發佈客戶端應用。 |
實 例 |
本實例通過PB7.0建立一個Jaguar CTS組件,然後發佈至Jaguar CTS服務器,該服務器通過ODBC數據源(本例數據源名爲EAS Demo DB V3)與後臺數據庫(本例使用Sybase Adaptive Anywhere數據庫,數據庫名爲:EASDemoDB.db) 相連,客戶端代理程序通過Jaguar CTS組件對後臺數據庫進行訪問,比如查詢employee表中的僱員情況等,從而實現一個典型的PB三層體系結構應用。具體做法如下: |
1.建立Jaguar CTS組件 |
啓動PB7.0,選擇File-->New,彈出一個對話框,選擇Start Wizard頁,雙擊啓動Jaguar Componet圖標,在嚮導的指引下,可以一步一步生成一個新的應用、組件、工程,在此分別命名爲jag_app、n_jag_cmp、p_jag_prj。 |
打開Library畫筆,打開jag_app所在的庫文件,雙擊打開 n_jag_cmp用戶對象,在Declare欄聲明如下實例變量: |
protected: |
DataStore ids_emp //聲明一個不可視的數據存儲對象 |
在n_jag_cmp用戶對象的Constructor事件中,建立數據庫連接,代碼如下: |
// Profile EAS Demo DB V3 |
SQLCA.DBMS = “ODBC" |
SQLCA.Database = “EAS Demo DB V3" |
SQLCA.AutoCommit = False |
SQLCA.DBParm = “ConnectString= |
‘DSN=EAS Demo DB V3;UID=dba;PWD=sql'" |
// |
CONNECT USING SQLCA; |
//創建數據存儲對象,並作必要設置 |
ids_emp=Create DataStore |
ids_emp.DataObject=“d_emp" |
ids_emp.SetTransObject(SQLCA) |
在n_jag_cmp用戶對象的Destructor事件中,做如下清理工作來釋放資源: |
Destroy ids_emp |
DISCONNECT USING SQLCA; |
爲n_jag_cmp用戶對象增加一個函數uf_employee,該函數訪問類型爲Public,返回值爲blob類型,無參數,函數體如下: |
blob lblb_data |
ids_emp.Retrieve() |
ids_emp.GetFullState(lblb_data) |
Return lblb_data |
創建一數據窗口對象,名爲:d_emp,該數據窗口顯示風格爲Grid,語法如下: |
SELECT “employee".“emp_id", |
“employee".“emp_fname", |
“employee".“emp_lname", |
“employee".“birth_date", |
“employee".“salary", |
“employee".“sex" |
FROM “employee" |
關閉除了Library之外的所有畫筆,雙擊p_jag_prj工程對象打開工程畫筆,點擊快捷工具欄的Build圖標,編譯並將該組件發佈至指定的Jaguar CTS 服務器。 |
2.建立客戶端應用 |
選擇File-->New, 彈出一個對話框,雙擊Start Wizard 頁的Application圖標,創建一個新的PBL庫和一個應用對象,PBL庫名爲:Jag_client.pbl,應用對象名稱爲:Jag_client_app。 |
選擇File-->New, 彈出一個對話框,雙擊Object頁的 Connection Object Wizard圖標,創建一個連接對象,連接對象名稱爲jag_connection,注意在 Specify Connectivity畫面選擇連接選項時務必選擇Requires Jaguar Connection一項。指定 Jaguar CTS 服務器所在的機器名,缺省的端口爲9000,缺省的登錄ID爲jagadmin。選擇相應包的名稱(即建立Jaguar CTS組件時所指定的包的名稱)。按照嚮導指示完成餘下的步驟。 |
選擇File-->New, 彈出一個對話框,雙擊Project頁的Jaguar Proxy Wizard圖標創建一個代理工程對象,名稱爲p_jag_client_prg,按上述同樣的方法指定Jaguar CTS服務器和包的參數。 |
創建完畢後,雙擊p_jag_client_prg對象,打開工程畫筆,點擊快捷工具欄的Build圖標,聯編p_jag_client_prg對象。這時你就會發現在jag_client.pbl 中多了一個n_jag_cmp代理對象。 |
選擇File-->New, 彈出一個對話框,雙擊Object頁的 Window圖標,創建一個窗口對象,對象名稱爲:w_proxy,保存該對象。 |
在w_proxy中增加如下控件:一個數據窗口控件,控件名爲:dw_employee,一個按鈕控件,控件名爲cb_retrieve,文本爲:提取數據。 |
在w_proxy的DECLARE 欄位聲明一個連接實例和一個組件實例,代碼如下: |
jag_connection my_conn |
n_jag_cmp my_comp |
在w_proxy的open事件中實例化連接對象,並連接至Jaguar CTS,代碼如下: |
my_conn = create jag_connection |
my_conn.ConnectToServer() |
在w_proxy的close事件中斷開連接並清理連接對象,代碼如下: |
my_conn.DisconnectServer() |
destroy my_conn |
在cb_retrieve按鈕的clicked事件中加入如下代碼: |
blob lblb_data |
If Not Isvalid(my_comp) Then |
my_conn.CreateInstance(my_comp) |
//創建組件實例 |
End If |
lblb_data=my_comp.uf_employee() |
//調用組件的方法 |
dw_employee.SetFullState(lblb_data) |
//將所需的數據展示於數據窗口中 |
最後編譯並運行客戶端程序,會得到如下運行結果: |
本實例在Windows NT4.0(sp4)、Adaptive Server Anywhere6.0、Jaguar CTS3.0、PB7.0下運行通過。 |