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