2.1 制作动态折叠树模板
2.1.1 准备数据
新建普通报表,新建数据库查询,SQL 查询语句为:
SELECT 货主地区,货主城市,客户ID,类别名称,订单.订单ID,产品名称 FROM 产品,类别,订单,订单明细
where 产品.类别ID=类别.类别ID and 订单.订单ID=订单明细.订单ID and 产品.产品ID=订单明细.产品ID and 货主地区 in ('华东','华北') and 类别名称 in ('谷类/麦片','肉/家禽','饮料') and 客户ID like '%a'
如下图所示:
2.1.2 设计表格
首先要设计一个双向折叠树,双向折叠树需要注意折叠树数据列不可位于同一行或者同一列。具体设置详见模板,主要注意单元格的扩展方向、父格设置以及过滤条件。表格样式如下图所示:
2.1.3 设置点击事件
为了实现双向折叠树与图表的交互,需要为树节点添加「按钮控件」并设置「点击事件」,通过点击事件将树节点的值作为参数传递给图表。
以效果图中「食品」节点为例,说明控件的点击事件设置:
1)选择「食品」单元格,点击控件设置,选择「按钮控件」,添加点击事件。
2)引用 JavaScript 脚本文件,点击「+」按钮,选择 %FR_HOME%\webapps\webroot\help\demo.js 。demo.js 文件是将树与图表模板相关联,将树节点的值传递给图表模板。
3)添加参数「cv」,值为公式 $$$ ,表示当前树节点的值。
4)输入 JavaScript 代码,调用 demo.js 中的方法。
注:demo.js 文件内容修改后,需要删除原先引用重新添加引用,才可生效。
步骤如下图所示:
treenode_lb1() 是 demo.js 中的一个方法,作用是传参。对应的 demo.js 的内容是:
function treenode_lb1(treenode, cv) {
if (treenode.selected()) {
if (!window.fr_lb1_param){
window.fr_lb1_param = {};
}
window.fr_lb1_param[cv] = cv;
} else {
window.fr_lb1_param[cv] = null;
}
postParam();
}
demo.js 中还有一个方法是关联折叠树模板和网页框嵌入的图表模板,代码如下:
FR.doHyperlinkByPost('?viewlet=demo%252Fbasic%252F%25E5%258F%258C%25E5%2590%2591%25E6%258A%2598%
25E5%258F%25A0%25E6%25A0%2591%25E5%25B9%25B6%25E4%25B8%258E%25E5%259B%25BE%25E8%25A1%25A8%25E4%25
BA%25A4%25E4%25BA%2592%25E5%25AD%2590%25E5%259B%25BE%25E8%25A1%25A8.cpt',
{diqu:diqu_str,city:city_str,lb1:lb1_str,lb2:lb2_str,lx1:lx1_str,lx2:lx2_str},'IFRAME');
2.1.4 嵌入图表模板
图表模板通过树模板中的一个「网页框控件」引入,在设计的表格下方合并单元格,添加「网页框」控件,地址栏输入:${servletURL}?viewlet=模板名.cpt
即本例输入:${servletURL}?viewlet=demo/basic/双向折叠树并与图表交互子图表.cpt 。
注:控件名必须与 demo.js 中 FR.doHyperlinkByPost() 方法中的名字对应。如示例均为「iframe」。
2.2 制作图表模板
2.2.1 准备数据
新建普通报表,新建数据库查询,SQL 查询语句为:
SELECT 货主地区,货主城市,客户ID,类别名称,订单.订单ID,产品名称 FROM 产品,类别,订单,订单明细
where 产品.类别ID=类别.类别ID and 订单.订单ID=订单明细.订单ID and 产品.产品ID=订单明细.产品ID and 客户ID like '%a'
如下图所示:
2.2.2 设计表格
图表模板中,需要设置根据树节点传参的条件设置。具体设置详见模板,主要注意单元格的扩展方向、父格设置、过滤条件以及条件属性,并且 F 列、I 列被隐藏。表格样式如下图所示:
2.2.3 插入图表
选中单元格,点击单元格元素,插入图表,设置图表的类型、数据、样式等。
双向折叠树并与图表交互.zip (3.48 K)双向折叠树并与图表交互子图表.zip (6.81 K)