ORACLE核心應用技術報表解決方案_第1頁
ORACLE核心應用技術報表解決方案_第2頁
ORACLE核心應用技術報表解決方案_第3頁
ORACLE核心應用技術報表解決方案_第4頁
ORACLE核心應用技術報表解決方案_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、信息技術最佳實踐ORACLE核心應用技術報表解決方案XML Publisher技巧集錦Author:黃建華Creation Date:October 16, 2006Last Updated:五月 11, 2014Document Ref:<Document Reference Number> Version:DRAFT 1AApprovals:<Approver 1><Approver 2> Copy Number_Document ControlChange Record4DateAuthorVersionChange Reference16-Oct-0

2、6Jianhua.HuangDraft 1aNo Previous DocumentReviewersNamePositionDistributionCopy No.NameLocation1Library MasterProject Library2Project Manager34Note To Holders:If you receive an electronic copy of this document and print it out, please write your name on the equivalent of the cover page, for document

3、 control purposes.If you receive a hard copy of this document, please write your name on the front cover, for document control purposes.ContentsDocument Controlii1.BI Publisher基礎21.1.讀者基礎要求21.2.文檔貢獻者21.3.About XMLP21.4.必要配置41.5.最簡單的例子.輸出XML數據源51.6.最簡單的例子.設計RTF模版81.7.最簡單的例子.注冊數據源和模版141.8.最簡單的例子.運行報表1

4、52.RTF模版開發(fā)172.1.本章概述172.2.布局格式化172.3.字段計算技巧192.4.任何Page相關問題202.5.使用多媒體元素212.6.其它常用語法232.7.高級布局253.其它數據源和模版開發(fā)(可選)283.1.Data Template283.2.PDF模版283.3.eText模版283.4.FO模版284.集成和API294.1.如何提交XMLP請求294.2.如何自己控制模版和格式294.3.Report報表遷移304.4.即時預覽304.5.即時打印304.6.即時分發(fā)305.相關專題討論315.1.服務器端版本315.2.Viewer設置325.3.字體與亂

5、碼335.4.Output Post Processor365.5.字符集與亂碼385.6.國際化支持395.7.Instance間遷移405.8.問題記錄406.Open and Closed Issues for this Deliverable42Open Issues42Closed Issues421. BI Publisher基礎1.1. 讀者基礎要求1、 熟悉EBS并發(fā)程序開發(fā)2、 熟悉Microsoft Word3、 了解并發(fā)管理器的定義和作用4、 理解簡單的XML文件5、 有XSL-FO開發(fā)經驗者更佳6、 有Java開發(fā)經驗者更佳1.2. 文檔貢獻者截止目前為止,本文檔在編寫

6、過程中得到張禮軍、劉平的鼎力支持,這里深表感謝!1.3. About XMLPXMLP在EBS中的地位XMLP是EBS的11.510之后主要的報表解決方案。每種技術都有自己的特點和應用方向,仔細閱讀下表,我們可以體會何種場景該使用XMLP。EBS中的技術特點企業(yè)應用Oracle DB關系型數據庫,其實是最佳的設計模式和開發(fā)框架所有MIS系統的基礎,最可靠的數據持久存儲PL/SQL標準SQL+編程語言,Oracle所有開發(fā)工具的基石用于業(yè)務邏輯實現;系統質量的優(yōu)劣、性能的高低,很大程度上取決于PL/SQLReports過去流行的可視化報表設計環(huán)境,開發(fā)效率高數據檢索+報表展現,尤其是單據打印Di

7、scovererBI展現工具,基于主題視圖,分析企業(yè)數據因為布局工作量小,被廣泛應用于普通報表開發(fā)ADI/Web ADI從日記賬和FA起家,逐步發(fā)展為EBS最強的桌面工具數據檢索+Excel展現、數據批量錄入和修改XML Publisher基于XML工業(yè)標準,數據抽取與展現分離,布局設計平易近人又高度靈活豐富,與Java親密集成數據檢索+報表展現,除了單據打印,還可發(fā)布至合作伙伴Concurrent基于時間的任務并發(fā)、排隊,合理利用系統資源立即、定時或周期執(zhí)行程序、報表、維護和監(jiān)控FlexfieldEBS最富特色的自定義字段,智能組合、智能驗證會計科目、物料分類,業(yè)務特有信息的記錄和傳遞For

8、ms最快捷的數據庫應用系統開發(fā)環(huán)境,UI不夠友好Windows版的數據錄入+數據處理+數據檢索JSP/JTF/OAF效率比較高的基于瀏覽器的應用開發(fā)框架純Web版的數據錄入+數據處理+數據檢索Workflow靈活的流程定義/自動化、通知發(fā)送、系統間集成流程式審批、流程式數據傳遞、事件式系統集成Alert基于觸發(fā)器和定時器的數據監(jiān)控、預警通知企業(yè)核心數據監(jiān)控、系統運行異常監(jiān)控Interface/API各模塊開發(fā)人員留出的,除了UI外的數據“出入口”客戶化業(yè)務、外圍系統與核心ERP的集成Web Service基于Internet的計算和服務,可用于數據交換跑在Internet上的Interface

9、/API1.3.1. 官方資料XML Publisher簡稱XMLP,現在叫BI Publisher,有獨立版和EBS嵌入版。以下站點是BI Publisher的官方技術中心:以下站點是EBS的官方文檔中心,其中包含XML Publisher的最新User Guide:BI Publisher可以使用 大多數用戶熟悉的工具Microsoft Word 或 Adobe Acrobat,來設計報表格式。不需要專用的設計Studio,這意味著不需要額外的成本。這樣,業(yè)務顧問或者用戶僅需要簡單的培訓,就可以直接完成報表的設計。1.3.2. 解決了其它報表工具的雞肋1、 PL/SQL:布局過于簡單;不便

10、于Java集成,不便于對外發(fā)布。2、 Discoverer:布局過于簡單、性能較差;不便于Java集成,不便于對外發(fā)布。3、 Reports:輸出Excel不方便、標題和內容漂移、PASTA配置麻煩;不便于Java集成,不便于對外發(fā)布。1.3.3. 完全分離數據 / 布局 / UI國際化數據獲取、布局設計、界面翻譯三大工作全部分離,可由不同的人甚至第三方分工協作。報表輸出數據邏輯報表布局翻譯轉化XML Publisher1.3.4. 數據不限來源、最終格式豐富、傳送不限目的地BI Publisher 可以接受并格式化任何格式規(guī)范的 XML 數據,它可以與能夠生成 XML 的任何數據庫、應用程序

11、或過程集成,無論是要格式化輸出并發(fā)送給使用者的數據庫、ERP 應用程序還是 Web 服務。BI Publisher 還允許您將來自多個數據源的數據置入單個輸出文檔??梢酝ㄟ^打印機、電子郵件、傳真和 WebDav 傳送您的內容,或者將報表發(fā)布到門戶。Delivery Manager 的開放式體系結構還允許您輕松地實現自定義傳送通道。Web Services模 板XMLEDIEFTEmailPrinterFaxWebDAVe-Commerce輸出目標Oracle, SQL ServerPeopleSoft, SAP, SiebelJava, C+, Pearl, etcXML Publisher數

12、據源 Word Excel AcrobatXSL布局設計工具PDFRTFHTMLExcel XML Spy JDeveloper Scriptura1.3.5. 卓越的性能BI Publisher 基于 W3C XSL-FO 標準,它是當今世界上最快、伸縮性最強的實現。它可以在較短的時間內處理大量的數據輸入并生成輸出,而只需占用很少的 CPU 時間和內存。1.3.6. 開放的標準,易于集成BI Publisher 是基于開放標準技術構建的。它是一個 J2EE 應用程序,可以部署到任何 J2EE 容器。數據將處理為 XML,在桌面應用程序中創(chuàng)建的布局模板將在內部轉換為 XSL-FO(另一個 W3

13、C 標準)。該應用程序生成的輸出也符合業(yè)界標準,如 PDF、RTF 和 HTML。傳送協議是 Internet 打印協議 (IPP)、WebDAV、FTP 和 AS2。1.4. 必要配置1.4.1. 服務器端Patch最好升級到最新版本,至少也要到5.5,之前的版本可以說是Oracle的“小白鼠”。目前最新版為Oracle XML Publisher Core Rollup Patch 5.6.2 (Patch 5097966),Notes367394.1,有比較詳細的描述。SELECT * FROM fnd_product_installations WHERE patch_level LI

14、KE %XDO%1.4.2. 服務器端配置除非有特別需要,如設置臨時文件夾、字體映射、PDF報表文件密碼控制等,否則不需要做什么配置。新版配置:XML Publisher Administrator/Home/Administration。舊版配置:$XDO_TOP/resource/xdo.cfg或者$AF_JRE_TOP/jre/lib/xdo.cfg。該文件默認不存在,需要手工創(chuàng)建。文件格式要按照Oracle XML Publisher Users Guide的要求來寫。如果PC機安裝了XML Publisher Desktop,其實里面有個xdo example.cfg文件,可以稍微修

15、改即可使用。1.4.3. 開發(fā)設計工具XML Publisher Desktop目前最新版本是5.6.2;需要先裝好JDK1.4以上版本。下載下來后直接安裝,這樣會在Word中嵌入XMLP的菜單,可以用來自動生成布局、預覽等。1.5. 最簡單的例子.輸出XML數據源1.5.1. 關于數據源XMLP要求的數據,必須是XML格式的,這可以通過多種方式生成,最常見的有兩種。1、 Oracle Reports:僅創(chuàng)建Data Module、分組、求和,不用設計布局;其中求和也可以在模版中完成。2、 PL/SQL or SQL:直接輸出XML格式的內容。如果使用XMLP的Java API來生成報表,實際

16、上可以從任何途徑獲得XML格式的文件,包括本地文件、用URL指定的網絡文件、其他Java函數返回的參數等等。1.5.2. 開發(fā)數據源這里采用Oracle Reports,為簡單起見,參數寫死,SQL如下:SELECT poh.segment1 po_num, por.release_num release, pv.vendor_name, pvs.address_line1, pvs.address_line2, pvs.address_line3, pol.line_num | . | pll.shipment_num line_num, mst.segment1 item_num, mst

17、.description, pll.quantity, pll.unit_meas_lookup_code uom, pll.price_override unit_price, poh.currency_code, nvl(pll.need_by_date, mised_date) need_by_date FROM po_headers_all poh, po_vendors pv, po_vendor_sites_all pvs, po_lines_all pol, po_line_locations_all pll, po_releases_all por, mtl_sy

18、stem_items_vl mst WHERE poh.vendor_id = pv.vendor_id(+) AND poh.vendor_site_id = pvs.vendor_site_id(+) AND poh.po_header_id = pol.po_header_id AND pol.po_line_id = pll.line_location_id AND pll.po_release_id = por.po_release_id(+) AND pol.item_id = mst.inventory_item_id AND pll.ship_to_organization_i

19、d = anization_id AND _id = 102 AND poh.creation_date >= sysdate - 60在Oracle Reports中創(chuàng)建數據模型并分組如下:對組名稱可以改得友好些,比如這里的G_PO_HEADER和G_PO_LINE,這樣生成的XML文件可讀性更佳。代碼參考:CUXXMLPDEMO.rdf。1.5.3. 注冊并發(fā)程序,輸出格式為XML1、 上傳CUXXMLPDEMO.rdf至服務器$SCF_TOP/reports/US2、 注冊可執(zhí)行:3、 注冊并發(fā)程序,注意輸出格式:4、 分配給相應的請求組。1.5.4.

20、試運行,獲得樣例數據將報表上傳服務起后,請求運行結果如下(只展開了一張PO):可以看到,Oracle Reports可以自動輸出XML,Tag主要來自文件名、分組名、字段名。具體文件可參考:CUXXMLPDEMO.xml。1.6. 最簡單的例子.設計RTF模版1.6.1. 關于布局設計實際上和任何報表工具一樣,布局設計時,先需要“想象”層次結構,如哪些內容位于頁眉頁腳,哪些內容是報表頭,哪些內容是明細行,各部分是如何依次嵌套的,哪些地方需要合計等等。同時考慮一些特殊需求:如何進行頁碼編號、是否動態(tài)列、每頁顯示的行數是否固定、新單據是否從新頁開始、行高和列寬是否固定、表頭是否在新頁重復等等。這些

21、也是做布局設計的重點和難點,而且不同版本的XMLP支持的特性也不一樣,總的來說5.6.2之后,應該我們常用的需求都能被滿足。布局設計最常用的工具是Word,也可以是Adobe Acrobat,也可以直接編寫XSL-FO模版。實際上,當上傳RTF文件到XMLP模版管理器時,將被自動轉換為XSL-FO。1.6.2. 了解窗體域,這可是我們經常寫XMLP代碼的地方用Word進行RTF模版設計時,XMLP主要是利用“窗體域”來保存分組、格式、賦值等控制信息,其類似報表中的占位符,運行時將被實際的數據替換。先從菜單“視圖/工具欄/窗體”調出窗體工具欄。然后就可以將“窗體域”插到Word文檔中,最后通過右

22、鍵“窗體域”調出屬性,默認文字中輸入比較直觀的描述,在“添加幫助文字”的“自己鍵入”部分輸入相應的XMLP命令,格式都是<?各種命令?>。比如下面的命令是個占位符,意思是運行時,用數據文件中標記為“ITEM_CODE”的值替換:1.6.3. 導入樣例數據打開Word,通過Template Builder/數據/裝入XML數據:選擇上一步請求輸出的XML文件,這樣我們可以用向導加快模版設計,同時也方便預覽。1.6.4. 布局向導布局設計比較靈活,可以先搭好分組框架,也可先設計數據;可以通過向導創(chuàng)建,也可以手工設計。這里先介紹向導,這樣可以減少手工添加“窗體域”的工作量。1、 啟動向導

23、,菜單Template Builder/插入/表/表單/向導2、 選擇布局風格,我們先要做采購訂單單據頭,所以選擇“表單”3、 選擇分組依據,我們這里選擇G_PO_HEADER4、 選擇需要的字段,假定我們需要如下5個字段5、 設置排序字段,我們需要按照PO號和發(fā)放號同時排序6、 調整字段描述7、 完成后自動生成布局如下(可雙擊打開)其中的F和E是分組起始、終止標志,我們總結如下:字段默認文字XMLP語句組開始F<?for-each:G_PO_HEADER?><?sort:PO_NUM;ascending;data-type=text?><?sort:RELEAS

24、E;ascending;data-type=text?>訂單號PO_NUM<?PO_NUM?>發(fā)放號RELEASE<?RELEASE?>供應商VENDOR_NAME<?VENDOR_NAME?>地址ADDRESS_LINE1<?ADDRESS_LINE1?>貨幣單位CURRENCY_CODE<?CURRENCY_CODE?>組結束E<?end for-each?>這里要掌握分組語法和值飲用語法。Tips:到這里就可以預覽報表了。1.6.5. 調整布局向導生成了基本框架,尤其是需要寫代碼的“窗體域”,接下來我們根據實際

25、需求調整下布局,同時最好也改下“默認文字”,尤其是分組的。最終結果如下(可雙擊打開):1.6.6. 驗證布局菜單Template Builder/工具/驗證,可以驗證語法錯誤和不支持的特性!1.6.7. 完善報表和上邊的步驟類似,首先運行向導添加訂單行,這次布局風格選擇“表”,分組選擇PO_Line,結果如下,排序選擇Line_Number:其中的F和E是分組起始、終止標志,注意這次它們所處的位置,這樣可以做到根據數量自動擴張行。同樣我們需要做下調整,比如:這個例子還缺少很多元素,僅供練習,源文件為CUXXMLPDEMO.rtf。1.6.8. 預覽報表通過菜單Template Builder/

26、預覽,可以選擇PDF、Excel、HTML、RTF等多種格式,我們選擇Excel的輸出結果如下:完整的輸出文件請看CUXXMLPDEMO.xls。1.7. 最簡單的例子.注冊數據源和模版1.7.1. 注冊數據源N: XML Publisher Administrator/Home/Data Definitions/Create Data Definition定義數據源,需要注意,數據源代碼需要和并發(fā)請求的代碼一致,也可以上傳預覽數據:1.7.2. 注冊模版,并和數據源關聯N: XML Publisher Administrator/Home/Templates/Create Template定

27、義并上傳模版,需要注意選對類型和上一步注冊的數據源:可以為每種語言上傳一個模版。不過這里有點缺陷,就是一個模版只能用于一個數據源。如果我編寫了多個數據源,想用同一個模版來顯示,就只能重復定義和上傳模版了。1.8. 最簡單的例子.運行報表1.8.1. 提交請求操作和提交普通的請求類似,唯一注意的是多了個Layout選項,默認會選中同語言的模版:在11.5.10 CU1或Patch3435480之前,需要分兩步完成,第一步運行請求,第二步運行XML Report Publisher來生成輸出:1.8.2. 查看輸出運行結果和我們在XMLP Desktop中預覽的基本一樣,下面是個PDF的結果:2.

28、 RTF模版開發(fā)2.1. 本章概述2.1.1. 關注內容相信隨著XMLP版本的不斷升級,其Desktop端的可視化功能將大大簡化我們的設計工作,不過目前還有些地方不通過手工編寫命令是無法完成的;此外,雖然模版開發(fā)是依托Word的功能完成,但有些“鮮為人知”的Word功能需要額外提示下。所以本章收錄的是常見問題的處理辦法,并未包括完整的User Guide功能,當然也不包括Word的使用幫助。2.1.2. XMLP和XSL-FO可以采取兩種方式編寫布局語言,一是XSL語句,二是XMLP簡易語句,個人建議使用前者,因為其是國際通行標準。另外,這兩種語法可以混合使用,比如上面的條件格式化行和單元格。

29、在RTF中直接寫的只能是XMLP簡易語句;在窗體域中則上述兩者皆可。標準的頁眉頁腳中不允許使用窗體域;但擴展的頁眉頁腳中可以使用。XMLP提供的語法,都是一種簡化的“代號”,實際都要翻譯成XSL,如果你精通XSL-FO,那么也可以在窗體域中直接用該語法,自由而靈活!如下SQL可以查到轉換后的XSL-FO:SELECT t2.application_short_name, t2.template_code, t1.LANGUAGE, t1.template_name, t3.file_name, t3.xdo_file_type, t3.file_data FROM xdo.xdo_templa

30、tes_tl t1, xdo.xdo_templates_b t2, xdo.xdo_lobs t3 WHERE t1.template_code = t2.template_code AND t2.template_code = t3.lob_code AND t1.LANGUAGE = US AND t1.template_code = CUXXMLPDEMOTips:C:Program FilesOracleXML Publisher DesktopsamplesRTF templates有非常好的例子可供參考。2.2. 布局格式化2.2.1. 建議做法充分利用Word的格式化功能:紙張

31、自定義、顏色、字號、字體、標題樣式、背景、水印、對齊、表格、分欄、模版日期、窗體域的數字/日期格式、文件圖片、頁眉頁腳、自動圖文集。雖然可以代碼控制,但既然依托Word作為可視化設計工具,我們就盡量使用Word功能來設計報表吧!2.2.2. Word表格和做網頁一樣,表格在報表布局中的地位至關重要,要熟練掌握,尤其是:1、 標題行重復,可以實現新頁重復標題。2、 嵌套表格、行列合并、邊框、底紋,可以實現特殊的布局。3、 固定列寬、自動調整、禁止跨頁斷行,可以實現一些嚴格的布局控制。2.2.3. 行截斷與禁止折行單據打印中對格式的要求比較高,如果某一行過長或者出現多次折行,就會破壞版面,尤其是套

32、打等要求較高的場合,這里把各種方法作個小結。1、 Word功能,不理想固定列寬功能可以用,但固定行高不行,雖然設計時看到“固定”了,如果不加控制,運行后多出列寬的數據會自動折行。2、 單行+截斷,即控制只有以行,多余截斷,禁止折行在字段后,再加兩個命令:<xsl:attribute xdofo:ctx="block" name="wrap-option">no-wrap</xsl:attribute><xsl:attribute xdofo:ctx="block" name="overflow&

33、quot;>hidden</xsl:attribute>3、 多行+截斷,難如固定顯示3行,多余部分截斷,目前通過模版無法實現,只有在數據源中先將數據截至剛好3行的字符數,然后利用自動折行功能。這里還要注意空格,如果遇到空格,后面的單詞又顯示不下,將會提前自動折行。2.2.4. 條件格式化在不同的條件下顯示不同的顏色、不同的列數、不同的標題、不同的布局風格等等,這些都屬于條件格式化,需要借助IF命令。1、 比如不同幣種憑證打印格式不同<?if:CURRENCY_CODE="CNY"?>任何布局<?end if?><?if:CU

34、RRENCY_CODE!="CNY"?>任何布局<?end if?>2、 比如貨幣為CNY時才顯示列,在目標列的單元格內寫如下語句<?ifcolumn:CURRENCY_CODE="CNY"?>字段值和格式<?end if?>注:這還不是真正的動態(tài)列。3、 比如偶數行底色為灰色,在行的任何單元格內寫如下語句<?ifrow:position() mod 2=0?><xsl:attribute xdofo:ctx="incontext" name="background

35、-color">gray</xsl:attribute><?end if?>4、 比如超過100單元格呈紅色,在目標單元格內寫如下語句<?if:QUANTITY>100?><xsl:attribute xdofo:ctx="block" name="background-color">red</xsl:attribute><?end if?>2.3. 字段計算技巧2.3.1. 建議做法1、 計算字段可以在SQL中先完成。2、 如果使用Oracle Reports

36、做數據源,那么計算字段、統計字段也可以先完成。3、 在SQL中的數據,都不帶格式,格式在模版中設置;需要在模版中完成計算的字段,必須不帶格式,主要指數字不能帶千位符號。2.3.2. 組內合計N: Template Builder/插入/字段向導可以完成基本的統計,目前支持分組內的:Sum、Count、Min、Max、Avarage。自動生成的代碼示例:<?sum (QUANTITY)?>。2.3.3. 頁內合計要實現本頁合計數,需分兩步:聲明合計變量、顯示合計變量(可帶格式)。1、 對QUANTITY進行本頁合計,聲明變量QTYTOTAL,注意寫在QUANTITY對應的組內,不然引

37、用不到<?add-page-total:QTYTOTAL;QUANTITY?>2、 可在任意地方顯示合計數<?show-page-total:QTYTOTAL?>那么如何實現組內+頁內合計呢?2.3.4. 結轉合計把上頁的合計數顯示到下頁,與“頁內合計”類似,需分兩步:聲明合計變量、顯示合計變量。用得少,可參考User Guide“Brought Forward/Carried Forward Totals”部分。2.3.5. 累計數Running Totals累計每行數字,實際上是這樣完成的:先聲明一個變量,初始化為0;累加;在需要的地方顯示累計。1、 在分組標記前初

38、始化,Set變量<?xdoxslt:set_variable($_XDOCTX,RTotalVar, 0)?>2、 計算累計值,通常寫在欲累計的字段同一單元格內,比如下面的QUANTITY<?xdoxslt:set_variable($_XDOCTX, RTotalVar, xdoxslt:get_variable($_XDOCTX,RTotalVar) + QUANTITY)?>3、 任意地方顯示累計值,Get變量<?xdoxslt:get_variable($_XDOCTX,RTotalVar)?>2.4. 任何Page相關問題2.4.1. 新組分頁分頁

39、是自然的,但如果想在某處強制分頁如新組新頁,那么可以使用Word的分頁符(CTRL+ENTER快捷鍵),但會導致最后出現空白頁;這樣只能使用如下幾種方式:1、 分組聲明中加section,如<?for-eachsection:G_PO_HEADER?>。2、 <?end for-each?>前加<?split-by-page-break:?>。這個翻譯后,實際上是:<xsl:if test="position()<last()"><xsl:attribute name="break-before"

40、;>page</xsl:attribute></xsl:if>3、 <?end for-each?>前加<xsl:attribute name="break-after">page</xsl:attribute>,此法下RTF最后無空白頁,但PDF有空白頁。4、 <?end for-each?>前加<xsl:attribute name="break-before">page</xsl:attribute>此法下RTF、PDF最后都有空白頁。2.4.2.

41、 條件分頁、固定行分頁1、 任意條件分頁,需要借助IF + 上面的break-after或者break-before,如:<?if:CURRENCY_CODE="CNY"?><xsl:attribute name="break-before">page</xsl:attribute><?end if?>2、 固定行分頁,需要借助IF + 上面的break-after或者break-before,在行<?end for-each?>前,如下語句控制每頁5行:<?if:position() m

42、od 5 =0?><xsl:attribute name="break-before">page</xsl:attribute><?end if?>2.4.3. 頁眉頁腳1、 標準的頁眉頁腳,即單個頁眉頁腳,使用Word的功能即可。2、 擴展的頁眉頁腳,可使用<?start:body?><?end body?>把主體部分“框”起來,凡是在這兩個標記之外的東西,都將被當作頁眉頁腳。2.4.4. 頁碼和頁數1、 可以用Word的“自動圖文集”,在任意地方插入頁碼,這個是“自然頁碼”。2、 如果在某種情況下想讓頁碼

43、從特定值開始,比如新的組頁碼重新編號,則需要借助命令,如在for-each后寫:<?initial-page-number:1?>。這里的“1”,實際上也可以用數據文件中的XML元素來替換。2.4.5. 末頁、奇偶頁不同1、 Word可在頁眉頁腳部分實現首頁不同或奇偶頁不同,沒法實現末頁不同,即使借助代碼控制,實際實現的也是末頁布局不同,而非“頁眉頁腳”不同。<?startlast-page:body?><?end body?>報表本身僅有一頁時,則用<?startlast-page-first:body?><?end body?>例

44、子“AdvancedLast Page”,注意布局需要獨立成頁,即之前需要加分頁符。2、 以偶數頁結束,主要目的是顯示偶數頁頁眉頁腳<?section:force-page-count;end-on-even-layout?>如果僅顯示空白頁,則用<?section:force-page-count;end-on-even?>3、 以奇數頁結束,主要目的是顯示奇數頁頁眉頁腳<?section:force-page-count;end-on-odd-layout?>如果僅顯示空白頁,則用<?section:force-page-count;end-on-

45、odd?>2.5. 使用多媒體元素2.5.1. Word功能可以使用公式、繪圖(如組織結構圖、線條等)、藝術字、剪貼畫。如果想通過代碼在有限范圍內控制這些對象,比如顯示文字、縮放、旋轉、移動、復制,可參考User Guide中的“Drawing, Shape and Clip Art Support”。2.5.2. 復選框插入復選框窗體域,因其選中代表True,不選代表False,需要我們輸入條件表達式,如:。不過運行后表現為菱形。2.5.3. 下拉框插入下拉框窗體域,定義下拉框的元素,并同樣在“自己鍵入”內輸入需要引用的XML標記如<%AREA_INDEX%>。這里要注意元

46、素的順序,因為是用順序號和運行時的值進行匹配的,也就是XML數據中,AREA_INDEX是自然數1、2。2.5.4. 超鏈接可以直接利用Word功能設置超鏈接,也可以在鏈接地址中,全部或部分引用XML數據文件中的標記,做到動態(tài)超鏈接:SUPPLIER_SITE_URL或者:8000/OA_MEDIA/CURRENCY_CODE.gif2.5.5. 圖片可以直接利用Word功能插入圖片,也可以僅將該圖片當作占位圖,在圖片的“設置圖片格式”的網站標簽頁內的“可選文字”,輸入真正的圖片地址:1、 來自網站的圖片:url:http:/localhost:8000/OA_MEDIA/forms_logo

47、.gif。2、 來自EBS的圖片:url:$OA_MEDIA/forms_logo.gif。3、 動態(tài)指定地址:url:IMAGE_URL。4、 動態(tài)拼接的地址:url:concat(SERVER,/,IMAGE_DIR,/,IMAGE_FILE)。5、 直接來自內容為BLOB的XML元素,僅用于“Data Templates”:<fo:instream-foreign-object content-type="image/jpg"><xsl:value-of select="IMAGE_ELEMENT"/></fo:ins

48、tram-foreign-object>2.5.6. 圖表可使用Template Builder向導插入圖表,類型有:條形圖-垂直、條形圖-水平、餅圖、線形圖。向導生成的代碼,可在圖片的“設置圖片格式”網站標簽頁內的“可選文字”里看到,我們可以做進一步修改。2.6. 其它常用語法2.6.1. 字段引用在前面的窗體域中,我們直接引用XML文件中的Tag標記,如<?QUANTITY?>。這種對XML元素的引用,是相對當前層次的組來說;如果上層組中,有個同名Tag,就要通過類似“相對路徑”的方式引用,如<?./QUANTITY?>。這里的“./”個數,不是布局中的相對層

49、測個數,而是XML數據文件中的相對層次!轉換為XSL-FO后,真正的語法分別是:<xsl:value-of select="./QUANTITY" xdofo:field-name="QUANTITY" /> <xsl:value-of select="././QUANTITY" xdofo:field-name="././QUANTITY" /> 2.6.2. 函數引用1、 行號,準確講是分組中記錄順序號:<xsl:value-of select="position()&q

50、uot;/>2、 總行號:<xsl:value-of select="last()"/>更多函數請參考XSL手冊。2.6.3. 分組、排序、重新分組1、 可以通過向導完成分組、排序:<?for-each:XML元素?><?sort:XML元素;ascending;data-type=text?><?sort:XML元素;ascending;data-type=text?><?end for-each?>2、 數據重新分組,不再限制于原始XML數據文件的層次關系數據為“Sales Report”,重新按年、月分

51、組,理解如下實例,需要一點“想象力”:GYEAR-GMONTH SalesCategorySales (in thousand USD)FINDUSTRY999 EEE2.6.4. 變量、參數1、 模版變量和普通的編程語言類似,模版中也可以使用變量,參考“累計數”部分。2、 模版參數,只能通過API調用傳入,不能用于EBS并發(fā)請求聲明參數:<xsl:param name="P_NAME" xdofo:ctx="begin"/>用$引用參數:<?if:AMOUNT>$P_NAME?>傳入參數:參考API部分。2.6.5. 空值

52、判斷1、 有標記,值不空<?if:Element_Name!=""?>Somethine Here<?end if?>2、 有標記,值空<?if:Element_Name and Element_Name=""?>Somethine Here<?end if?>3、 無標記<?if:not(Element_Name)?>Somethine Here<?end if?>2.6.6. 數字和日期格式可以使用Word窗體域中的格式化功能,也可以在窗體域中輸入XMLP的格式化命令,這兩者不能

53、同時使用,建議使用前者;后者語法參考User Guide“Number and Date Formatting”。2.6.7. 理解上下文上下文代表XMLP語句的作用域,比如一個If語句,到底是針對一個單元格、一行、還是一列。在前面的介紹中,我們已經用過section、column、row,下面列出XMLP的所有上下文及其含義:上下文含義等價XSL-FOsection類似Word中節(jié)的概念,不同Section的頁碼將重新編號、頁眉頁腳也重新開始,通常用于for-eachsection,使新組分頁column作用于表格中的整列,通常用來格式化列、動態(tài)顯示列、交叉報表列cell僅作用于表格中的一個

54、單元格,通常與column配合使用,實現交叉報表block作用于表格中的一個單元格或者RTF中的一個自然段fo:blocksinlineThe context will become the single statement inside an block. This context is used for variables.fo:inlineincontextThe statement is inserted immediately after the surrounding statement. This is thedefault for <?sort?> statemen

55、ts that need to follow the surrounding for-each asthe first element.inblockThe statement becomes a single statement inside an fo:block (RTF paragraph). This istypically not useful for control statements (such as if and for-each) but is usefulfor statements that generate text, such as call-template.i

56、nlinesThe statement will affect multiple complete inline sections. An inline section is text that uses the same formatting, such as a group of words rendered as bold.See If Statements in Boilerplate Text, page 2-58.beginThe statement will be placed at the beginning of the XSL stylesheet. This is required for global variables. See Defining Parameters, page 2-81.endThe statement will be placed at the end of the XSL stylesheet.2.7. 高級布局2.7.1. 動態(tài)列動態(tài)列的含義是:設計時不知道有多

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論