3、 組合多個(gè) ReportListener 以提供多種輸出
從前面的例子上再走遠(yuǎn)一點(diǎn),讓我們來(lái)看看你可以怎樣通過(guò)組合多個(gè) ReportListener 來(lái)實(shí)現(xiàn)在同一個(gè)運(yùn)行中的報(bào)表上提供多種輸出方案。在默認(rèn)的 ReportOutput.app(以及在新的 _reportListerer.vcx FFC 基礎(chǔ)類(lèi)庫(kù)中)提供的 ReportListener 的子類(lèi)有一個(gè)屬性叫 Successor,可以用這個(gè)屬性記錄下對(duì)另一個(gè)個(gè) ReportListener 實(shí)例的引用,而個(gè)被引用的實(shí)例將被掛鉤到報(bào)表生成引擎上,因而是起著主導(dǎo)作用的“主控 Listener”。 在下面的示例中,我通過(guò)執(zhí)行 DO (_reportoutput) 兩次來(lái)建立兩個(gè) listener,每次執(zhí)行的時(shí)候都傳遞給它一個(gè)變量,以返回一個(gè)對(duì)帶有正確的輸出類(lèi)型的Listener的對(duì)象引用,輸出類(lèi)型是 (_reportoutput)程序決定的。在下面的代碼中,olistener 接收到一個(gè)對(duì)一個(gè)輸出類(lèi)型為 0 (打印輸出)的 listener 的對(duì)象引用,而 olistener2 則接收到一個(gè)輸出類(lèi)型為4的 XMLListener對(duì)象的引用。 現(xiàn)在,我們有一個(gè)全局的集合(_oReportOutput),該集合中擁有對(duì)緩存中的打印和XML兩個(gè)Listener的引用,而我們則將這兩個(gè) Listener 引用為 olistener 和 olistener2,F(xiàn)在,為了演示從 ReportOutput.app 來(lái)取得一個(gè) ReportListener 的引用的另一種辦法,我們象這樣給集合添加另一個(gè)將被放入緩存中的 HTMLListener 的實(shí)例:DO (_reportoutput) WITH 5 注意,現(xiàn)在我們可以通過(guò)集合引用的辦法來(lái)操作 HTMLListener 的屬性,象這樣: _ReportOutput("5").targetfilename = "c:\htmltest2.htm" 現(xiàn)在剩下的活是將這三個(gè) Listener 象鏈條一樣的串連起來(lái),輸出類(lèi)型為0的打印Listener放在鏈條的最前面。
這個(gè) Listener 將是我們?cè)谑褂?REPORT FROM 命令的時(shí)候放在 OBJECT 子句里面去的那個(gè),這樣一來(lái),它就變成了一個(gè)“驅(qū)動(dòng),或者主控”listener,而它會(huì)與另外兩個(gè)與它在一條鏈條上的 listener 進(jìn)行通訊。將它們鏈接起來(lái)的代碼是: olistener.successor = olistener2
olistener2.successor = _oReportOutput("5") 就是這樣,F(xiàn)在,運(yùn)行這個(gè)報(bào)表,從同一次運(yùn)行你就會(huì)獲得三種類(lèi)型的輸出——在默認(rèn)打印機(jī)上的一個(gè)報(bào)表、一個(gè)只帶著數(shù)據(jù)的 XML 文件、以及一個(gè)顯示著報(bào)表的 HTML 頁(yè)面。 LOCAL olistener, olistener2 * 獲得一個(gè)對(duì)打印類(lèi)的引用
DO (_reportoutput) WITH 0, olistener * 獲得一個(gè)對(duì) XMLListener 類(lèi)的引用
DO (_reportoutput) WITH 4, olistener2 * 關(guān)閉用戶(hù)界面的返回和提示
olistener2.quietmode=.T. * 只包含數(shù)據(jù),不帶布局信息
olistener2.xmlmode=0 * 指定文件名和路徑,并關(guān)閉文件名提示
olistener2.targetfilename = "c:\xmltest2.xml"
olistener2.quietmode=.T. * 現(xiàn)在為 HTML 輸出做準(zhǔn)備,但使用另一種辦法來(lái)從全局的
* _oreportoutput 集合中獲得一個(gè)對(duì)listener 的引用
DO (_reportoutput) WITH 5 * 通過(guò)集合引用來(lái)設(shè)置 HTMLListener 的屬性
_oReportOutput("5").targetfilename = "c:\htmltest2.htm"
_oReportOutput("5").quietmode=.T. * 把三個(gè) listeners 象鏈條一樣的鏈接在一起
* 其中,用打印 listener 作為驅(qū)動(dòng)
olistener.successor = olistener2
olistener2.successor = _oReportOutput("5") * 運(yùn)行一個(gè)雇員電話(huà)號(hào)碼列表,引用在列表中的第一個(gè) listener
REPORT FORM (_samples+"solution\reports\ledger.frx") ;
OBJECT olistener * 在瀏覽器中顯示 XML 和 HTML 結(jié)果
* 并在打印機(jī)上打印報(bào)表
RUN /n Explorer.exe c:\xmltest2.xml
RUN /n Explorer.exe c:\htmltest2.htm
VFP9.0 中文漢化版下載:http://m.elephantinaurance.com/k/vfp/
本文導(dǎo)航
- 第1頁(yè): 首頁(yè)
- 第2頁(yè): 文本框自動(dòng)完成
- 第3頁(yè): 使用新的報(bào)表引擎來(lái)建立 HTML 或者 XML
- 第4頁(yè): 組合多個(gè) ReportListener 以提供多種輸出
- 第5頁(yè): 將報(bào)表保存為圖形文件
- 第6頁(yè): 使用新的超小型二進(jìn)制索引
- 第7頁(yè): 用新的ICASE()函數(shù)一行搞定
- 第8頁(yè): 停靠你的表單
- 第9頁(yè): 使用新的數(shù)據(jù)瀏覽面板
- 第10頁(yè): 為了能使用戶(hù)更好的對(duì)數(shù)據(jù)類(lèi)型進(jìn)行控制
- 第11頁(yè): 超級(jí)SYS
- 第12頁(yè): 控件的Anchor屬性
- 第13頁(yè): 自定義Memo編輯窗口
- 第14頁(yè): 畫(huà)多邊形