BIRT脚本控制

原文:http://eclipse.org/birt/phoenix/deploy/reportScripting.php 

BIRT提供了一个基于Mozilla Rhino的脚本模型。报表引擎创建报表的过程可以划分为两个阶段——生成和呈现。生成阶段利用报表设计,生成一个名为报表文档的中间文件。呈现阶段利用报表文档进行渲染,生成HTMLPDF。报表生产线既可以将两个阶段作为一个任务执行,也可以作为两个任务分别执行。如果作为一个任务,那么报表文档是生成在内存中。在设计器中选择『以HTML方式预览』时,默认是采用这种方式的。反之,如果作为两个任务分别执行,那么报表文档将被保存在磁盘中。在设计器中选择『在浏览器中预览』时,默认是采用这种方式的。

 

每一个阶段的事件都通过事件处理器覆盖,用以修改报表内容。既可以用JavaScript,也可以用Java

 

 

事件

 

三大对象——报表对象、报表元素和数据源()——具有脚本事件。当前所处的阶段决定了可以定制的事件类型和对象属性。

 

 

下图描绘了包含一个表和一个数据元素的简单报表的事件触发顺序:

 

 

reportContextthis

 

在使用Script编辑器时,如果选择Pallette View,那么会显示选定的报表元素、指定事件中能够使用的函数和变量。例如,下图指出了某个数据元素的onCreate事件能够使用的函数和变量:

 

 

this可用于在事件中列出元素的所有方法和属性。

 

reportContext则可以用于访问和修改报表一级的属性。开发人员可用它来设置全局变量。例如:

 

报表的onInitialize事件

 

reportContext.setPersistentGlobalVariable("testglobal", "test global string");

 

Persistent版本的方法能让变量跨持久化。变量是Object类型的,具有高度的灵活性。

 

某个表中一个标签的onPrepare事件

 

this.text = reportContext.getPersistentGlobalVariable('testglobal');

 

全局变量可以通过绑定编辑器赋给数据元素。只需在给定列的表达式构建器中引用该变量即可。例如,如果绑定编辑器中有一列,其值从数据库取回。那么可以通过以下的表达式,在原值后附加上某个全局变量的值:

 

dataSetRow["MyString"] + "-" + reportContext.getPersistentGlobalVariable('testglobal');

 

reportContext也可用于访问会话级变量。

 

// attributeBeanBirt Viewer提供的一个会话级变量

myAttributeBean = reportContext.getHttpServletRequest.getAttribute('attributeBean');

reportDoc = myAttributeBean.getReportDocumentName();

this.text = reportDoc;

 

reportContext允许访问和修改脚本内使用的上下文。例如:

 

报表的onInitialize事件

 

appContext = reportContext.getAppContext();

importPackage(Packages.java.util)

myArrList = new ArrayList();

myArrList.add("one");

myArrList.add("two");

appContext.put("AppContextTest", myArrList);

 

这段代码读取了当前的应用上下文,并进行了一些修改。然后,可以在某个标签元素的onPrepare事件处理器中,这样使用:

 

appContext = reportContext.getAppContext();

myObject = appContext.get("AppContextTest");

this.text = myObject.size();

 

上例也可以这样实现:

 

reportContext.setPersistentGlobalVariable("testglobal", myArrList);

 

reportContext还可用于获取当前的区域信息,以及存储于资源文件中的消息。

 

报表级事件

 

afterFactory

结束生成阶段时执行

afterRender

结束呈现阶段时执行

beforeFactory

开始生成阶段前执行

beforeRender

开始呈现阶段前执行

initialize

开始生成阶段和呈现阶段前执行

 

initialize事件中,可以定义全局函数、变量和对象。例如,创建一个全局的函数:

 

function gTest(v){

return "Global Function:" + v;

}

// 仅在图表脚本中使用时需要

reportContext.setPersistentGlobalVariable("gTest", gTest);

 

只需这样调用:

 

gTest("MyTest");

 

或:

 

gTest = reportContext.getPersistentGlobalVariable("gTest");

val = gTest("Use Persistent");

 

在图表脚本中访问reportContext时,使用:

 

context.getExternalContext().getScriptable()

 

如,图表标题可以这样修改:

 

function beforeGeneration(chart, context){

importPackage(Packages.org.eclipse.birt.chart.model.type.impl);

newChartTitle = context.getExternalContext().getScriptable().getPersistentGlobalVariable("testglobal");

chart.getTitle().getLabel().getCaption().setValue(newChartTitle);

}

 

beforeFactory中,有几个方法可以用于访问报表中的元素。需要对元素命名。例如,想要在动态文本元素"TestHeader"中显示数据集"orders"的查询语句,可以在beforeFactory中这样写:

 

query = this.getDataSet("orders").queryText

this.getDynamicText("TestHeader").valueExpr = "query;";

 

报表元素级事件

 

onPrepare

生成阶段中,为每个报表元素调用一次。可用于修改设计。变更影响元素的所有实例,例如,所有的表行。

onCreate

生成阶段中调用。可访问和修改元素的某个实例(如,每隔9行设置1行背景为红色)

onRender

呈现阶段中调用。类似于onCreate。不可访问数据。

 

一个非常简单的例子——某表中的明细行:

 

onPrepare:

 

this.getStyle().backgroundColor = "red"; // 影响所有行

 

onCreate:

 

if (this.getRowData().getExpressionValue(3) > 100)

this.getStyle().backgroundColor = "red"; // 只影响该行

 

如果该表中有100行,则onPrepare只调用1次,而onCreateonRender将调用100次。

 

元素级事件实例

 

设置标签、文本、动态文本和数据元素的值

 

标签:onPrepare/onCreate

 

this.text = "My New Label"

 

文本:

 

this.context = "My New Text"

 

动态文本:

 

this.valueExpr = "row['CITY']";

this.valueExpr = "'my row count: ' + (row[0] + 1)";

 

数据元素:

 

使用绑定编辑器。

 

设置TOC

 

类似于值表达式,期待字符串:

 

this.tocExpression = "'tocbyrownumber: ' + row[0]";

 

使用行数据

 

onCreate中可使用行数据,可用于对值进行检查。

 

this.getRowData().getExpressionValue(i) // i列的值

this.getRowData().getExpressionValue("some_expression") // 对该行套用表达式的值

 

例如:

 

if (this.getRowData().getExpressionValue(1) == "product1")

this.getStyle().backgroundColor = "red";

 

if (this.getRowData().getExpressionValue("row[price]" == "$30")

this.getStyle().backgroundColor = "blud";

 

修改超链接

 

可在onPrepare中修改:

 

this.getAction().URI = "'http://www.google.com'";

 

getStyle

 

用于定制给定元素的属性。例如:

 

this.getStyle().fontWeight = "bold";

 

getParent

 

用于访问父元素。例如,从数据元素获取表:

 

this.getParent().getParent().getParent();

 

getValue

 

满足一些基于值变更视觉外观的需求。

 

if (this.getValue() > 30){

this.getStyle().fontFamily = "Arial"

this.getStyle().backgroundColor = "Yellow"

}

 

命名表达式

 

是指在某个元素上创建,并给予命名的表达式。其定义可在onPrepare中修改,其值可在onCreateonRender中访问。例如,定义一个表达式totalCreditValue,其值为Total.sum(row[?CREDITLIMIT?])。然后,就可在其他元素中用JavaScriptJava访问。

 

例如,在某个表上建一个表达式"RWC",值为row[0],则可在行中用以下方式访问:

 

rc = this.parent.getNamedExpressionValue("RWC");


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hummingbird Exceed v13 2008, 64位版, part1。 共两部分。下载后需合并解压缩。 包含了一个中文手册文件 ExceedManualCn.pdf。 -------- Hummingbird Exceed,结合了PC和X计算环境。Exceed提供从Windows 桌面到许多类型的计算平台的访问,包括UNIX,Linux,VMS,X Window System,IBM mainframes,和 Internet。 Exceed 允许用户从带有Xweb的网络浏览器显示X 客户端,既可以跨企业内部网,又可以跨国际网。 主要特点和优点: Hummingbird HostExplorer Deployment Wizard Add-on 这个新型外接附件允许管理员从任何网络服务器将HostExplorer配置为具有用户化的外观。 完全的Windows 2000 支持——包括Microsoft Installer和Advertised install支持。 载入优化——选择主机,具有最出色的处理能力来开展X 程序。 支持常见的登录(Single Sign-on)——允许用户无缝连接到UNIX/Linux和X程序。 多语言支持——所有Hummingbird Host Access Solutions 产品除了在支持英语的国家销售外,还有葡萄牙、法国、意大利、德国和西班牙 Microsoft 系统管理服务器(SMS)——SMS支持直接在Windows Installer中就可用。 Jconfig Sconfig——远程和中心管理和配置 完全的PC X家族——Hummingbird Exceed XDK——设计X Window 程序到基于Windows的平台 Hummingbird Exceed 3D——让工程和有限分析OpenGL-based程序分配到低成本的桌面上。降低了成本。 Multiple X Display/X Screens/Multiple Monitor支持——先进的X显示支持,用于同时访问多开发环境。 Xstart——强大、简单的远程程序创建。] Xsession——轻松创建多个远程程序。 Setup Wizard—— 更快、更轻松的Exceed安装。 Hummingbird HostExplorer 结合了完整的终端仿真支持——增加了对公司主机的访问,包括:IBM 大型机,AS/400和 UNIX 提供,经过TN3270E, TN5250E 和VT420。 NFS for Windows——性能有所提高,增加了远程文件系统的访问。 Hummingbird FTP for Windows Explorer——使用Windows Explorer 的先进、简化的文件传送。 Internet Daemons "Hummingbird Inetd "——为基于Windows的桌面提供了UNIX功能。 Hummingbird Basic——为自动重复的函数创建强大的脚本。 SOCKS——为TCP/IP程序提供的无缝、透明的安全性; Kerberos——仅保证经过检验的用户登录企业主机; 键盘映射和交换——自定义键盘来模拟工作站,允许用户在多个环境中同时运行; 其它新特点: Exceed XDK中提高的移值速度 Exceed 3D中支持GLX 1.3 Open GL 系统需求和支持的平台: 桌上电脑系统需求: Windows 95/98, Windows NT (Service Pack 4 or higher), Windows 2000 12 MB RAM 20 MB 磁盘剩余空间 启动 XDMCP (Query,Indirect,Broadcast), Passive REXEC,RLOGIN,RSH,Telnet,HRPS,PCX$Server Xstart,Client Wizard,Xsession,Telnet Dial-up Support —LBX,SLIP,PPP 网络传送支持: TCP/IP DECnet 用户界面: Server Visuals — Multiple Simultaneous Visuals, Automatic, GrayScale, PseudoColor, StaticColor, TrueColor, StaticGray X Display Support —Multiple X Displays and X Screens 窗口管理和模块: 多个、单一和同步的窗口模块 远程,本国,本地,本国为缺省,X为缺省,… 本地窗口管理——HWM, Motif1, Native 访问控制/安全 Xstart支持Kerberos V5 鉴定和密码术 主机、用户和密码保护 Xweb安全政策 字体支持 X11R5 RS/X11R6 字体服务器 字体/别名:75 DPI, 100 DPI, CDE, DEC, HP, IBM, Misc, OpenLook, PC Siemens, WinTED 中文/日文/韩文 输入法: XIM Kinput2 Microsoft-IME (中国,日本,韩国) 对Windows 2000的同步支持 打印: Xprint Graphical LPR/LPD via integrated HostExplorer Suite 用于综合的HostExplorer Suite的图形化LPR/LPD 用于HostExplorer Suite的LU1/LU3 管理服务: 经Jconfig Application Management Remote Configuration的集中管理 经Sconfig的集中配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值