• 可以采取两种方式编写布局语言,一是XSL语句,二是XMLP简易语句,个人建议使用前者,因为其是国际通行标准。另外,这两种语法可以混合使用,比如上面的条件格式化行和单元格。
    在RTF中直接写的只能是XMLP简易语句;在窗体域中则上述两者皆可。
    标准的页眉页脚中不允许使用窗体域;但扩展的页眉页脚中可以使用。

  • 如果模板中要求多个页眉页脚,使用下面的标记来标示出报表的主体部分   

    <?start:body?>

    ……

    <?end body?>

    • 嵌套模板

    由于在页眉和页脚中不允许使用窗体域,而当报表页眉页脚中希望插入XML数据的时候,可以考虑使用嵌套模板。

    嵌套模板是在模板中定义一个子模板,然后在需要的地方调用它,如在页眉页脚中调用它。

    1. 定义子模板

    子模板标记之间可以使用任何的标记和内容,和模板的主体部分没有任何区别

    <?template:internal template name?>

    ……

    <?end template?>

    2. 调用子模板

    下面两条语句都可以:

    <?call:internal template name?>

    <?call-template:internal template name?>

    • XML中计算除法用div

    例如: <?pick_qty div req_qty?>

    • XML Publisher 支持Word中的分栏功能,使报表输出能够以多栏的方式打印。

    如下是地址簿的多栏打印效果

    • 分页(按组分页)

    分页是自然的,但如果想在某处强制分页如新组新页,那么可以使用Word的分页符(CTRL+ENTER快捷键),但会导致最后出现空白页。

    可以使用如下几种方式:

    1、分组声明中加@section,如<?for-each@section:Group_Name?>;

    2、 <?end for-each?>前(不同的E中哦)加<?split-by-page-break:?>。这个翻译后,实际上是:

    <xsl:if test="position()<last()">

    <xsl:attribute name="break-before">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最后都有空白页。

    • 分页(条件分页)

    任意条件分页,需要借助IF +上面的break-after或者break-before,如:

    <?if:CURRENCY_CODE="CNY"?>

    <xsl:attribute name="break-before">page</xsl:attribute>

    <?end if?>

    注:要在每行的<?endforeach?>前哦; if和分页代码要写在同一个E中.

    • 分页(固定行分页)

    固定行分页,需要借助IF +上面的break-after或者break-before,在行 <?endforeach?>前,如下语句控制每页5行:

    <?if:position() mod 5 =0?>

    <xsl:attribute name="break-before">page</xsl:attribute>

    <?end if?>

    在测试过程中发现问题,第一句改为下面这句:

    <?if: position()!= 1 and position() mod 5 = 1?>

    • 强制页码从某一个数值起始

    <?initial-page-number:pagenumber?>: 参数pagenumber(1.可以是固定的值 2.可以XML传过来的值)

    或<?initial-page-number:$pagenumber?>:其中pagenumber为在RTF中自定义的变量.

    • RTF中自定义变量
      • < ?param@begin:parameter_name;parameter_value?>,引用的话前面要加$
    • IF语句

    The program was <?if:SUCCESS=’N’?>not<?end if?> successful

    The program was

    not

    successful.

    The program was <?if@inlines:SUCCESS=’N’?>not<?end if?> successful

    The program was not successful.

    使用@inlines使文本在同一行显示

    If-Then-Else 语句

    <?xdofx:if element_condition then result1 else result2 end if?>

    <?xdofx:If AMOUNT > 1000 Then

    'Higher‘

    Else If AMOUNT < 1000 then

    'Lower‘

    Else

    'Equal‘

    End If?>

    条件格式化—Choose语句

    <?choose:?>

    <?when:expression?>

    ……

    <?when:expression?>

    ……

    <?otherwise?>

    ……

    <?end choose?>

    • 根据条件显示或隐藏行
    YEAR MONTH  SALES
    foreach  if year month salesendif   endforeach

    其中: foreach                          <?for-each:SALE?>

    if                                     <?if:SALES>5000?>

    endif                               <?end if?>

    endforeach                    <?end for-each?>

    • 根据条件格式化行(加亮,背景等)

    <?if@row:condition?>

    <xsl:attribute name="background-color"xdofo:ctx="incontext">lightgray</xsl:attribute>

    <?end if?>

    如果不加@row,则仅局限于单元格

    YEAR MONTH  SALES
    foreach  format year month sales  endforeach

    其中:foreach                   <?for-each:SALE?>

    format                      <?if@row:position() mod 2=0?>
                                               <xsl:attribute name="background-color" xdofo:ctx="incontext">lightgray</xsl:attribute>

    <?end if?>

    endforeach              <?end for-each?>

    RGB颜色的写法:

    <?if@row:REF_NO3="After Sub Total:"?><?attribute@incontext:background-color;'RGB(255,0,0)'?><?end if?> --背景颜色

    <?if@row:REF_NO3="Before Sub Total:"?><?attribute@incontext:color;'#114515'?><?end if?>------字体颜色

    <?if:2>1?><fo:block font-size='20pt'><?end if?><?REF_NO2?>  控制字體大小

    根据条件显示或隐藏列

    <?if@column:condition?>

    ……

    <?end if?>

    <?if@column:condition?>

    <?quantity?>

    <?end if?>

    例如:

    <?if@column:TypeName="PRIVATE"?>

    <?quantity?>

    <?end if?>

    • 条件格式化—单元格加亮

    我的理解加亮单元格也就是加一个背景,这里的block和前面说的incontext作用范围有所区别。在if后不加@row都是指cell,加@row后incontext作用于row,block作用于column。

    <?if:debit>1000?>

    <xsl:attributexdofo:ctx="block" name="background-color">

    red

    </xsl:attribute>

    <?end if?>

    例:

    account debit credit
    F   account CH1 debit CH2 credit  E

    其中:F                              <?for-each:account?>

    CH1                         <?if:debit>1000?>

    <xsl:attribute xdofo:ctx="block" name="backgroundcolor">red</xsl:attribute>

    <?end if?>

    CH2                           <?if:credit>1000?>

    <xsl:attribute xdofo:ctx="block" name=background-color">red</xsl:attribute>

    <?end if?>

    E                                <?end for-each?>

    • 连续向下累积合计效果

    要实现以下效果:

    id amt total
    1 100 100
    2 200 300
    3 300 600

    构造如下:

    set_var

    id amt total
    F  id amt total  E

    其中: set_var             <?xdoxslt:set_variable($_XDOCTX, ’Var’, 0)?>      --定义变量

    F                         <?for-each:id?>

    total                   <?xdoxslt:set_variable($_XDOCTX, ’Var’,xdoxslt:get_variable($_XDOCTX,’Var’) + amt)?>        --累加第行值

    <?xdoxslt:get_variable($_XDOCTX, ’Var’)?>                   --通过变量显示累加值

    E                         <?end for-each?>

    • 条件加总
    <?sum(current-group)[sourcename!='']/receipt_amt?>

    变量知识:

    变量使用“set/get”的方式来分配、更新和取得变量的值

    <?xdoxslt:set_variable($_XDOCTX, ’variable name’, value)?>

    <?xdoxslt:get_variable($_XDOCTX, ’variable name’)?>

    <?xdoxslt:set_variable($_XDOCTX, ’x’, xdoxslt:get_variable($_XDOCTX, ’x’ + 1)?>

    <xsl:variable name="start" xdofo:ctx="incontext" select="position()"/>
    < xsl:value-of select="$start"/>

    • 排序

    <?sort:element name?>

    <?sort:SAL;'ascending';data-type='text'?>

    升序/降序:ascending / descending

    数据类型:text / number / date

    注意以上字符串的大小写,这里的语法对大小写是敏感的。

    可以有多个排序字段; 写在for-each和end for-each之间的同一个E中或不同的E中.

    <?for-each:G_VENDOR_NAME?><?sort:VENDOR_NAME?><?sort:INVOICE_NUM?><?end for-each?>

    • 数字和日期格式化

    数字格式化

    XML Publisher支持两种数字格式化方式:

    Word本身的数字格式掩码

    Oracle的 format-number功能

    <?format-number:fieldname;’999G999D99’?>

    日期格式化

    XML Publisher支持三种日期格式化方式

    Word本身的日期格式掩码

    Oracle的 format-date功能

    <?format-date:date_string; ’FORMAT_MASK’;?>

    <?format-date:hiredate;’YYYY-MM-DD’?>

    Oracle的抽象日期格式掩码语法

    <?format-date:fieldname;’MASK’?>

    <?format-date:hiredate;’SHORT’?>

    <?format-date:hiredate;’LONG_TIME_TZ’?>

    抽象日期格式掩码列表

    掩码

    US输出实例

    SHORT

    2/31/99

    MEDIUM

    Dec 31, 1999

    LONG

    Friday, December 31, 1999

    SHORT_TIME

    12/31/99 6:15 PM

    MEDIUM_TIME

    Dec 31, 1999 6:15 PM

    LONG_TIME

    Friday, December 31, 1999 6:15 PM

    SHORT_TIME_TZ

    12/31/99 6:15 PM GMT

    MEDIUM_TIME_TZ

    Dec 31, 1999 6:15 PM GMT

    LONG_TIME_TZ

    Friday, December 31, 1999 6:15 PM GMT

    • 矩阵报表(也可guide中搜索:split-column-data)

    XML数据:

    <ROWSET>
    < RESULTS>
    < INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    < YEAR>2005</YEAR>
    < QUARTER>Q1</QUARTER>
    < SALES>1000</SALES>
    < /RESULTS>
    < RESULTS>
    < INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    < YEAR>2005</YEAR>
    < QUARTER>Q2</QUARTER>
    < SALES>2000</SALES>
    < /RESULTS>
    < RESULTS>
    < INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    < YEAR>2004</YEAR>
    < QUARTER>Q1</QUARTER>
    < SALES>3000</SALES>
    < /RESULTS>
    < RESULTS>
    < INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    < YEAR>2004</YEAR>
    < QUARTER>Q2</QUARTER>
    < SALES>3000</SALES>
    < /RESULTS>
    < RESULTS>
    < INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    < YEAR>2003</YEAR>
    ...
    < /RRESULTS>
    < RESULTS>
    < INDUSTRY>Home Furnishings</INDUSTRY>
    ...
    < /RESULTS>
    < RESULTS>
    < INDUSTRY>Electronics</INDUSTRY>
    ...
    < /RESULTS>
    < RESULTS>
    < INDUSTRY>Food and Beverage</INDUSTRY>
    ...
    < /RESULTS>
    < /ROWSET>

    想要的结果:

    INDUSTRY 2005 2004 2003
    Motor Vehicle Dealers 3000 6000 1200
    Home Furnishings 3200 7770 3300
    Electronics 9000 9000 4300
    Food and Beverage 1200 900 1600

    模板结构:

    INDUSTRY   header column for  year  end
    for    INDUSTRY for  sum(sales)   end

    其中:   header column                          <?horizontal-break-table:1?>

    for:                                                <?for-each-group@column:RESULTS;YEAR?>

    YEAR                                           <?YEAR?>

    end                                              <?end for-each-group?>

    for:                                               <?for-each-group:RESULTS;INDUSTRY?>

    INDUSTRY                                <?INDUSTRY?>

    for:                                               <?for-each-group@cell:currentgroup();YEAR?>

    sum(Sales)                               <?sum(current-group()//SALES)

    end                                              <?end for-each-group?>

    end                                              <?end for-each-group?>

    • SQL与XML

    SQL Statement

    Usage

    Description

    2+3

    <?xdofx:2+3?>

    2-3

    <?xdofx:2-3?>

    2*3

    <?xdofx:2*3?>

    2/3

    <?xdofx:2/3?>

    2**3

    <?xdofx:2**3?>

    指数

    2||3

    <?xdofx:2||3?>

    连接

    lpad(‘aaa’,10,’.’)

    <?xdofx:lpad(‘aaa’,10,’.’)?>

    左边填充

    rpad(‘aaa’,10,’.’)

    <?xdofx:rpad(‘aaa’,10,’.’)?>

    右边填充

    decode(’xx’,’bb’,’cc’,’xx’,’dd’)

    <?xdofx:decode(’xx’,’bb’,’cc’,’xx’,’dd’)?>

    decode判断功能

    instr(’abcab’,’a’,2)

    <?xdofx:instr(’abcab’,’a’,2)?>

    Instr查找子串位置

    substr(’abcdefg’),2,3)

    <?xdofx:substr(’abcdefg’),2,3)?>

    查找子串

    replace(name,’John’,’Jon’)

    <?xdofx:replace(name,’John’,’Jon’)?>

    替换

    to_number(‘12345’)

    <?xdofx:to_number(‘12345’)?>

    转换为数字

    to_char(12345)

    <?xdofx:to_char(12345)?>

    转换为字符

    sysdate()

    <?xdofx:sysdate()?>

    系统当前日期

    http://blog.csdn.net/rfb0204421/article/details/7478090

    http://www.cnblogs.com/quanweiru/archive/2012/10/19/2730842.html

XML Publisher 技巧相关推荐

  1. XML PUBLISHER的一些技巧

    2. RTF模版开发 2.1. 本章概述 2.1.1. 关注内容 相信随着XMLP版本的不断升级,其Desktop端的可视化功能将大大简化我们的设计工作,不过目前还有些地方不通过手工编写命令是无法完成 ...

  2. XML Publisher 模板设计技巧

    2. RTF模版开发 2.1. 本章概述 2.1.1. 关注内容 相信随着XMLP版本的不断升级,其Desktop端的可视化功能将大大简化我们的设计工作,不过目前还有些地方不通过手工编写命令是无法完成 ...

  3. XML Publisher 模板

    2. RTF模版开发 2.1. 本章概述 2.1.1. 关注内容 相信随着XMLP版本的不断升级,其Desktop端的可视化功能将大大简化我们的设计工作,不过目前还有些地方不通过手工编写命令是无法完成 ...

  4. ORACLE XML Publisher

    ORACLE XML Publisher这个工具已经发布很久了,但是之前一直没有对其具体的功能和使用进行过研究和测试,经过几天的研究和测试,现将其部分主要功能和使用方法做以简述. 先介绍一下我进行测试 ...

  5. oracle r11,Oracle XML Publisher在Oracle R11i中的实际运用

    Oracle XML Publisher在Oracle R11i中的 实际运用 客户在实施Oracle E-Businsess Suite时,会有大量客户化开发需求. 首要的需求往往是客户化报表; 在 ...

  6. EBS 报表开发:XML Publisher Excel模板

    除了用BI Publisher建立RTF文件排版,R12还可以使用Excel文件排版 如果想要使用xml publisher desktop for excel,BI publisher插件版本要高于 ...

  7. Oracle EBS 动态调用 XML Publisher 模板 输出不同的报表

    Oracle EBS 动态调用 XML Publisher 模板 输出不同的报表 if fnd_request.add_layout(template_appl_name => 'CUX',   ...

  8. ebs xml开发 html,EBS excel模板xml publisher开发

    前提: BI publisher下载地址: http://www.cnblogs.com/quanweiru/p/5229801.html R12: How to add Microsoft Exce ...

  9. XML Publisher介绍

    OracleXML Publisher 是随OracleEBS一起发布的 一套基于模版的打印解决方案,它提供了一种设计报表和打印报表的新方式,很好的将桌面文字处理工具和EBS数据报表输出集成在一起. ...

最新文章

  1. Linux学习之CentOS(三十四)--配置域主DNS服务器
  2. 深入理解Binder机制4-bindService过程分析
  3. 05-数据类型、常量、变量
  4. muduo之Connector
  5. 发布地图服务属性表_Web3D地图来了!腾讯位置服务正式版发布!
  6. java 微商城开发_Java网上商城系统可以开微信商城吗
  7. 用户资源管理DBMS_RESOURCE_MANAGER
  8. 沃信科技ERP系统容灾方案概述
  9. B.一个人的旅行 (dijkstra算法)
  10. github—本地域名配置方式
  11. 前端性能优化—回流与重绘
  12. 最新快手面试题(含总结):设计模式+红黑树+Java锁+Redis等
  13. T3 - 构建大型 Web 应用的 JavaScript 框架
  14. JEESZ分布式框架--单点登录集成方案
  15. Java全套视频教程
  16. Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
  17. matlab经典例题及答案,matLAB经典例题及答案.pdf
  18. echarts绘制进度条
  19. C++著名库的比较和学习经验
  20. ​单页应用程序是如何打破网页设计的?

热门文章

  1. 小乌龟Franklin总结
  2. 微信卖保险,仅1%用户能看到
  3. 准备蓝桥杯--dyx--十进制转换十六进制
  4. 厦门大学考研真题笔记:334新闻与传播专业综合能力
  5. 腾讯云轻量级服务器配置及远程连接
  6. WSAStartup与WSACleanup
  7. Flutter开发之——动画,移动终端软件开发
  8. 我国灵活就业人员已达2亿人
  9. 读书笔记——莫提默·J.艾德勒查尔斯·范多伦(美)《如何阅读一本书》
  10. 关于大型网站技术演进的思考(十六)--网站静态化处理—前后端分离—下(8)