OracleXMLPublisher技巧實戰(zhàn)_第1頁
OracleXMLPublisher技巧實戰(zhàn)_第2頁
OracleXMLPublisher技巧實戰(zhàn)_第3頁
OracleXMLPublisher技巧實戰(zhàn)_第4頁
OracleXMLPublisher技巧實戰(zhàn)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Doc Ref: <Document Reference Number> 信息技術(shù)最佳實踐九月 3, 2010信息技術(shù)最佳實踐ORACLE核心應(yīng)用技術(shù)報表解決方案XML Publisher技巧實戰(zhàn)Author:黃建華Creation Date:October 16, 2006Last Updated:九月 3, 2010Document Ref:<Document Reference Number> Version:DRAFT 1AApprovals:<Approver 1><Approver 2> Copy Number_Document Co

2、ntrolChange Record4DateAuthorVersionChange Reference16-Oct-06Jianhua.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

3、 your name on the equivalent of the cover page, for document 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基礎(chǔ)21.1.讀者基礎(chǔ)要求21.2.文檔貢獻者21.3.About XMLP21.4.必要配置41.5.最簡單的例子.輸出XML

4、數(shù)據(jù)源51.6.最簡單的例子.設(shè)計RTF模版81.7.最簡單的例子.注冊數(shù)據(jù)源和模版141.8.最簡單的例子.運行報表152.RTF模版開發(fā)172.1.本章概述172.2.布局格式化172.3.字段計算技巧192.4.任何Page相關(guān)問題202.5.使用多媒體元素212.6.其它常用語法232.7.高級布局253.其它數(shù)據(jù)源和模版開發(fā)(可選)283.1.Data Template283.2.PDF模版283.3.eText模版283.4.FO模版284.集成和API294.1.如何提交XMLP請求294.2.如何自己控制模版和格式294.3.Report報表遷移304.4.即時預(yù)覽304.5.

5、即時打印304.6.即時分發(fā)305.相關(guān)專題討論315.1.服務(wù)器端版本315.2.Viewer設(shè)置325.3.字體與亂碼335.4.Output Post Processor365.5.字符集與亂碼385.6.國際化支持395.7.Instance間遷移405.8.問題記錄406.Open and Closed Issues for this Deliverable42Open Issues42Closed Issues42Open and Closed Issues for this Deliverable 43XML Publisher技巧File Ref: 2e7b17915fe389

6、04292df43286b6a872.pdf (v. DRAFT 1A )Company Confidential - For internal use only1. BI Publisher基礎(chǔ)1.1. 讀者基礎(chǔ)要求1、 熟悉EBS并發(fā)程序開發(fā)2、 熟悉Microsoft Word3、 了解并發(fā)管理器的定義和作用4、 理解簡單的XML文件5、 有XSL-FO開發(fā)經(jīng)驗者更佳6、 有Java開發(fā)經(jīng)驗者更佳1.2. 文檔貢獻者截止目前為止,本文檔在編寫過程中得到張禮軍、劉平的鼎力支持,這里深表感謝!1.3. About XMLPXMLP在EBS中的地位XMLP是EBS的11.510之后主要的報表解

7、決方案。每種技術(shù)都有自己的特點和應(yīng)用方向,仔細(xì)閱讀下表,我們可以體會何種場景該使用XMLP。EBS中的技術(shù)特點企業(yè)應(yīng)用Oracle DB關(guān)系型數(shù)據(jù)庫,其實是最佳的設(shè)計模式和開發(fā)框架所有MIS系統(tǒng)的基礎(chǔ),最可靠的數(shù)據(jù)持久存儲PL/SQL標(biāo)準(zhǔn)SQL+編程語言,Oracle所有開發(fā)工具的基石用于業(yè)務(wù)邏輯實現(xiàn);系統(tǒng)質(zhì)量的優(yōu)劣、性能的高低,很大程度上取決于PL/SQLReports過去流行的可視化報表設(shè)計環(huán)境,開發(fā)效率高數(shù)據(jù)檢索+報表展現(xiàn),尤其是單據(jù)打印DiscovererBI展現(xiàn)工具,基于主題視圖,分析企業(yè)數(shù)據(jù)因為布局工作量小,被廣泛應(yīng)用于普通報表開發(fā)ADI/Web ADI從日記賬和FA起家,逐步發(fā)展

8、為EBS最強的桌面工具數(shù)據(jù)檢索+Excel展現(xiàn)、數(shù)據(jù)批量錄入和修改XML Publisher基于XML工業(yè)標(biāo)準(zhǔn),數(shù)據(jù)抽取與展現(xiàn)分離,布局設(shè)計平易近人又高度靈活豐富,與Java親密集成數(shù)據(jù)檢索+報表展現(xiàn),除了單據(jù)打印,還可發(fā)布至合作伙伴Concurrent基于時間的任務(wù)并發(fā)、排隊,合理利用系統(tǒng)資源立即、定時或周期執(zhí)行程序、報表、維護和監(jiān)控FlexfieldEBS最富特色的自定義字段,智能組合、智能驗證會計科目、物料分類,業(yè)務(wù)特有信息的記錄和傳遞Forms最快捷的數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)環(huán)境,UI不夠友好Windows版的數(shù)據(jù)錄入+數(shù)據(jù)處理+數(shù)據(jù)檢索JSP/JTF/OAF效率比較高的基于瀏覽器的應(yīng)用開發(fā)

9、框架純Web版的數(shù)據(jù)錄入+數(shù)據(jù)處理+數(shù)據(jù)檢索Workflow靈活的流程定義/自動化、通知發(fā)送、系統(tǒng)間集成流程式審批、流程式數(shù)據(jù)傳遞、事件式系統(tǒng)集成Alert基于觸發(fā)器和定時器的數(shù)據(jù)監(jiān)控、預(yù)警通知企業(yè)核心數(shù)據(jù)監(jiān)控、系統(tǒng)運行異常監(jiān)控Interface/API各模塊開發(fā)人員留出的,除了UI外的數(shù)據(jù)“出入口”客戶化業(yè)務(wù)、外圍系統(tǒng)與核心ERP的集成Web Service基于Internet的計算和服務(wù),可用于數(shù)據(jù)交換跑在Internet上的Interface/API1.3.1. 官方資料XML Publisher簡稱XMLP,現(xiàn)在叫BI Publisher,有獨立版和EBS嵌入版。以下站點是BI Pub

10、lisher的官方技術(shù)中心:以下站點是EBS的官方文檔中心,其中包含XML Publisher的最新User Guide:BI Publisher可以使用 大多數(shù)用戶熟悉的工具Microsoft Word 或 Adobe Acrobat,來設(shè)計報表格式。不需要專用的設(shè)計Studio,這意味著不需要額外的成本。這樣,業(yè)務(wù)顧問或者用戶僅需要簡單的培訓(xùn),就可以直接完成報表的設(shè)計。1.3.2. 解決了其它報表工具的雞肋1、 PL/SQL:布局過于簡單;不便于Java集成,不便于對外發(fā)布。2、 Discoverer:布局過于簡單、性能較差;不便于Java集成,不便于對外發(fā)布。3、 Reports:輸出E

11、xcel不方便、標(biāo)題和內(nèi)容漂移、PASTA配置麻煩;不便于Java集成,不便于對外發(fā)布。1.3.3. 完全分離數(shù)據(jù) / 布局 / UI國際化數(shù)據(jù)獲取、布局設(shè)計、界面翻譯三大工作全部分離,可由不同的人甚至第三方分工協(xié)作。報表輸出數(shù)據(jù)邏輯報表布局翻譯轉(zhuǎn)化XML Publisher1.3.4. 數(shù)據(jù)不限來源、最終格式豐富、傳送不限目的地BI Publisher 可以接受并格式化任何格式規(guī)范的 XML 數(shù)據(jù),它可以與能夠生成 XML 的任何數(shù)據(jù)庫、應(yīng)用程序或過程集成,無論是要格式化輸出并發(fā)送給使用者的數(shù)據(jù)庫、ERP 應(yīng)用程序還是 Web 服務(wù)。BI Publisher 還允許您將來自多個數(shù)據(jù)源的數(shù)據(jù)置

12、入單個輸出文檔??梢酝ㄟ^打印機、電子郵件、傳真和 WebDav 傳送您的內(nèi)容,或者將報表發(fā)布到門戶。Delivery Manager 的開放式體系結(jié)構(gòu)還允許您輕松地實現(xiàn)自定義傳送通道。Web Services模 板XMLEDIEFTEmailPrinterFaxWebDAVe-Commerce輸出目標(biāo)Oracle, SQL ServerPeopleSoft, SAP, SiebelJava, C+, Pearl, etcXML Publisher數(shù)據(jù)源 Word Excel AcrobatXSL布局設(shè)計工具PDFRTFHTMLExcel XML Spy JDeveloper Scriptura

13、1.3.5. 卓越的性能BI Publisher 基于 W3C XSL-FO 標(biāo)準(zhǔn),它是當(dāng)今世界上最快、伸縮性最強的實現(xiàn)。它可以在較短的時間內(nèi)處理大量的數(shù)據(jù)輸入并生成輸出,而只需占用很少的 CPU 時間和內(nèi)存。1.3.6. 開放的標(biāo)準(zhǔn),易于集成BI Publisher 是基于開放標(biāo)準(zhǔn)技術(shù)構(gòu)建的。它是一個 J2EE 應(yīng)用程序,可以部署到任何 J2EE 容器。數(shù)據(jù)將處理為 XML,在桌面應(yīng)用程序中創(chuàng)建的布局模板將在內(nèi)部轉(zhuǎn)換為 XSL-FO(另一個 W3C 標(biāo)準(zhǔn))。該應(yīng)用程序生成的輸出也符合業(yè)界標(biāo)準(zhǔn),如 PDF、RTF 和 HTML。傳送協(xié)議是 Internet 打印協(xié)議 (IPP)、WebDAV、

14、FTP 和 AS2。1.4. 必要配置1.4.1. 服務(wù)器端Patch最好升級到最新版本,至少也要到5.5,之前的版本可以說是Oracle的“小白鼠”。目前最新版為Oracle XML Publisher Core Rollup Patch 5.6.2 (Patch 5097966),Notes367394.1,有比較詳細(xì)的描述。SELECT * FROM fnd_product_installations WHERE patch_level LIKE %XDO%1.4.2. 服務(wù)器端配置除非有特別需要,如設(shè)置臨時文件夾、字體映射、PDF報表文件密碼控制等,否則不需要做什么配置。新版配置:XM

15、L Publisher Administrator/Home/Administration。舊版配置:$XDO_TOP/resource/xdo.cfg或者$AF_JRE_TOP/jre/lib/xdo.cfg。該文件默認(rèn)不存在,需要手工創(chuàng)建。文件格式要按照Oracle XML Publisher Users Guide的要求來寫。如果PC機安裝了XML Publisher Desktop,其實里面有個xdo example.cfg文件,可以稍微修改即可使用。1.4.3. 開發(fā)設(shè)計工具XML Publisher Desktop目前最新版本是5.6.2;需要先裝好JDK1.4以上版本。下載下來后

16、直接安裝,這樣會在Word中嵌入XMLP的菜單,可以用來自動生成布局、預(yù)覽等。1.5. 最簡單的例子.輸出XML數(shù)據(jù)源1.5.1. 關(guān)于數(shù)據(jù)源XMLP要求的數(shù)據(jù),必須是XML格式的,這可以通過多種方式生成,最常見的有兩種。1、 Oracle Reports:僅創(chuàng)建Data Module、分組、求和,不用設(shè)計布局;其中求和也可以在模版中完成。2、 PL/SQL or SQL:直接輸出XML格式的內(nèi)容。如果使用XMLP的Java API來生成報表,實際上可以從任何途徑獲得XML格式的文件,包括本地文件、用URL指定的網(wǎng)絡(luò)文件、其他Java函數(shù)返回的參數(shù)等等。1.5.2. 開發(fā)數(shù)據(jù)源這里采用Orac

17、le Reports,為簡單起見,參數(shù)寫死,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.description, pll.quantity, pll.unit_meas_lookup_code uom, pll.price_overr

18、ide 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_system_items_vl mst WHERE poh.vendor_id = pv.vendor_id(+) AND poh.vendor_sit

19、e_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_id = anization_id AND _id = 102 AND poh.creation_date >= s

20、ysdate - 60在Oracle Reports中創(chuàng)建數(shù)據(jù)模型并分組如下:對組名稱可以改得友好些,比如這里的G_PO_HEADER和G_PO_LINE,這樣生成的XML文件可讀性更佳。代碼參考:CUXXMLPDEMO.rdf。1.5.3. 注冊并發(fā)程序,輸出格式為XML1、 上傳CUXXMLPDEMO.rdf至服務(wù)器$SCF_TOP/reports/US2、 注冊可執(zhí)行:3、 注冊并發(fā)程序,注意輸出格式:4、 分配給相應(yīng)的請求組。1.5.4. 試運行,獲得樣例數(shù)據(jù)將報表上傳服務(wù)起后,請求運行結(jié)果如下(只展開了一張PO):可以看到,Oracle Reports可以自動輸出XML,Tag主要來

21、自文件名、分組名、字段名。具體文件可參考:CUXXMLPDEMO.xml。1.6. 最簡單的例子.設(shè)計RTF模版1.6.1. 關(guān)于布局設(shè)計實際上和任何報表工具一樣,布局設(shè)計時,先需要“想象”層次結(jié)構(gòu),如哪些內(nèi)容位于頁眉頁腳,哪些內(nèi)容是報表頭,哪些內(nèi)容是明細(xì)行,各部分是如何依次嵌套的,哪些地方需要合計等等。同時考慮一些特殊需求:如何進行頁碼編號、是否動態(tài)列、每頁顯示的行數(shù)是否固定、新單據(jù)是否從新頁開始、行高和列寬是否固定、表頭是否在新頁重復(fù)等等。這些也是做布局設(shè)計的重點和難點,而且不同版本的XMLP支持的特性也不一樣,總的來說5.6.2之后,應(yīng)該我們常用的需求都能被滿足。布局設(shè)計最常用的工具是W

22、ord,也可以是Adobe Acrobat,也可以直接編寫XSL-FO模版。實際上,當(dāng)上傳RTF文件到XMLP模版管理器時,將被自動轉(zhuǎn)換為XSL-FO。1.6.2. 了解窗體域,這可是我們經(jīng)常寫XMLP代碼的地方用Word進行RTF模版設(shè)計時,XMLP主要是利用“窗體域”來保存分組、格式、賦值等控制信息,其類似報表中的占位符,運行時將被實際的數(shù)據(jù)替換。先從菜單“視圖/工具欄/窗體”調(diào)出窗體工具欄。然后就可以將“窗體域”插到Word文檔中,最后通過右鍵“窗體域”調(diào)出屬性,默認(rèn)文字中輸入比較直觀的描述,在“添加幫助文字”的“自己鍵入”部分輸入相應(yīng)的XMLP命令,格式都是<?各種命令?>

23、。比如下面的命令是個占位符,意思是運行時,用數(shù)據(jù)文件中標(biāo)記為“ITEM_CODE”的值替換:1.6.3. 導(dǎo)入樣例數(shù)據(jù)打開Word,通過Template Builder/數(shù)據(jù)/裝入XML數(shù)據(jù):選擇上一步請求輸出的XML文件,這樣我們可以用向?qū)Ъ涌炷0嬖O(shè)計,同時也方便預(yù)覽。1.6.4. 布局向?qū)Р季衷O(shè)計比較靈活,可以先搭好分組框架,也可先設(shè)計數(shù)據(jù);可以通過向?qū)?chuàng)建,也可以手工設(shè)計。這里先介紹向?qū)?,這樣可以減少手工添加“窗體域”的工作量。1、 啟動向?qū)?,菜單Template Builder/插入/表/表單/向?qū)?、 選擇布局風(fēng)格,我們先要做采購訂單單據(jù)頭,所以選擇“表單”3、 選擇分組依據(jù),我們這

24、里選擇G_PO_HEADER4、 選擇需要的字段,假定我們需要如下5個字段5、 設(shè)置排序字段,我們需要按照PO號和發(fā)放號同時排序6、 調(diào)整字段描述7、 完成后自動生成布局如下(可雙擊打開)其中的F和E是分組起始、終止標(biāo)志,我們總結(jié)如下:字段默認(rèn)文字XMLP語句組開始F<?for-each:G_PO_HEADER?><?sort:PO_NUM;ascending;data-type=text?><?sort:RELEASE;ascending;data-type=text?>訂單號PO_NUM<?PO_NUM?>發(fā)放號RELEASE<?REL

25、EASE?>供應(yīng)商VENDOR_NAME<?VENDOR_NAME?>地址ADDRESS_LINE1<?ADDRESS_LINE1?>貨幣單位CURRENCY_CODE<?CURRENCY_CODE?>組結(jié)束E<?end for-each?>這里要掌握分組語法和值飲用語法。Tips:到這里就可以預(yù)覽報表了。1.6.5. 調(diào)整布局向?qū)闪嘶究蚣?,尤其是需要寫代碼的“窗體域”,接下來我們根據(jù)實際需求調(diào)整下布局,同時最好也改下“默認(rèn)文字”,尤其是分組的。最終結(jié)果如下(可雙擊打開):1.6.6. 驗證布局菜單Template Builder/工

26、具/驗證,可以驗證語法錯誤和不支持的特性!1.6.7. 完善報表和上邊的步驟類似,首先運行向?qū)砑佑唵涡?,這次布局風(fēng)格選擇“表”,分組選擇PO_Line,結(jié)果如下,排序選擇Line_Number:其中的F和E是分組起始、終止標(biāo)志,注意這次它們所處的位置,這樣可以做到根據(jù)數(shù)量自動擴張行。同樣我們需要做下調(diào)整,比如:這個例子還缺少很多元素,僅供練習(xí),源文件為CUXXMLPDEMO.rtf。1.6.8. 預(yù)覽報表通過菜單Template Builder/預(yù)覽,可以選擇PDF、Excel、HTML、RTF等多種格式,我們選擇Excel的輸出結(jié)果如下:完整的輸出文件請看CUXXMLPDEMO.xls。1

27、.7. 最簡單的例子.注冊數(shù)據(jù)源和模版1.7.1. 注冊數(shù)據(jù)源N: XML Publisher Administrator/Home/Data Definitions/Create Data Definition定義數(shù)據(jù)源,需要注意,數(shù)據(jù)源代碼需要和并發(fā)請求的代碼一致,也可以上傳預(yù)覽數(shù)據(jù):1.7.2. 注冊模版,并和數(shù)據(jù)源關(guān)聯(lián)N: XML Publisher Administrator/Home/Templates/Create Template定義并上傳模版,需要注意選對類型和上一步注冊的數(shù)據(jù)源:可以為每種語言上傳一個模版。不過這里有點缺陷,就是一個模版只能用于一個數(shù)據(jù)源。如果我編寫了多個數(shù)

28、據(jù)源,想用同一個模版來顯示,就只能重復(fù)定義和上傳模版了。1.8. 最簡單的例子.運行報表1.8.1. 提交請求操作和提交普通的請求類似,唯一注意的是多了個Layout選項,默認(rèn)會選中同語言的模版:在11.5.10 CU1或Patch3435480之前,需要分兩步完成,第一步運行請求,第二步運行XML Report Publisher來生成輸出:1.8.2. 查看輸出運行結(jié)果和我們在XMLP Desktop中預(yù)覽的基本一樣,下面是個PDF的結(jié)果:2. RTF模版開發(fā)2.1. 本章概述2.1.1. 關(guān)注內(nèi)容相信隨著XMLP版本的不斷升級,其Desktop端的可視化功能將大大簡化我們的設(shè)計工作,不過

29、目前還有些地方不通過手工編寫命令是無法完成的;此外,雖然模版開發(fā)是依托Word的功能完成,但有些“鮮為人知”的Word功能需要額外提示下。所以本章收錄的是常見問題的處理辦法,并未包括完整的User Guide功能,當(dāng)然也不包括Word的使用幫助。2.1.2. XMLP和XSL-FO可以采取兩種方式編寫布局語言,一是XSL語句,二是XMLP簡易語句,個人建議使用前者,因為其是國際通行標(biāo)準(zhǔn)。另外,這兩種語法可以混合使用,比如上面的條件格式化行和單元格。在RTF中直接寫的只能是XMLP簡易語句;在窗體域中則上述兩者皆可。標(biāo)準(zhǔn)的頁眉頁腳中不允許使用窗體域;但擴展的頁眉頁腳中可以使用。XMLP提供的語法

30、,都是一種簡化的“代號”,實際都要翻譯成XSL,如果你精通XSL-FO,那么也可以在窗體域中直接用該語法,自由而靈活!如下SQL可以查到轉(zhuǎn)換后的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_templates_tl t1, xdo.xdo_templates_b t2, xdo.xdo_lobs t3 WHERE t1.template_code

31、= 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的格式化功能:紙張自定義、顏色、字號、字體、標(biāo)題樣式、背景、水印、對齊、表格、分欄、模版日期、窗體域的數(shù)字/日期格式、文件圖片、頁眉頁腳、自動圖文集。雖然可以代碼控制

32、,但既然依托Word作為可視化設(shè)計工具,我們就盡量使用Word功能來設(shè)計報表吧!2.2.2. Word表格和做網(wǎng)頁一樣,表格在報表布局中的地位至關(guān)重要,要熟練掌握,尤其是:1、 標(biāo)題行重復(fù),可以實現(xiàn)新頁重復(fù)標(biāo)題。2、 嵌套表格、行列合并、邊框、底紋,可以實現(xiàn)特殊的布局。3、 固定列寬、自動調(diào)整、禁止跨頁斷行,可以實現(xiàn)一些嚴(yán)格的布局控制。2.2.3. 行截斷與禁止折行單據(jù)打印中對格式的要求比較高,如果某一行過長或者出現(xiàn)多次折行,就會破壞版面,尤其是套打等要求較高的場合,這里把各種方法作個小結(jié)。1、 Word功能,不理想固定列寬功能可以用,但固定行高不行,雖然設(shè)計時看到“固定”了,如果不加控制,運

33、行后多出列寬的數(shù)據(jù)會自動折行。2、 單行+截斷,即控制只有以行,多余截斷,禁止折行在字段后,再加兩個命令:<xsl:attribute xdofo:ctx="block" name="wrap-option">no-wrap</xsl:attribute><xsl:attribute xdofo:ctx="block" name="overflow">hidden</xsl:attribute>3、 多行+截斷,難如固定顯示3行,多余部分截斷,目前通過模版無法實現(xiàn),只

34、有在數(shù)據(jù)源中先將數(shù)據(jù)截至剛好3行的字符數(shù),然后利用自動折行功能。這里還要注意空格,如果遇到空格,后面的單詞又顯示不下,將會提前自動折行。2.2.4. 條件格式化在不同的條件下顯示不同的顏色、不同的列數(shù)、不同的標(biāo)題、不同的布局風(fēng)格等等,這些都屬于條件格式化,需要借助IF命令。1、 比如不同幣種憑證打印格式不同<?if:CURRENCY_CODE="CNY"?>任何布局<?end if?><?if:CURRENCY_CODE!="CNY"?>任何布局<?end if?>2、 比如貨幣為CNY時才顯示列,在目標(biāo)列

35、的單元格內(nèi)寫如下語句<?ifcolumn:CURRENCY_CODE="CNY"?>字段值和格式<?end if?>注:這還不是真正的動態(tài)列。3、 比如偶數(shù)行底色為灰色,在行的任何單元格內(nèi)寫如下語句<?ifrow:position() mod 2=0?><xsl:attribute xdofo:ctx="incontext" name="background-color">gray</xsl:attribute><?end if?>4、 比如超過100單元格呈紅色

36、,在目標(biāo)單元格內(nèi)寫如下語句<?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做數(shù)據(jù)源,那么計算字段、統(tǒng)計字段也可以先完成。3、 在SQL中的數(shù)據(jù),都不帶格式,格式在模版中設(shè)置;需要在模版中完成計算的字段,必須不帶格式,主要指

37、數(shù)字不能帶千位符號。2.3.2. 組內(nèi)合計N: Template Builder/插入/字段向?qū)Э梢酝瓿苫镜慕y(tǒng)計,目前支持分組內(nèi)的:Sum、Count、Min、Max、Avarage。自動生成的代碼示例:<?sum (QUANTITY)?>。2.3.3. 頁內(nèi)合計要實現(xiàn)本頁合計數(shù),需分兩步:聲明合計變量、顯示合計變量(可帶格式)。1、 對QUANTITY進行本頁合計,聲明變量QTYTOTAL,注意寫在QUANTITY對應(yīng)的組內(nèi),不然引用不到<?add-page-total:QTYTOTAL;QUANTITY?>2、 可在任意地方顯示合計數(shù)<?show-page-

38、total:QTYTOTAL?>那么如何實現(xiàn)組內(nèi)+頁內(nèi)合計呢?2.3.4. 結(jié)轉(zhuǎn)合計把上頁的合計數(shù)顯示到下頁,與“頁內(nèi)合計”類似,需分兩步:聲明合計變量、顯示合計變量。用得少,可參考User Guide“Brought Forward/Carried Forward Totals”部分。2.3.5. 累計數(shù)Running Totals累計每行數(shù)字,實際上是這樣完成的:先聲明一個變量,初始化為0;累加;在需要的地方顯示累計。1、 在分組標(biāo)記前初始化,Set變量<?xdoxslt:set_variable($_XDOCTX,RTotalVar, 0)?>2、 計算累計值,通常寫在

39、欲累計的字段同一單元格內(nèi),比如下面的QUANTITY<?xdoxslt:set_variable($_XDOCTX, RTotalVar, xdoxslt:get_variable($_XDOCTX,RTotalVar) + QUANTITY)?>3、 任意地方顯示累計值,Get變量<?xdoxslt:get_variable($_XDOCTX,RTotalVar)?>2.4. 任何Page相關(guān)問題2.4.1. 新組分頁分頁是自然的,但如果想在某處強制分頁如新組新頁,那么可以使用Word的分頁符(CTRL+ENTER快捷鍵),但會導(dǎo)致最后出現(xiàn)空白頁;這樣只能使用如下幾種

40、方式: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">page</xsl:attribute></xsl:if>3、 <?end for-each?>前加&

41、lt;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. 條件分頁、固定行分頁1、 任意條件分頁,需要借助IF + 上面的break-after或者break-before,如:<?if:CURRE

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

43、l:attribute><?end if?>2.4.3. 頁眉頁腳1、 標(biāo)準(zhǔn)的頁眉頁腳,即單個頁眉頁腳,使用Word的功能即可。2、 擴展的頁眉頁腳,可使用<?start:body?><?end body?>把主體部分“框”起來,凡是在這兩個標(biāo)記之外的東西,都將被當(dāng)作頁眉頁腳。2.4.4. 頁碼和頁數(shù)1、 可以用Word的“自動圖文集”,在任意地方插入頁碼,這個是“自然頁碼”。2、 如果在某種情況下想讓頁碼從特定值開始,比如新的組頁碼重新編號,則需要借助命令,如在for-each后寫:<?initial-page-number:1?>。這里

44、的“1”,實際上也可以用數(shù)據(jù)文件中的XML元素來替換。2.4.5. 末頁、奇偶頁不同1、 Word可在頁眉頁腳部分實現(xiàn)首頁不同或奇偶頁不同,沒法實現(xiàn)末頁不同,即使借助代碼控制,實際實現(xiàn)的也是末頁布局不同,而非“頁眉頁腳”不同。<?startlast-page:body?><?end body?>報表本身僅有一頁時,則用<?startlast-page-first:body?><?end body?>例子“AdvancedLast Page”,注意布局需要獨立成頁,即之前需要加分頁符。2、 以偶數(shù)頁結(jié)束,主要目的是顯示偶數(shù)頁頁眉頁腳<?sec

45、tion:force-page-count;end-on-even-layout?>如果僅顯示空白頁,則用<?section:force-page-count;end-on-even?>3、 以奇數(shù)頁結(jié)束,主要目的是顯示奇數(shù)頁頁眉頁腳<?section:force-page-count;end-on-odd-layout?>如果僅顯示空白頁,則用<?section:force-page-count;end-on-odd?>2.5. 使用多媒體元素2.5.1. Word功能可以使用公式、繪圖(如組織結(jié)構(gòu)圖、線條等)、藝術(shù)字、剪貼畫。如果想通過代碼在有限范

46、圍內(nèi)控制這些對象,比如顯示文字、縮放、旋轉(zhuǎn)、移動、復(fù)制,可參考User Guide中的“Drawing, Shape and Clip Art Support”。2.5.2. 復(fù)選框插入復(fù)選框窗體域,因其選中代表True,不選代表False,需要我們輸入條件表達式,如:。不過運行后表現(xiàn)為菱形。2.5.3. 下拉框插入下拉框窗體域,定義下拉框的元素,并同樣在“自己鍵入”內(nèi)輸入需要引用的XML標(biāo)記如<%AREA_INDEX%>。這里要注意元素的順序,因為是用順序號和運行時的值進行匹配的,也就是XML數(shù)據(jù)中,AREA_INDEX是自然數(shù)1、2。2.5.4. 超鏈接可以直接利用Word功能

47、設(shè)置超鏈接,也可以在鏈接地址中,全部或部分引用XML數(shù)據(jù)文件中的標(biāo)記,做到動態(tài)超鏈接:SUPPLIER_SITE_URL或者:8000/OA_MEDIA/CURRENCY_CODE.gif2.5.5. 圖片可以直接利用Word功能插入圖片,也可以僅將該圖片當(dāng)作占位圖,在圖片的“設(shè)置圖片格式”的網(wǎng)站標(biāo)簽頁內(nèi)的“可選文字”,輸入真正的圖片地址:1、 來自網(wǎng)站的圖片:url:http:/localhost:8000/OA_MEDIA/forms_logo.gif。2、 來自EBS的圖片:url:$OA_MEDIA/forms_logo.gif。3、 動態(tài)指定地址:url:IMAGE_URL。4、 動

48、態(tài)拼接的地址:url:concat(SERVER,/,IMAGE_DIR,/,IMAGE_FILE)。5、 直接來自內(nèi)容為BLOB的XML元素,僅用于“Data Templates”:<fo:instream-foreign-object content-type="image/jpg"><xsl:value-of select="IMAGE_ELEMENT"/></fo:instram-foreign-object>2.5.6. 圖表可使用Template Builder向?qū)Р迦雸D表,類型有:條形圖-垂直、條形圖-水

49、平、餅圖、線形圖。向?qū)傻拇a,可在圖片的“設(shè)置圖片格式”網(wǎng)站標(biāo)簽頁內(nèi)的“可選文字”里看到,我們可以做進一步修改。2.6. 其它常用語法2.6.1. 字段引用在前面的窗體域中,我們直接引用XML文件中的Tag標(biāo)記,如<?QUANTITY?>。這種對XML元素的引用,是相對當(dāng)前層次的組來說;如果上層組中,有個同名Tag,就要通過類似“相對路徑”的方式引用,如<?./QUANTITY?>。這里的“./”個數(shù),不是布局中的相對層測個數(shù),而是XML數(shù)據(jù)文件中的相對層次!轉(zhuǎn)換為XSL-FO后,真正的語法分別是:<xsl:value-of select="./QU

50、ANTITY" xdofo:field-name="QUANTITY" /> <xsl:value-of select="././QUANTITY" xdofo:field-name="././QUANTITY" /> 2.6.2. 函數(shù)引用1、 行號,準(zhǔn)確講是分組中記錄順序號:<xsl:value-of select="position()"/>2、 總行號:<xsl:value-of select="last()"/>更多函數(shù)請參考XSL手

51、冊。2.6.3. 分組、排序、重新分組1、 可以通過向?qū)瓿煞纸M、排序:<?for-each:XML元素?><?sort:XML元素;ascending;data-type=text?><?sort:XML元素;ascending;data-type=text?><?end for-each?>2、 數(shù)據(jù)重新分組,不再限制于原始XML數(shù)據(jù)文件的層次關(guān)系數(shù)據(jù)為“Sales Report”,重新按年、月分組,理解如下實例,需要一點“想象力”:GYEAR-GMONTH SalesCategorySales (in thousand USD)FINDUS

52、TRY999 EEE2.6.4. 變量、參數(shù)1、 模版變量和普通的編程語言類似,模版中也可以使用變量,參考“累計數(shù)”部分。2、 模版參數(shù),只能通過API調(diào)用傳入,不能用于EBS并發(fā)請求聲明參數(shù):<xsl:param name="P_NAME" xdofo:ctx="begin"/>用$引用參數(shù):<?if:AMOUNT>$P_NAME?>傳入?yún)?shù):參考API部分。2.6.5. 空值判斷1、 有標(biāo)記,值不空<?if:Element_Name!=""?>Somethine Here<?end

53、if?>2、 有標(biāo)記,值空<?if:Element_Name and Element_Name=""?>Somethine Here<?end if?>3、 無標(biāo)記<?if:not(Element_Name)?>Somethine Here<?end if?>2.6.6. 數(shù)字和日期格式可以使用Word窗體域中的格式化功能,也可以在窗體域中輸入XMLP的格式化命令,這兩者不能同時使用,建議使用前者;后者語法參考User Guide“Number and Date Formatting”。2.6.7. 理解上下文上下文代表

54、XMLP語句的作用域,比如一個If語句,到底是針對一個單元格、一行、還是一列。在前面的介紹中,我們已經(jīng)用過section、column、row,下面列出XMLP的所有上下文及其含義:上下文含義等價XSL-FOsection類似Word中節(jié)的概念,不同Section的頁碼將重新編號、頁眉頁腳也重新開始,通常用于for-eachsection,使新組分頁column作用于表格中的整列,通常用來格式化列、動態(tài)顯示列、交叉報表列cell僅作用于表格中的一個單元格,通常與column配合使用,實現(xiàn)交叉報表block作用于表格中的一個單元格或者RTF中的一個自然段fo:blocksinlineThe co

55、ntext 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?> statements that need to follow the surrounding for-each asthe first element.inbloc

56、kThe 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.inlinesThe 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 stateme

溫馨提示

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

最新文檔

評論

0/150

提交評論