1. 概述
1.1 问题描述
决策报表查询指定区间日期数据时,希望可以通过点击按钮( 不在参数面板 )查询到最近的数据,例如:近7天、近14天等等。
如下图所示:
1.2 解决思路
直接将开始和结束的两个日期控件拖入到 body 中,并添加一个按钮控件。
给按钮控件设置 JS 点击事件,点击按钮后,对开始日期控件赋值,将日期传递到数据集的 SQL 语句中,查询对应的数据。
2. 示例
2.1 报表设计
1)新建决策报表,新建数据集 ds1,SQL查询语句如下:
SELECT * FROM 订单 where 1=1
${if(len(starttime)=0,""," and 订购日期>='"+starttime+"'")}
${if(len(endtime)=0,""," and 订购日期<='"+endtime+"'")}
2)如下图设计报表样式:
3)如下图绑定折线图数据:
4)选中开始时间日期控件,控件名称重命名为starttime,设置一个默认的日期控件值,如下图所示:
5)选中结束时间日期控件,控件名称重命名为endtime,设置一个默认的日期控件值,如下图所示:
6)以近七天按钮为例,添加 JS 点击事件,近14天按钮同理设置,只需要改下定义开始时间的公式即可。
JS 代码如下:
var K1='${=date(2011,6,22)-7}';//定义开始时间
//alert(K1);
_g().getWidgetByName("starttime").setValue(K1);//把K1值赋给开始时间控件
_g().getWidgetByName("starttime").fireEvent("afteredit");//触发开始控件的编辑后事件
2.2 效果预览
1)PC端
保存报表,点击PC端预览,效果如 1.1 节所示。
2)移动端
3. 模板下载
已完成模板可参见:%FR_HOME%\webroot\WEB-INF\reportlets\doc\frm\决策报表按钮查询最近日期的数据.frm
点击下载模板:决策报表按钮查询最近日期的数据.frm
4. 动态获取结束时间
如果想要今天作为结束日期,然后往前推 7 天,这样动态的最近 7 天该如何实现呢?
只需要将上面示例中按钮的点击事件代码替换成:
var mydate = new Date(); //创建日期对象,返回值为当前日期(包含时分秒)
var K1 = new Date();//用来处理前七天的日期
K1.setDate(K1.getDate()-7); //设置日期对象中的“日”,为当前日-7
//alert(K1);
_g().getWidgetByName("starttime").setValue(K1);//把K1值赋给开始时间控件
_g().getWidgetByName("starttime").fireEvent("afteredit");
_g().getWidgetByName("endtime").setValue(mydate);//把K1值赋给结束时间控件
_g().getWidgetByName("endtime").fireEvent("afteredit");
//触发开始控件的编辑后事件