本帖最后由 Lydia 于 2024-12-3 18:29 编辑
动态渲染
动态渲染是指我们通过编写脚本来达到表格渲染的目的。当我们选择动态渲染后,表格对话框中的脚本处于可编辑状态,我们可在此进行脚本的编写。我们可通过脚本返回图片,返回的图片有两种途径,一种是用户构建图表,一种是通过 URL 来引用已经存在的图片。 3.11.1 用户构建图表 通过构建图表来进行表格渲染,主要包括三部分,第一部分是定义出图表的格式,第二部分是设定图表的数据源,第三部分是调用 getImage 函数生成图表。 •定义图表格式
- <font size="3">function createBMark(stack){
- var mark = new RangeBMark();
- mark.addDim("market");
- mark.addMeasure("sum_Sales");
- mark.setOpt(new StackMarkOpt());
- mark.setStack(stack);
- return mark;
- }
- function getBChart(){
- var axisType = CConstants.AXIS_BOTTOM_LEFT;// AXIS_UPPER_RIGHT
- var xscala = new DiscreteScala(new Array("market"));
- var aopt = new AxisOpt();
- aopt.setPType(axisType);
- var lbopt = new AxisLabelOpt();
- lbopt.setPType(CConstants.LABEL_OUTER);
- aopt.setLabelOpt(lbopt);
- xscala.setOpt(aopt);
- var yscala = new ContinuousScala(new Array("sum_Sales"));
- aopt = yscala.getOpt();
- aopt.setPType(axisType);
- var coord = new RectCoord(xscala, yscala);
- var mark = createBMark(false);
- var bchart = new BChart(coord, mark);
- return bchart;
- }
- var bc = getBChart();</font>
复制代码
•设定图表的数据源 所画图表的数据源,在查询中用户可以根据需求使用 SQL 语句制作数据源。 1)数据必须是分组数据,使用 group by 来对数据进行分组。 2)在数据的查询条件中可以添加参数,然后在 cell render 的脚本中给参数传值,从而使查询更加灵活、易用。 param['product'] = cols['Product']; var data = execute(this,SQL,"Query_cellRender2"); •调用getImage函数生成图表 表格宽度:cell.width 表格高度:cell.height getImage(bc,data,cell.width,cell.height);
➢举例: 1)准备好两个SQL数据集分别为咖啡销售统计、咖啡销售统计1。 2)在咖啡销售统计1的过滤下添加过滤条件“Market是=?{market}”。
3)在报告中添加表格组件,并绑定咖啡销售统计的Market、Sales。 4)选中Sales列,点击右侧【格式 > 表格渲染】。 5)渲染方式选择“动态渲染”,展示方式选择“原图”,点击脚本,在脚本对话框中编写如下脚本。
脚本内容:
- <font size="3">function createBMark(stack){
- var mark = new RangeBMark(); //Arange/Point/Line
- mark.addDim("MARKET");
- mark.addMeasure("SALES");
- mark.setOpt(new LineMarkOpt());
- var size = new DefSizeGuide(40);
- mark.setSizeGuide(size);
- mark.setStack(stack);
- return mark;
- }
- function getBChart(){
- var axisType = AXIS_BOTTOM_LEFT;
- var xscala = new DiscreteScala(new Array("MARKET"));
- var aopt = new AxisOpt();
- aopt.setPType(axisType);
- var lbopt = new AxisLabelOpt();
- lbopt.setVisible(false);
- aopt.setLabelOpt(lbopt);
- xscala.setOpt(aopt);
- var yscala = new ContinuousScala(new Array("SALES"));
- aopt = yscala.getOpt();
- aopt.setPType(axisType);
- var coord = new RectCoord(xscala, yscala);
- var mark = createBMark(false);
- var bchart = new BChart(coord, mark);
- var copt = bchart.getChartOpt();
- var cfmt = copt.getFormat();
- cfmt.setBackground(0xECEFF4);
- return bchart;
- }
- var bc = getBChart();
- param['market'] = cols['MARKET'];
- var data = execute(this, SQL, "咖啡销售统计1");
- getImage(bc,data,cell.width,cell.height);</font>
复制代码
效果如图:
➢说明: 如果是在自由表中做动态渲染,需要先在对应的单元格上绑定对应的数据后,再将上文中的示例脚本中数据进行替换,需特别注意将param['market'] = cols['MARKET']替换为param['market'] = explode.left(n);n表示当前单元格左侧第n个单元格。 3.11.2 通过URL来引用已经存在的图片 在通过 URL 来引用图片时,用户可以引用本地的图片,也可以引用网络上的图片。 引用本地图片,注意需要在路径前边添加file:///。
➢举例: 您可以通过定义url地址直接引用想要使用的图片。
效果如下图:
自定义渲染 在 bihome 中创建 renders.xml 文件后,您可以在表格渲染对话框中的自定义文件夹下看到自定义的表格渲染。 自定义渲染 renders.xml的格式如下:
- <font size="3"><renders>
- <group name="User Defined">
- <render name="TestPainter"> //自定义渲染的名称
- <attr name="bgColor" type="21" value="898965"/> //自定义渲染的设置项及默认值
- </render>
- <render name="StartPainter">
- <attr name="increase" type="10" value="20"/>
- </render>
- </group>
- </renders></font>
复制代码
render文件是一个配置文件,您可以在文件中使用开发的设置项接口进行相关设置。 您需要编写对应的java文件、调用产品的自定义接口、编译为class文件并放在指定位置以实现自定义渲染,具体方法可以联系定制开发。 ➢注意:class文件的路径需要添加到 “tomcat\bin\setclass.bat” 中,放在 “set CLASSPATH=%CLASSPATH%;”后面,重启产品后即可生效。
|