ORACLE核心應(yīng)用技術(shù)報(bào)表解決方案_第1頁(yè)
ORACLE核心應(yīng)用技術(shù)報(bào)表解決方案_第2頁(yè)
ORACLE核心應(yīng)用技術(shù)報(bào)表解決方案_第3頁(yè)
ORACLE核心應(yīng)用技術(shù)報(bào)表解決方案_第4頁(yè)
ORACLE核心應(yīng)用技術(shù)報(bào)表解決方案_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、信息技術(shù)最佳實(shí)踐ORACLE核心應(yīng)用技術(shù)報(bào)表解決方案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基礎(chǔ)21.1.讀者基礎(chǔ)要求21.2.文檔貢獻(xiàn)者21.3.About XMLP21.4.必要配置41.5.最簡(jiǎn)單的例子.輸出XML數(shù)據(jù)源51.6.最簡(jiǎn)單的例子.設(shè)計(jì)RTF模版81.7.最簡(jiǎn)單的例子.注冊(cè)數(shù)據(jù)源和模版141.8.最簡(jiǎn)單的例子.運(yùn)行報(bào)表1

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

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

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

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

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

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

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

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

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

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

14、KE %XDO%1.4.2. 服務(wù)器端配置除非有特別需要,如設(shè)置臨時(shí)文件夾、字體映射、PDF報(bào)表文件密碼控制等,否則不需要做什么配置。新版配置:XML 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的要求來(lái)寫。如果PC機(jī)安裝了XML Publisher Desktop,其實(shí)里面有個(gè)xdo example.cfg文件,可以稍微修

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

16、上可以從任何途徑獲得XML格式的文件,包括本地文件、用URL指定的網(wǎng)絡(luò)文件、其他Java函數(shù)返回的參數(shù)等等。1.5.2. 開(kāi)發(fā)數(shù)據(jù)源這里采用Oracle Reports,為簡(jiǎn)單起見(jiàn),參數(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

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)建數(shù)據(jù)模型并分組如下:對(duì)組名稱可以改得友好些,比如這里的G_PO_HEADER和G_PO_LINE,這樣生成的XML文件可讀性更佳。代碼參考:CUXXMLPDEMO.rdf。1.5.3. 注冊(cè)并發(fā)程序,輸出格式為XML1、 上傳CUXXMLPDEMO.rdf至服務(wù)器$SCF_TOP/reports/US2、 注冊(cè)可執(zhí)行:3、 注冊(cè)并發(fā)程序,注意輸出格式:4、 分配給相應(yīng)的請(qǐng)求組。1.5.4.

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

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

22、鍵“窗體域”調(diào)出屬性,默認(rèn)文字中輸入比較直觀的描述,在“添加幫助文字”的“自己鍵入”部分輸入相應(yīng)的XMLP命令,格式都是<?各種命令?>。比如下面的命令是個(gè)占位符,意思是運(yùn)行時(shí),用數(shù)據(jù)文件中標(biāo)記為“ITEM_CODE”的值替換:1.6.3. 導(dǎo)入樣例數(shù)據(jù)打開(kāi)Word,通過(guò)Template Builder/數(shù)據(jù)/裝入XML數(shù)據(jù):選擇上一步請(qǐng)求輸出的XML文件,這樣我們可以用向?qū)Ъ涌炷0嬖O(shè)計(jì),同時(shí)也方便預(yù)覽。1.6.4. 布局向?qū)Р季衷O(shè)計(jì)比較靈活,可以先搭好分組框架,也可先設(shè)計(jì)數(shù)據(jù);可以通過(guò)向?qū)?chuàng)建,也可以手工設(shè)計(jì)。這里先介紹向?qū)?,這樣可以減少手工添加“窗體域”的工作量。1、 啟動(dòng)向?qū)?/p>

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

24、E;ascending;data-type=text?>訂單號(hào)PO_NUM<?PO_NUM?>發(fā)放號(hào)RELEASE<?RELEASE?>供應(yīng)商VENDOR_NAME<?VENDOR_NAME?>地址ADDRESS_LINE1<?ADDRESS_LINE1?>貨幣單位CURRENCY_CODE<?CURRENCY_CODE?>組結(jié)束E<?end for-each?>這里要掌握分組語(yǔ)法和值飲用語(yǔ)法。Tips:到這里就可以預(yù)覽報(bào)表了。1.6.5. 調(diào)整布局向?qū)闪嘶究蚣埽绕涫切枰獙懘a的“窗體域”,接下來(lái)我們根據(jù)實(shí)際

25、需求調(diào)整下布局,同時(shí)最好也改下“默認(rèn)文字”,尤其是分組的。最終結(jié)果如下(可雙擊打開(kāi)):1.6.6. 驗(yàn)證布局菜單Template Builder/工具/驗(yàn)證,可以驗(yàn)證語(yǔ)法錯(cuò)誤和不支持的特性!1.6.7. 完善報(bào)表和上邊的步驟類似,首先運(yùn)行向?qū)砑佑唵涡?,這次布局風(fēng)格選擇“表”,分組選擇PO_Line,結(jié)果如下,排序選擇Line_Number:其中的F和E是分組起始、終止標(biāo)志,注意這次它們所處的位置,這樣可以做到根據(jù)數(shù)量自動(dòng)擴(kuò)張行。同樣我們需要做下調(diào)整,比如:這個(gè)例子還缺少很多元素,僅供練習(xí),源文件為CUXXMLPDEMO.rtf。1.6.8. 預(yù)覽報(bào)表通過(guò)菜單Template Builder/

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

27、義并上傳模版,需要注意選對(duì)類型和上一步注冊(cè)的數(shù)據(jù)源:可以為每種語(yǔ)言上傳一個(gè)模版。不過(guò)這里有點(diǎn)缺陷,就是一個(gè)模版只能用于一個(gè)數(shù)據(jù)源。如果我編寫了多個(gè)數(shù)據(jù)源,想用同一個(gè)模版來(lái)顯示,就只能重復(fù)定義和上傳模版了。1.8. 最簡(jiǎn)單的例子.運(yùn)行報(bào)表1.8.1. 提交請(qǐng)求操作和提交普通的請(qǐng)求類似,唯一注意的是多了個(gè)Layout選項(xiàng),默認(rèn)會(huì)選中同語(yǔ)言的模版:在11.5.10 CU1或Patch3435480之前,需要分兩步完成,第一步運(yùn)行請(qǐng)求,第二步運(yùn)行XML Report Publisher來(lái)生成輸出:1.8.2. 查看輸出運(yùn)行結(jié)果和我們?cè)赬MLP Desktop中預(yù)覽的基本一樣,下面是個(gè)PDF的結(jié)果:2.

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

29、在RTF中直接寫的只能是XMLP簡(jiǎn)易語(yǔ)句;在窗體域中則上述兩者皆可。標(biāo)準(zhǔn)的頁(yè)眉頁(yè)腳中不允許使用窗體域;但擴(kuò)展的頁(yè)眉頁(yè)腳中可以使用。XMLP提供的語(yǔ)法,都是一種簡(jiǎn)化的“代號(hào)”,實(shí)際都要翻譯成XSL,如果你精通XSL-FO,那么也可以在窗體域中直接用該語(yǔ)法,自由而靈活!如下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_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、自定義、顏色、字號(hào)、字體、標(biāo)題樣式、背景、水印、對(duì)齊、表格、分欄、模版日期、窗體域的數(shù)字/日期格式、文件圖片、頁(yè)眉頁(yè)腳、自動(dòng)圖文集。雖然可以代碼控制,但既然依托Word作為可視化設(shè)計(jì)工具,我們就盡量使用Word功能來(lái)設(shè)計(jì)報(bào)表吧!2.2.2. Word表格和做網(wǎng)頁(yè)一樣,表格在報(bào)表布局中的地位至關(guān)重要,要熟練掌握,尤其是:1、 標(biāo)題行重復(fù),可以實(shí)現(xiàn)新頁(yè)重復(fù)標(biāo)題。2、 嵌套表格、行列合并、邊框、底紋,可以實(shí)現(xiàn)特殊的布局。3、 固定列寬、自動(dòng)調(diào)整、禁止跨頁(yè)斷行,可以實(shí)現(xiàn)一些嚴(yán)格的布局控制。2.2.3. 行截?cái)嗯c禁止折行單據(jù)打印中對(duì)格式的要求比較高,如果某一行過(guò)長(zhǎng)或者出現(xiàn)多次折行,就會(huì)破壞版面,尤其是套

32、打等要求較高的場(chǎng)合,這里把各種方法作個(gè)小結(jié)。1、 Word功能,不理想固定列寬功能可以用,但固定行高不行,雖然設(shè)計(jì)時(shí)看到“固定”了,如果不加控制,運(yùn)行后多出列寬的數(shù)據(jù)會(huì)自動(dòng)折行。2、 單行+截?cái)?,即控制只有以行,多余截?cái)?,禁止折行在字段后,再加兩個(gè)命令:<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、 多行+截?cái)?,難如固定顯示3行,多余部分截?cái)?,目前通過(guò)模版無(wú)法實(shí)現(xiàn),只有在數(shù)據(jù)源中先將數(shù)據(jù)截至剛好3行的字符數(shù),然后利用自動(dòng)折行功能。這里還要注意空格,如果遇到空格,后面的單詞又顯示不下,將會(huì)提前自動(dòng)折行。2.2.4. 條件格式化在不同的條件下顯示不同的顏色、不同的列數(shù)、不同的標(biāo)題、不同的布局風(fēng)格等等,這些都屬于條件格式化,需要借助IF命令。1、 比如不同幣種憑證打印格式不同<?if:CURRENCY_CODE="CNY"?>任何布局<?end if?><?if:CU

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

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

36、做數(shù)據(jù)源,那么計(jì)算字段、統(tǒng)計(jì)字段也可以先完成。3、 在SQL中的數(shù)據(jù),都不帶格式,格式在模版中設(shè)置;需要在模版中完成計(jì)算的字段,必須不帶格式,主要指數(shù)字不能帶千位符號(hào)。2.3.2. 組內(nèi)合計(jì)N: Template Builder/插入/字段向?qū)Э梢酝瓿苫镜慕y(tǒng)計(jì),目前支持分組內(nèi)的:Sum、Count、Min、Max、Avarage。自動(dòng)生成的代碼示例:<?sum (QUANTITY)?>。2.3.3. 頁(yè)內(nèi)合計(jì)要實(shí)現(xiàn)本頁(yè)合計(jì)數(shù),需分兩步:聲明合計(jì)變量、顯示合計(jì)變量(可帶格式)。1、 對(duì)QUANTITY進(jìn)行本頁(yè)合計(jì),聲明變量QTYTOTAL,注意寫在QUANTITY對(duì)應(yīng)的組內(nèi),不然引

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

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

39、是自然的,但如果想在某處強(qiáng)制分頁(yè)如新組新頁(yè),那么可以使用Word的分頁(yè)符(CTRL+ENTER快捷鍵),但會(huì)導(dǎo)致最后出現(xiàn)空白頁(yè);這樣只能使用如下幾種方式:1、 分組聲明中加section,如<?for-eachsection:G_PO_HEADER?>。2、 <?end for-each?>前加<?split-by-page-break:?>。這個(gè)翻譯后,實(shí)際上是:<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最后無(wú)空白頁(yè),但PDF有空白頁(yè)。4、 <?end for-each?>前加<xsl:attribute name="break-before">page</xsl:attribute>此法下RTF、PDF最后都有空白頁(yè)。2.4.2.

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

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

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

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

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

46、素的順序,因?yàn)槭怯庙樞蛱?hào)和運(yùn)行時(shí)的值進(jìn)行匹配的,也就是XML數(shù)據(jù)中,AREA_INDEX是自然數(shù)1、2。2.5.4. 超鏈接可以直接利用Word功能設(shè)置超鏈接,也可以在鏈接地址中,全部或部分引用XML數(shù)據(jù)文件中的標(biāo)記,做到動(dòng)態(tài)超鏈接:SUPPLIER_SITE_URL或者:8000/OA_MEDIA/CURRENCY_CODE.gif2.5.5. 圖片可以直接利用Word功能插入圖片,也可以僅將該圖片當(dāng)作占位圖,在圖片的“設(shè)置圖片格式”的網(wǎng)站標(biāo)簽頁(yè)內(nèi)的“可選文字”,輸入真正的圖片地址:1、 來(lái)自網(wǎng)站的圖片:url:http:/localhost:8000/OA_MEDIA/forms_logo

47、.gif。2、 來(lái)自EBS的圖片:url:$OA_MEDIA/forms_logo.gif。3、 動(dòng)態(tài)指定地址:url:IMAGE_URL。4、 動(dòng)態(tài)拼接的地址:url:concat(SERVER,/,IMAGE_DIR,/,IMAGE_FILE)。5、 直接來(lái)自內(nèi)容為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向?qū)Р迦雸D表,類型有:條形圖-垂直、條形圖-水平、餅圖、線形圖。向?qū)傻拇a,可在圖片的“設(shè)置圖片格式”網(wǎng)站標(biāo)簽頁(yè)內(nèi)的“可選文字”里看到,我們可以做進(jìn)一步修改。2.6. 其它常用語(yǔ)法2.6.1. 字段引用在前面的窗體域中,我們直接引用XML文件中的Tag標(biāo)記,如<?QUANTITY?>。這種對(duì)XML元素的引用,是相對(duì)當(dāng)前層次的組來(lái)說(shuō);如果上層組中,有個(gè)同名Tag,就要通過(guò)類似“相對(duì)路徑”的方式引用,如<?./QUANTITY?>。這里的“./”個(gè)數(shù),不是布局中的相對(duì)層

49、測(cè)個(gè)數(shù),而是XML數(shù)據(jù)文件中的相對(duì)層次!轉(zhuǎn)換為XSL-FO后,真正的語(yǔ)法分別是:<xsl:value-of select="./QUANTITY" xdofo:field-name="QUANTITY" /> <xsl:value-of select="././QUANTITY" xdofo:field-name="././QUANTITY" /> 2.6.2. 函數(shù)引用1、 行號(hào),準(zhǔn)確講是分組中記錄順序號(hào):<xsl:value-of select="position()&q

50、uot;/>2、 總行號(hào):<xsl:value-of select="last()"/>更多函數(shù)請(qǐng)參考XSL手冊(cè)。2.6.3. 分組、排序、重新分組1、 可以通過(guò)向?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”,重新按年、月分

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

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

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

54、單元格,通常與column配合使用,實(shí)現(xiàn)交叉報(bào)表block作用于表格中的一個(gè)單元格或者RTF中的一個(gè)自然段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. 高級(jí)布局2.7.1. 動(dòng)態(tài)列動(dòng)態(tài)列的含義是:設(shè)計(jì)時(shí)不知道有多

溫馨提示

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

評(píng)論

0/150

提交評(píng)論