這一章主要介紹了什么是PFC的Services ,以及如何使用它們。
一、應(yīng)用程序服務(wù)
PFC提供了以下各種應(yīng)用程序Services :
DataWindow caching Debugging Error Application preference Most recently uesed object Security Transaction registration |
你必須通過(guò)n_cst_appmanager(應(yīng)用程序管理器)來(lái)控制這些 Services (這些Services實(shí)際上是應(yīng)用程序管理器的是數(shù)據(jù)成員)。應(yīng)用程序管理器(application manager)通過(guò)調(diào)用成員函數(shù)來(lái)開(kāi)啟與關(guān)閉Services 。由于它們?cè)趹?yīng)用程序管理器的范圍內(nèi)有效。而應(yīng)用管理器是全局變量,因此你可以在你的應(yīng)用程序的任何地方是使用應(yīng)用程序Services 。
1. DataWindow caching service
概要:
Datawindow caching service為Datawindow提供了數(shù)據(jù)緩沖。它將數(shù)據(jù)保存在內(nèi)存中,從而減少了程序訪問(wèn)數(shù)據(jù)庫(kù)的頻率,加快了程序的執(zhí)行速度。 Datawindowcaching service支持如下的數(shù)據(jù)源:
l_ Datawindow對(duì)象,它的數(shù)據(jù)可以來(lái)自于數(shù)據(jù)庫(kù)表也可以來(lái)自存儲(chǔ)過(guò)程。
l_ SQL語(yǔ)句
l_ Datawindow控件
l_ DataStore對(duì)象
l_ 數(shù)組中的數(shù)據(jù)
l_ 文件
PFC使用Powerbuilder的Datastore來(lái)實(shí)現(xiàn)Datawindow caching service 。它對(duì)的對(duì)象是n_cst_dwcache 。
PFC的代碼實(shí)際只在父類對(duì)象中這本書講述的都是擴(kuò)展類的對(duì)象,就像 n_cst_dwcache 。而實(shí)際上PFC的代碼全在父類的對(duì)象中(pfc_n_cst_dwcache)。
使用方法
使用DataWindow caching 可以將數(shù)據(jù)庫(kù)訪問(wèn)頻率降到最低,可以加快程序運(yùn)行速度。
2 開(kāi)啟DataWindow caching
l_ 調(diào)用n_cst_appmanager的of_SetDWCache函數(shù)
gnv_app.of_SetDWCache(TRUE)
(1) 使用Datawindow caching :
(1). 調(diào)用of_Register函數(shù)進(jìn)行數(shù)據(jù)緩存,同時(shí)依據(jù)不同的數(shù)據(jù)提供相應(yīng)的參數(shù)。
l_ 緩存Datawindow對(duì)象從數(shù)據(jù)庫(kù)中檢索出的數(shù)據(jù)時(shí):你需要傳遞標(biāo)識(shí)符(identifier)、事務(wù)對(duì)象、Datawindow對(duì)象名、其他參數(shù)(如果存在的話)。
l_ 緩存SQL語(yǔ)句從數(shù)據(jù)庫(kù)中檢索出的數(shù)據(jù)時(shí):你需要傳遞標(biāo)識(shí)符(indentifier)、事務(wù)對(duì)象、SQL語(yǔ)句。
l_ 將數(shù)據(jù)緩存到數(shù)組中:傳遞標(biāo)識(shí)符(identifier)、Datawindow對(duì)象名、數(shù)據(jù)。
l_ 緩存DataWindow控件中的數(shù)據(jù):傳遞標(biāo)識(shí)符(identifier)、Datawindow控件。
l_ 緩存DataStore中的數(shù)據(jù):傳遞標(biāo)識(shí)符(identifier)、DataStore對(duì)象。
l_ 緩存文件中的數(shù)據(jù):傳遞標(biāo)識(shí)符(identifier)、文件名。
(2) 你可以使用函數(shù)of_IsRegistered(參數(shù)是對(duì)象本身),確定DataWindow對(duì)象是否已經(jīng)在caching service中注冊(cè)了。
(3) 調(diào)用函數(shù)of_GetRegistered函數(shù)訪問(wèn)已經(jīng)緩存的數(shù)據(jù)。
Gnv_app.inv_dwcache.of_GetRegistered(攄_emplist敚琲ds_datastore)
Ids_datastore.ShareData(dw_emplist)
(4) 調(diào)用函數(shù)of_Refresh檢索已經(jīng)緩存數(shù)據(jù)的DataWindow 。
(5). 調(diào)用函數(shù)of_UnRegister函數(shù)停止數(shù)據(jù)緩存服務(wù)。
(6) (可選)調(diào)用n_cst_appmanager的of_SetDWCache函數(shù)關(guān)閉DataWindow cachi ng service 。
gnv_app.of_SetDWCache(FALSE)
通常你沒(méi)必要顯示的關(guān)閉DataWindow caching service 。PFC在刪除對(duì)象n_cst_dwcache時(shí)會(huì)自動(dòng)的關(guān)閉它。
2. Debugging service
概要:
Debugging service 在應(yīng)用程序遇到錯(cuò)誤時(shí)會(huì)自動(dòng)顯示錯(cuò)誤信息。PFC的消息路由當(dāng)發(fā)現(xiàn)需要調(diào)用的事件不存在時(shí)便會(huì)使用Debugging service顯示出錯(cuò)信息。
重要說(shuō)明:PFC debugging service 只是一個(gè)開(kāi)發(fā)工具。在用戶的應(yīng)用程序中不要開(kāi)啟它。
使用方法
使用debugging service 可以幫助你在PFC的開(kāi)發(fā)過(guò)程中解決問(wèn)題。
(1) 調(diào)用n_cst_appmanager的of_SetDebug函數(shù)開(kāi)啟Debugging service 。
gnv_app.of_SetDebug(TRUE)
(2) PFC的對(duì)象首先檢測(cè)應(yīng)用程序的debugging狀態(tài),然后在適當(dāng)?shù)那闆r下顯示錯(cuò)誤信息。
(3) (可選)調(diào)用n_cst_appmanager的 of_SetDebug函數(shù)關(guān)閉Debugging service。
gnv_app.of_SetDebug(FALSE)
多數(shù)情況下,你不需要顯示的關(guān)閉Debugging service 。
3. Application preference service
概要:
你可以利用Application preference service保存、恢復(fù)應(yīng)用程序、用戶的信息到INI文件或WINDOWS的注冊(cè)表中。保存和恢復(fù)應(yīng)用程序設(shè)置有如下兩個(gè)好處:
l_ 延續(xù)性:保存應(yīng)用程序的設(shè)置可以使得用戶在下次使用軟件時(shí)可以看到他上次關(guān)閉軟件的樣子。也就是說(shuō)用戶不必每次使用軟件時(shí)都重新設(shè)置他的軟件環(huán)境。
l_ 容易維護(hù):你可以無(wú)須更改n_cst_appmanager的代碼的情況下更新應(yīng)用程序的設(shè)置。
PFC通過(guò)用戶自定義對(duì)象n_cst_apppreference提供Application preference ser vice 。
這個(gè)Service保存應(yīng)用程序的如下信息:
用戶鍵(User key)
MicroHelp Help File Version Logo bitmap Copyright notice DDETimeOut property DisplayName property DWMessage Title property MicrohelpDefault property RightToLeft property ToolbarFrameTitle property ToolbarPopMenuText property ToolbarSheetTitle property ToolbarUserControl property Application preference service 同時(shí)保存如下的用戶信息 ToolbarText property ToolbarTips property User ID |
保存、恢復(fù)設(shè)置
Application perference service 在應(yīng)用程序開(kāi)啟的時(shí)候會(huì)自動(dòng)恢復(fù)應(yīng)用程序在關(guān)閉時(shí)保存的設(shè)置。這些信息可以保存到注冊(cè)表中(只限于Windows95和Windows NT)或者INI文件中。你可以按照如下說(shuō)明:
l_ 保存到注冊(cè)表中:調(diào)用函數(shù)of_SetUserKey ,指定你需要保存的鍵。
l_ 保存到INI文件中:調(diào)用函數(shù)of_SetUserINIFile ,指定用于保存信息的INI文件名。
使用步驟:
(1) 調(diào)用n_cst_appmanager的of_SetAppPref函數(shù)開(kāi)啟Application preference s ervice 。
gnv_app.of_SetAppPref(TURE)
(2) 依據(jù)不同的執(zhí)行平臺(tái)采用不同的方式保存應(yīng)用程序信息。下面的例子就是在應(yīng)用程序的構(gòu)造事件中保存應(yīng)用程序的信息。同時(shí)假設(shè)你已經(jīng)在 n_cst_appmanager中建立好了應(yīng)用程序信息鍵、用戶信息鍵、應(yīng)用程序INI文件、用戶INI文件。
IF this.of_IsRegistryAvailable() THEN this.inv_apppref.of_SetAppKey(this.of_GetAppKey()) this.inv_ apppref.of_SetUserKey(this.of_GetUserKey()) ELSE this.inv_apppref.of_SetAppINIFile(this.of_GetAppINIFile()) this.inv_ap ppref.of_SetUserINIFile(this.of_GetUserINIFile()) END IF |
(3) 調(diào)用函數(shù)of_SetRestoreApp和of_SetRestoreUser函數(shù)設(shè)置需要保存信息的類型:
this.inv_apppref.of_SetRestoreApp(TRUE) this.inv_apppref.of_SetRestoreUser(TURE) |
4. Most recentily used object service
概要
你可以使用Most recentily used object service(最近使用對(duì)象Service)將最經(jīng)使用的對(duì)象、表單列在文件菜單下。默認(rèn)情況下只允許顯示5個(gè)最經(jīng)使用對(duì)象。
但是,你可以改變這個(gè)數(shù)量。
PFC 通過(guò)n_cst_mru用戶自定義對(duì)象提供MRU Service(Most recentily uesd ob ject service)。
MRU Service在應(yīng)用程序啟動(dòng)時(shí)會(huì)自動(dòng)的將應(yīng)用程序關(guān)閉時(shí)保存的最經(jīng)使用過(guò)的對(duì)象信息加載到應(yīng)用程序中。這些信息可以保存到注冊(cè)表或者INI文件中。你可以通過(guò)如下的方式:
l_ 保存到注冊(cè)表中:調(diào)用函數(shù)of_SetUserKey函數(shù)確定要保存到注冊(cè)表中的MRU信息。
l_ 保存到INI文件中:調(diào)用函數(shù)of_SetUserINIFile函數(shù)指定用于保存MRU信息的INI文件。
l_ 你必須還要額外編寫代碼:
為了使用MRU Service ,你必須在你想啟用MRU Service的窗口的兩個(gè)事件中編寫代碼。
l_ pfc_MRUProcess :在窗口開(kāi)啟時(shí)加載MRU信息。
l_ pfc_PreMRUSave :在窗口關(guān)閉時(shí)保存MRU信息。
與PFC菜單的結(jié)合
PFC的 m_master菜單的FILE菜單包括了五個(gè)MRU菜單項(xiàng),你還可以自己添加。
如果你的應(yīng)用程序沒(méi)有使用PFC的菜單,那么請(qǐng)以 m_master為模板建立你自己的M RU菜單項(xiàng)。
使用MRU Service步驟
(1) 調(diào)用n_cst_appmanager中的of_SetMRU函數(shù)開(kāi)啟MRU Service 。
gnv_app.of_SetMRU(TRUE)
(2) 調(diào)用n_cst_appmanager的函數(shù)of_SetUserKey(盡適用于WIN95與WINNT)或of
_SetUserINIFile函數(shù)(使用于所有的平臺(tái))確定需要保留的信息。下面的例子假設(shè)你已經(jīng)為n_cst_appmanager建立好了的用戶鍵(保存到注冊(cè)表)或者INI文件(保存到INI文件)。下面的代碼位于應(yīng)用程序管理器(n_cst_appmanager)的構(gòu)造事件。
IF this.of_IsRegistryAvailable() THEN this.inv_mru.of_SetUserKey(this.of_GetUserKey()) ELSE this.inv_mru.of_SetUserINIFile(this.of_GetUserINIFile()) END IF (3) Register IDs with the MRU service by calling the n_cst_mru of_Regis ter function. An ID is the identifier that the window will use to retr ieve information out of the MRU service. This is an example of code yo u can add to the pfc_PreOpen event of the MDI frame window: IF IsValid(gnv_app.inv_mru) THEN gnv_app.inv_mru.of_Register("myapp") END IF (4) Extend the pfc_MRUProcess event in each window that uses exclusive processing, adding code to open the sheet passing the necessary argume nts (be sure to add similar code to the frame window if you want to sp ecify exclusive items on the frame menu): Window lw_frame, lw_window n_cst_menu lnv_menu n_cst_mruattrib lnv_mru attrib // Check parameters. IF IsNull(ai_row) THEN Return -1 END IF IF NOT IsValid(gnv_app.inv_mru) THEN Return -1 END IF // Retrieve row from DataStore. gnv_app.inv_mru.of_GetItem & (ai_row, lnv_mruattri b) // Get the MDI frame, if necessary. lnv_menu.of_GetMDIFrame(this.me nuid, lw_frame) OpenSheet(lw_window, & lnv_mruattrib.is_classname, lw_frame) Return 1 Performing other actions in the pfc_MRUProcess eventTo see other types of processing you can perform in the pfc_MRUProcess event, see the co mments in the pfc_w_master pfc_MRUProcess event.5Extend the pfc_PreMRU Save event in each window that uses the MRU service. In this event, po pulate the n_cst_mruattrib object with the id, classname, key, item, a nd MicroHelp to be saved: anv_mruattrib.is_id = "myapp" anv_mruattrib.is_classname = this.ClassN ame() anv_mruattrib.is_menuitemname = this.Title anv_mruattrib.is_menu itemkey = this.ClassName() anv_mruattrib.is_menuitemmhelp = & "O pens " + this.Title Return 1 6Extend the pfc_MRURestore event in eac h window that uses the MRU service. In this event, set the ID of the i nformation you want to display on the menu: If IsValid(gnv_app.inv_mru) Then Return gnv_app.inv_mru.of_Restore ("myapp", This) End If |
5. Error message service
概要
Error Message service提供了許多用于顯示、紀(jì)錄應(yīng)用程序的錯(cuò)誤信息。你既可以顯示PowerBuilder提供的標(biāo)準(zhǔn)的Message對(duì)話框,也可以顯示PFC 的W_Message對(duì)話框。兩種顯示效果都具有如下的功能:
l_ 消息日志:將消息紀(jì)錄到文件中,支持多種平臺(tái)。PFC會(huì)自動(dòng)的將嚴(yán)重級(jí)別大于某個(gè)值的消息紀(jì)錄到文件中。
l_ 支持MAPI:通過(guò)Email發(fā)出錯(cuò)誤警告。PFC會(huì)自動(dòng)將嚴(yán)重級(jí)別大于某個(gè)值的消息作為郵件發(fā)出。
l_ 消息數(shù)據(jù)庫(kù):通過(guò)已經(jīng)定義好的形式(可以是數(shù)據(jù)庫(kù)或文件)來(lái)存取消息。定義好了消息格式,使得消息有一種標(biāo)準(zhǔn)的形式、消息的重復(fù)減到最少、容易查詢。
l_ 參數(shù)替代:消息可以具有參數(shù),這樣它會(huì)依據(jù)程序運(yùn)行而變化。
l_ 不顯示,直接紀(jì)錄:消息可以不顯示直接紀(jì)錄到日志中。
l_ 注釋與打印:用戶可以打印消息,甚至可以增加注釋。對(duì)消息日志用于郵件時(shí)非常有用的。
l_ 自動(dòng)關(guān)閉:w_message過(guò)了數(shù)秒后會(huì)自動(dòng)關(guān)閉。
W_message 位圖
如果你使用w_message ,位圖在運(yùn)行時(shí)必須有效。
用法
Error service可以處理應(yīng)用程序所有的錯(cuò)誤信息。如果你打算將錯(cuò)誤信息保存到數(shù)據(jù)庫(kù)中,你可以使用PFC.DB中關(guān)于消息的幾個(gè)表,或使用消息管道將它傳到你的數(shù)據(jù)庫(kù)中。
使用Messages表
大多數(shù)情況下,你應(yīng)該將Messages表復(fù)制到你的數(shù)據(jù)庫(kù)中。這個(gè)表已經(jīng)包含了PFC的錯(cuò)誤信息格式。
使用步驟:
(1) 調(diào)用n_cst_appmanager的of_SetError函數(shù)開(kāi)啟error message service(創(chuàng)建n_cst_error實(shí)例),下面的代碼位于n_cst_appmanager的pfc_Open事件:
this.of_SetError(TRUE)
(2) 定義錯(cuò)誤消息的源:
l_ 如果消息源是文件,調(diào)用如下函數(shù):
this.inv_error.of_SetPredefinedSource(揷:/eisapp/eiserr.txt?
l_ 如果消息源是數(shù)據(jù)庫(kù),調(diào)用如下函數(shù):
this.inv_error.of_SetPredefinedSource (itr_error)
消息源:當(dāng)你使用文件作為消息源時(shí),文件中必須包括PFC.DB中Messages表中的所有數(shù)據(jù)。同時(shí)列必須由TAB鍵隔開(kāi)。
PFC uses predefined messages in certain situations. If you enable the error message service and receive message display errors, make sure th e error message source has been established correctly. Additional user -defined messages must conform to the format of the messages table (al so used by the d_definedmessages DataWindow object). |
l_ (可選)設(shè)置日志文件名(調(diào)用函數(shù)of_SetLogFile參數(shù)為空字符串可以不進(jìn)行日志紀(jì)錄):
this.inv_error.of_SetLogFile(擟:/pb6/errlog.txt敚?
l_ (可選)設(shè)置用戶ID(用于日志文件):
this.inv_error.of_SetUser(this.of_GetUserID())
l_ (可選)設(shè)置什么類型的消息需要自動(dòng)紀(jì)錄:
this.inv_error.of_SetNotifySeverity(5) this.inv_error.of_SetLogSeverity(4) |
l_ (可選)如果你的應(yīng)用程序使用了錯(cuò)誤自動(dòng)通告功能。你需要設(shè)置當(dāng)前用戶的Email、密碼。還可以設(shè)置其他的Email用戶與密碼。下面的例子展示了如何設(shè)置Email ID與Password 。
this.inv_error.of_SetNotifyConnection(ims_mailsess) this.inv_error.of _SetNotifyWho(is_autonotify) |
說(shuō)明:以上的代碼都可以在n_cst_appmanager的pfc_Open事件中。
l_ 在應(yīng)用程序的錯(cuò)誤檢測(cè)中,使用函數(shù)of_Message顯示對(duì)話框。同時(shí)你還可以將它紀(jì)錄到日志中。函數(shù)of_Message可以使用數(shù)據(jù)庫(kù)中的消息,也可以動(dòng)態(tài)的指定消息。下面的例子就是使用數(shù)據(jù)庫(kù)中的消息:
gnv_app.inv_error.of_Message
使用參數(shù)表(只限于已定義的消息)
(1) 在消息表中定義如下的數(shù)據(jù)。%運(yùn)行時(shí)將被替換:
EIS1030 Unable to find the file % in %
(2) 定義一個(gè)參數(shù)數(shù)組:
String ls_parms[]
ls_parms[1] = 揕ogfile.txt?
ls_parm[2] = 揷:/windows/system?
(3) 調(diào)用of_Message ,傳遞參數(shù):
gnv_app.inv_error.of_Message(擡IS1030敚琹s_parms)
PFC在顯示消息時(shí)使用數(shù)組中的第一個(gè)元素替換第一個(gè)% ,第二元素替換第二個(gè)%。
6. Security service
概要
PFC的安全機(jī)制可以處理許多你的應(yīng)用程序安全性問(wèn)題。它包括應(yīng)用程序管理員組件、安全對(duì)象(security object)n_cst_security 。
用法:在使用Security service時(shí),你必須要定義用戶組與用戶,然后分別與窗口、菜單、用戶對(duì)象、控件相關(guān)聯(lián),然后再編寫代碼。
使用步驟:
(1) 定義用戶、用戶組。參考第七章擯FC Utilities?
為你的窗口控件、菜單、用戶對(duì)象、其他控件定義安全屬性。
(2) 調(diào)用n_cst_appmanager的of_SetSecurity函數(shù)創(chuàng)建安全對(duì)象this.of_SetSecurity(TRUE)
(3) 為安全對(duì)象建立一個(gè)事務(wù)對(duì)象。
Itr_sec = Create n_tr
Connect using itr_sec;
(4) 調(diào)用函數(shù)of_InitSecurity初始化安全對(duì)象。
This.inv_security.of_InitSecurity(itr_sec.擡ISAPP敚琯nv_app.of_GetUserID()
(5) 以上的代碼全部在n_cst_appmanager的pfc_Open事件中編寫。
(6) 應(yīng)用程序關(guān)閉時(shí),斷開(kāi)事務(wù)對(duì)象的連接、刪除事務(wù)對(duì)象。以下的例子在n_cst _appmanager的pfc_Close事件中。
Disconnect using itr_sec;
Destroy itr_sec
7. 在你需要使用安全對(duì)象的窗口的Open事件或pfc_PreOpen事件中調(diào)用函數(shù)of_SetSecurity()
IF NOT gnv_app.inv_security.of_SetSecurity(this) THEN MessageBox("Security","Unable to set security") Close(this) End if |
說(shuō)明:你可以在其他對(duì)象(Datawindow、可視用戶對(duì)象、菜單,所有你想實(shí)現(xiàn)安全機(jī)制的對(duì)象)。
7. Transaction registration service
概要
Transaction registration service可以追蹤你的應(yīng)用程序中的事務(wù)對(duì)象的使用過(guò)程。這個(gè)服務(wù)只對(duì)基于n_tr的對(duì)象有效。PFC使用n_cst_trregistration 對(duì)象實(shí)現(xiàn)Transaction registration service 。
用法
當(dāng)應(yīng)用程序中使用多個(gè)事務(wù)對(duì)象時(shí),你應(yīng)該使用Transaction registration service跟蹤所有的事務(wù)對(duì)象。當(dāng)你的應(yīng)用程序關(guān)閉時(shí),該對(duì)象將會(huì)自動(dòng)刪除所有已注冊(cè)的事務(wù)對(duì)象。使用n_tr的函數(shù) of_SetAutoRollback設(shè)置ib_autorollback的值。如果ib_SetAutoRollback的值為False ,則事務(wù)對(duì)象關(guān)閉時(shí)將會(huì)自動(dòng)提交。如果ib_SetAutoRollback的值為True ,則事務(wù)對(duì)象關(guān)閉時(shí)會(huì)自動(dòng)回滾。
啟動(dòng) Transaction registration service
l_ 調(diào)用n_cst_appmanager的of_SetTrRegistration函數(shù) gnv_app.of_SetTrRegistration(True)當(dāng)應(yīng)用程序關(guān)閉時(shí),應(yīng)用程序會(huì)自動(dòng)刪除 Trasaction registration service 。
注冊(cè)事務(wù)對(duì)象:
l_ 調(diào)用n_cst_trregistration的of_Register函數(shù) gnv_app.inv_trregistration.of_Register(SQLCA) 控制當(dāng)事務(wù)對(duì)象正處于連接時(shí)被刪除時(shí)的行為l_ 調(diào)用n_tr的of_SetAutoRollback函數(shù)SQLCA.of_SetAutoRollback(True)如果你設(shè)置為True ,同時(shí)該對(duì)象正處于連接狀態(tài),當(dāng)它被刪除時(shí)Service會(huì)回滾該事務(wù)。如果你設(shè)置為False ,Service回提交該事務(wù)。盡管如此,你應(yīng)該顯示的提交或回滾、斷開(kāi)連接。
2 Datawindow服務(wù)
概要
大部分的PowerBuilder的應(yīng)用程序都大量的使用了Datawindow控件。PFC因此提供了功能強(qiáng)大的Datawindow Services 。大部分的Service使用時(shí)只需一點(diǎn)代碼或者根本不需要編碼。PFC的Datawindow Servies實(shí)際上都是由一個(gè)公共的父類對(duì)象(不可視用戶自定義對(duì)象)繼承而來(lái)。這個(gè)父類對(duì)象包括了許多Service的函數(shù)、事件、實(shí)例變量。同時(shí)么每個(gè)Datawindow Service還有自己的函數(shù)、事件、實(shí)例變量。
訪問(wèn)Datawindow Services
為了使用DataWindow Services,你應(yīng)該建立基于u_dw的Datawindow對(duì)象。U_dw對(duì)象包括:
l_ 用于開(kāi)啟、關(guān)閉Datawindow Services的函數(shù)。
l_ 用于調(diào)用各種Services的函數(shù)、事件、實(shí)例變量的引用變量。
l_ 調(diào)用Datawindow Service的函數(shù)、事件的Precoded事件、用戶事件
l_ 可供你編寫代碼的空事件在你的應(yīng)用程序中所有的DataWindow控件都必須是u_dw的子類。
開(kāi)啟DataWindow Services
只開(kāi)啟Datawindow控件需要的Servie ,這樣才能將應(yīng)用程序的負(fù)荷將到最小。以下表格列出了所有的Datawindow Service ,以及對(duì)應(yīng)的對(duì)象。
DataWindow Service 對(duì)應(yīng)的對(duì)象
Datawindow service的基類 n_cst_dwsrv Dropdown search service n_cst_dwsrv_dropdownsearch Filters service n_cst_dwsrv_filter Find andreplace service n_cst_dwsrv_find Linkage service n_cst_dwsrv_linkage Multitable update service n_cst_dwsrv_multitable Print preview service n_cst_dwsrv_printpreview DataWindow property service n_cst_dwsrv_property Querymode service n_cst_dwsrv_querymode Reporting service n_cst_dwsrv_report Required column service n_cst_dwsrv_reqcolumn DataWindow resize service n_cst_dwsrv_resize Row management service n_cst_dwsrv_rowmanager Row selection service n_cst_dwsrv_rowselection Sort service n_cst_dwsrv_sort |
8. DataWindow Services 的父類
概要
DataWindow Services的父類包括了所有DataWindow Services需要的Instance變量、事件、函數(shù)。PFC使用n_cst_dwsrv實(shí)現(xiàn)DataWindow Services的父類。
DataStore Service:DataStore Service的對(duì)象是n_cst_dssrv
用法
你可以使用這些Service實(shí)現(xiàn)如下功能
l_ 獲取、設(shè)置DataWindow信息
l_ 修改、獲取DataWindow腳本函數(shù)
l_ 默認(rèn)DataWindow service
父類函數(shù)在子類中有效
因?yàn)閚_cst_dwsrv是所有DataWindow services的父類,因此所有在n_cst_dwsrv的函數(shù)在它的子類中都有效。
開(kāi)啟Basic DataWindow service
l_ 調(diào)用u_dw的of_SetBase函數(shù)
dw_emplist.of_SetBase(TRUE)
當(dāng)Datawindow被刪除時(shí)u_dw會(huì)自動(dòng)刪除該Service 。
訪問(wèn)DataWindow
l_ 調(diào)用n_cst_dwsrv中的函數(shù)
l_ 定義類型為n_cst_conversion的變量
n_cst_conversion inv_conversion
因?yàn)閚_cst_conversion是自動(dòng)實(shí)例化,因此不需要使用Create或者Destroy語(yǔ)句。
調(diào)用轉(zhuǎn)換服務(wù)的函數(shù):
l_ 調(diào)用函數(shù)
下面的例子假設(shè)inv_conversion是實(shí)例變量:
String ls_checked
Ls_checked = inv_conversion.of_String(cbx_confirmed.Enabled)
MessageBox
7 日期/時(shí)間服務(wù)
概要
PFC的日期/時(shí)間提供了許多用于計(jì)算日期、時(shí)間的函數(shù)。例如,你可以使用of_SecondsAfter函數(shù)計(jì)算兩個(gè)時(shí)間之間的秒數(shù)。它對(duì)應(yīng)的對(duì)象是n_cst_datatime 。
對(duì)象 n_cst_datatime對(duì)象是自動(dòng)實(shí)例化,因此你無(wú)須使用Create或Destroy語(yǔ)句。
使用說(shuō)明:
你可以使用日期/時(shí)間服務(wù)進(jìn)行有關(guān)日期/時(shí)間的計(jì)算。該服務(wù)提供了以下函數(shù):
l_ 將Julian日期轉(zhuǎn)換成Gregorian日期
l_ 將秒數(shù)轉(zhuǎn)換成小時(shí)
l_ 將秒數(shù)轉(zhuǎn)換成天數(shù)
l_ 將Gregorian日期轉(zhuǎn)換成Julian日期
l_ 計(jì)算兩日期之間的年數(shù)
l_ 計(jì)算兩日期之間的月份
l_ 計(jì)算兩日期之間的周數(shù)
l_ 計(jì)算兩日期之間的秒數(shù)
l_ 計(jì)算兩日期之間的毫秒
l_ 判斷日期是否有效
l_ 判斷某日是否是平日(非周日)。原文:Determine if a date falls on a weekday
l_ 判斷某日是否是周末
l_ Halt processing until a specified date/time
你可以將n_cst_datetime定義成全局變量、實(shí)例變量、局部變量。
日期/時(shí)間函數(shù)使用說(shuō)明 變量類型
貫穿整個(gè)應(yīng)用程序 全局變量或者n_cst_appmanager的實(shí)例變量
針對(duì)一個(gè)對(duì)象 該對(duì)象的實(shí)例變量
針對(duì)一段代碼 局部變量
開(kāi)啟日期/時(shí)間服務(wù):
l_ 定義類型為n_cst_datetime的變量
n_cst_datetime inv_datetime
類型n_cst_datetime是自動(dòng)實(shí)例化的,因此無(wú)須使用 Create或Destroy語(yǔ)句調(diào)用日期/時(shí)間服務(wù)的函數(shù):
l_ 直接調(diào)用函數(shù)
下面的例子假設(shè) inv_datetime是實(shí)例變量
Long ll_seconds,ll_days
Ll_seconds = Long(sle_seconds.Text)
Ll_days = inv_datetime.of_Days(ll_seconds)
MessageBox(擠ate/Time敚琒 tring(ll_seconds)+ ?seconds is equal t
o ?+ String(ll_days) + ?days。摚?
8 文件服務(wù)
概要
PFC的文件服務(wù)使得你的應(yīng)用程序可以具備文件管理器功能。例如,你可以使用f_FileRename函數(shù)改變文件名稱。文件服務(wù)支持多種操作系統(tǒng),針對(duì)各種操作系統(tǒng)該服務(wù)會(huì)自動(dòng)的調(diào)用相應(yīng)的外部函數(shù)。它對(duì)應(yīng)的對(duì)象是n_cst_filesrv 。
使用說(shuō)明:
通過(guò)文件服務(wù)你可以使用如下操作:
l_ Assembling a concatenated filename 。
l_ 建立、刪除目錄。
l_ 讀、寫、重命名、復(fù)制文件。適用于大于32765字節(jié)的文件。
l_ 訪問(wèn)文件信息,包括日期、時(shí)間。
l_ 在一個(gè)目錄下創(chuàng)建、排序文件。
你可以將n_cst_filesrv定義成全局、實(shí)例、局部變量。
使用情況 變量類型
貫穿整個(gè)應(yīng)用程序 全局變量或者n_cst_appmanager的實(shí)例變量針對(duì)一個(gè)對(duì)象 對(duì)象的實(shí)例變量針對(duì)一段代碼 局部變量由于PFC會(huì)根據(jù)特定的平臺(tái)創(chuàng)建n_cst_filesrv的子類。因此它沒(méi)有使用PB的自動(dòng)實(shí)例化功能。你必須顯示的調(diào)用Destroy語(yǔ)句刪除該對(duì)象。
開(kāi)啟文件服務(wù):
1. 定義類型為n_cst_filesve的變量
n_cst_filesrv inv_filesrv
2. 調(diào)用全局函數(shù)f_set_filesrv:
f_SetFilesrv(inv_filesrv,TRUE)
該函數(shù)會(huì)自動(dòng)的建立對(duì)象inv_filesrv 。
3. 使用完畢后刪除對(duì)象
Destroy inv_filesrv
調(diào)用文件服務(wù)的函數(shù):
l_ 直接調(diào)用函數(shù)
該例子調(diào)用函數(shù)of_FileRead訪問(wèn)文件信息。該例子假設(shè)inv_filesrv是實(shí)例變量:
Integer li_return String ls_file[] li_return = inv_filesrv.of_FileRead(sle_filename.text, ls_file) CHOOSE CASE li_return CASE ? MessageBox("Error", "Error accessing file") CASE ELSE // File processing goes here END CHOOSE |
刪除該服務(wù):
l_ 使用DESTROY語(yǔ)句
DESTROY inv_filesrv
9 INI文件服務(wù)
概要
PFC的INI文件服務(wù)提供了許多讀、寫INI文件的函數(shù)。它對(duì)應(yīng)的對(duì)象是n_cst_ini file。
使用說(shuō)明:
你可以使用INI文件做到如下:
l_ 檢索INI文件中的所有鍵
l_ 檢索INI文件中的所有段
l_ 刪除INI文件中的所有行
l_ 刪除INI文件中一行
l_ 刪除INI文件中一段
你可以同時(shí)使用ProfileInt、ProfileString、 SetProfileString訪問(wèn)INI文件。
INI文件服務(wù)對(duì)大小寫不敏感。
開(kāi)啟INI文件服務(wù):
l_ 定義類型為n_cst_inifile的變量:
n_cst_inifile inv_ini_handler
該類型屬于自動(dòng)實(shí)例化,因此你無(wú)須調(diào)用Create與Destroy 。
使用INI文件服務(wù):
l_ 調(diào)用n_cst_inifile的對(duì)象函數(shù):
String ls_keys[] Integer li_count, li_size Li_size = inv_ini_handler.of_GetKeys(gnv_app.of_GetAppINIFile(),? CustApp s_keys) Lb_keys.Reset() For li_count = 1 to li_size Lb_keys.AddItem(ls_keys[li_count]) Next |
10 數(shù)字服務(wù)
概要
PFC的數(shù)字服務(wù)提供的函數(shù)使得你可以處理二進(jìn)制數(shù)。例如,你可以使用of_GetB it函數(shù)判斷一位是開(kāi)還是關(guān)。
使用說(shuō)明:
你可以使用數(shù)字服務(wù)中的函數(shù)做到:
l_ 判斷一位是開(kāi)還是關(guān)
l_ 將十進(jìn)制轉(zhuǎn)換成二進(jìn)制
l_ 將二進(jìn)制轉(zhuǎn)換成十進(jìn)制
與Window SDK共同使用該對(duì)象:Windows SDK中許多函數(shù)都使用位返回值。因此你需要使用函數(shù)f_GetBit。
你可以將n_cst_numerical定義成全局、實(shí)例、局部變量使用說(shuō)明 變量類型貫穿整個(gè)應(yīng)用程序 全局變量或者n_cst_appmanager的實(shí)例變量針對(duì)一個(gè)對(duì)象 對(duì)象的實(shí)例的變量針對(duì)一段腳本 局部變量開(kāi)啟數(shù)字服務(wù):
l_ 定義類型為n_cst_numerical的變量
n_cst_numerical inv_numerical
類型n_cst_numerical自動(dòng)實(shí)例化,你無(wú)須使用Create或者Destroy語(yǔ)句。
調(diào)用數(shù)字服務(wù)(numerical service)函數(shù):
l_ 直接調(diào)用函數(shù)
下面的例子假設(shè) inv_numerical是實(shí)例變量:
Long ll_base10 String ls_binary Ll_base10 = Long(sle_base10.text) Ls_binary = inv_numerical.of_Binary(ll_base10) MessageBox("Numerical", String(ll_base10) + " base 10 is equal to " + String(ll_base10) + " base 10 is equal to " + ls_binary + " in binary. ") |
11 平臺(tái)服務(wù)
概要
PFC的平臺(tái)服務(wù)提供的函數(shù)使到你的應(yīng)用程序可以使用特定平臺(tái)的函數(shù)。你可以使用該服務(wù)實(shí)現(xiàn)支持多平臺(tái)的應(yīng)用程序,而無(wú)須在你的應(yīng)用程序中加入有關(guān)平臺(tái)檢測(cè)的代碼。例如,你可以調(diào)用函數(shù) of_GetFreeMemory確定現(xiàn)在所剩的內(nèi)存大小。平臺(tái)服務(wù)此時(shí)便會(huì)依據(jù)不同的平臺(tái)調(diào)用相應(yīng)的外部函數(shù)而完成工作。該服務(wù)對(duì)應(yīng)的對(duì)象是 n_cst_platform以及不同平臺(tái)的相應(yīng)的子類。
打印與頁(yè)面設(shè)置對(duì)話框:PFC的平臺(tái)服務(wù)會(huì)根據(jù)不同的平臺(tái)作相應(yīng)的調(diào)整。
使用說(shuō)明:
平臺(tái)服務(wù)提供的函數(shù)有:
l_ 確定可用內(nèi)存空間
l_ 確定可用資源空間
l_ 確定某一字符串的高度、寬度,單位是PBUs
你可以將 n_cst_platform定義成全局變量、實(shí)例變量、局部變量使用說(shuō)明 變量說(shuō)明貫穿整個(gè)應(yīng)用程序 全局變量、n_cst_appmanager的實(shí)例變量針對(duì)一個(gè)變量 對(duì)象的實(shí)例變量針對(duì)一段代碼 局部變量平臺(tái)服務(wù)沒(méi)有使用自動(dòng)實(shí)例化功能,因此你必須顯示的刪除n_cst_platform 。
在Macintosh上:在 Macintosh上函數(shù)of_GetTextSize無(wú)法使用。
開(kāi)啟平臺(tái)服務(wù):
(1) 定義類型n_cst_platform的變量:
n_cst_platform inv_platform
(2) 調(diào)用f_SetPlatform全局函數(shù)
f_SetPlatform(inv_platform,TRUE)
函數(shù)f_SetPlatform會(huì)自動(dòng)建立該對(duì)象。
調(diào)用平臺(tái)服務(wù)函數(shù):
l_ 直接調(diào)用函數(shù)
下面的例子調(diào)用函數(shù)of_GetFreememory在狀態(tài)欄處顯示可用內(nèi)存的大小。
Long ll_free_monery ll_free_memory = inv_platform.of_GetFreeMemory() gnv_app.of_GetFrame(). SetMicroHelp(擣ree memory:?+ String(ll_ free_memory)) |
刪除服務(wù)
l 調(diào)用 Destroy 語(yǔ)句
Destroy inv_platform
未完。。。