选中并打开一个xxx.rptdesign,先点"Layout"标签,再点"Script"标签,这个时候就能进入整个report的
script编辑页面,这个script是"onRender" scripts,里面有各种Event Function,如beforeDataSetFilled,
beforeGeneration, beforeGeneration, agterRendering...我们可以通过设置chart的beforeGeneration
响应事件来改变其title,如下:
function beforeGeneration(chart, context)
{
var title = context.getExternalContext().getScriptable().getParameterValue("title");
chart.getTitle().getLabel().getCaption().setValue(title);
}
2.
BIRT.CHART: 让Y轴标题动态修改
BIRT的chart功能似乎并不是很强大,反正在使用过程中,出现过编辑器不好使,被迫直接修改xml文件的情况.
现在,有一个这样的需求,就是让Y轴的标题显示用户输入的值.
如图所示,这个标题是在编辑/定义图表的时候输入的固定值,这个值不管是改成params["test"]还是reportContext.getParameter("test")都会直接返回文本,而不是表达式值.
但是,这个文本唯一支持的动态,就是本地化,那么本文将介绍如何利用resources.properties来实现这个标题的动态显示
首先,设置这个chart的resource使用<YOUR_LOCATION>/reources.properties文件
然后,在这个properties文件中输入test_field=Hopeshared's Test
接着,修改这个title
这个时候,preview的结果,title就会显示properties文件里的内容
向report添加一个名为test的参数,这个参数是string类型,必填项,用户的输入将保存到properties文件并显示在chart中
接着,写个脚本,让properties文件内容发生变化
在整个report的initialize方法中,写入
最后,preview一下,看看结果.
其实有很简单的办法实现的
在图上写个脚本
function beforeDrawAxisTitle(axis, label, icsc)
{
label.getCaption().setValue(icsc.getExternalContext().getScriptable().getParameterValue("test"));
}
3.动态文本显示(displayString属性)
现在,有一个这样的需求,就是让Y轴的标题显示用户输入的值.
如图所示,这个标题是在编辑/定义图表的时候输入的固定值,这个值不管是改成params["test"]还是reportContext.getParameter("test")都会直接返回文本,而不是表达式值.
但是,这个文本唯一支持的动态,就是本地化,那么本文将介绍如何利用resources.properties来实现这个标题的动态显示
首先,设置这个chart的resource使用<YOUR_LOCATION>/reources.properties文件
然后,在这个properties文件中输入test_field=Hopeshared's Test
接着,修改这个title
这个时候,preview的结果,title就会显示properties文件里的内容
向report添加一个名为test的参数,这个参数是string类型,必填项,用户的输入将保存到properties文件并显示在chart中
接着,写个脚本,让properties文件内容发生变化
在整个report的initialize方法中,写入
1
importPackage(Packages.java.lang);
2 importPackage(Packages.java.util);
3 importPackage(Packages.java.io);
4 importPackage(Packages.java.net);
5
6 var t_value = params["test"];
7 var prop= new Properties();
8
9 var in_stream= new FileInputStream("<YOUR_PROPERTIES_FOLDER>/resources.properties");
10 prop.load(in_stream);
11 in_stream.close();
12
13 prop.put("test_field", t_value);
14
15 var fout= new FileOutputStream("<YOUR_PROPERTIES_FOLDER>/resources.properties");
16 prop.store(fout,"Test Properties");
17 fout.close();
18
19 var current = new File("<YOUR_PROPERTIES_FOLDER>");
20
21 var cl = new URLClassLoader( new Array(current.toURL()));
22 res = ResourceBundle.getBundle("resource", Locale.getDefault(), cl);
2 importPackage(Packages.java.util);
3 importPackage(Packages.java.io);
4 importPackage(Packages.java.net);
5
6 var t_value = params["test"];
7 var prop= new Properties();
8
9 var in_stream= new FileInputStream("<YOUR_PROPERTIES_FOLDER>/resources.properties");
10 prop.load(in_stream);
11 in_stream.close();
12
13 prop.put("test_field", t_value);
14
15 var fout= new FileOutputStream("<YOUR_PROPERTIES_FOLDER>/resources.properties");
16 prop.store(fout,"Test Properties");
17 fout.close();
18
19 var current = new File("<YOUR_PROPERTIES_FOLDER>");
20
21 var cl = new URLClassLoader( new Array(current.toURL()));
22 res = ResourceBundle.getBundle("resource", Locale.getDefault(), cl);
最后,preview一下,看看结果.
其实有很简单的办法实现的
在图上写个脚本
function beforeDrawAxisTitle(axis, label, icsc)
{
label.getCaption().setValue(icsc.getExternalContext().getScriptable().getParameterValue("test"));
}
3.动态文本显示(displayString属性)
if(params["type"].value==0){
displayString = "全国各省业务量报表";
}else if(params["type"].value==1){
displayString = "总部负责省份业务量报表";
}else if(params["type"].value==2){
displayString = "省分负责省份业务量报表";
}else{
displayString = "类型参数传递错误";
}
birt 合并单元格
a a1 1
a a2 2
a a3 3
显示为:
----- a1 1
a ---- a2 2
---- a3 3
首先需要按a所在的列分组,然后设置组头所在单元格的“放置”属性,选择“全部“或“详细资料“
表格Table合并单元格
(即:“放置”属性在那里,原来就是general中的Drop属性)
来自:
来自互联网,版权归原作者.