示例说明
在即席查询的参数后面添加【查询】、【导出】按钮,并且对参数的【起始时间】、【结束时间】进行两参数之间的天数是否在一年以内。该功能可以通过宏实现。
效果如下图:
前提:
不勾选报表参数中【切换参数后自动刷新报表】的选项,如下图:
设置方法
- 在“分析展现”节点下,创建一张即席查询。
- 选中即席查询,右键选择 编辑宏 进入报表宏界面。
- 在报表宏界面新建客户端模块。在弹出的新建模块对话框中选择对象为simpleReport、事件为onRender、并把下面宏代码复制到代码区域;
宏类型
类型 | 对象 | 事件 |
ClientSide | simpleReport | onRenderTable |
宏代码
代码块 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
function main(simpleReport, simpleReportContext) {
if (simpleReport.__queryBtn) return;
if (!simpleReport.paramPanelObj) return;
//两个参数的名称
var beginTimeName = '起始时间';
var endTimeName = '结束时间';
addBtn(simpleReport, beginTimeName, endTimeName);
}
//添加按钮在参数之后
function addBtn(simpleReport, beginTimeName, endTimeName) {
var paramPanelObj = simpleReport.paramPanelObj; //读取参数面板
var beginDateParam = paramPanelObj.findParamByName(beginTimeName); //读参数开始日期
var endDateParam = paramPanelObj.findParamByName(endTimeName); //读参数结束日期
var beginDateParamId = beginDateParam && beginDateParam.id; //读参数开始日期ID
var endDateParamId = endDateParam && endDateParam.id; //读参数结束日期ID
bindRefreshCheck(simpleReport, beginDateParamId, endDateParamId, paramPanelObj);
try {
//获取参数面板表格
var paramTable = simpleReport.paramPanelObj.layoutTable;
var i, cell, lastCell;
//在最后一个参数后面插入一个新的节点元素
for (i = 0; i < paramTable.rows.length; i++) {
cell = paramTable.rows[i].insertCell(-1);
if (i == paramTable.rows.length - 1) lastCell = cell;
}
//创建按钮
var queryBtn = document.createElement("button");
queryBtn.innerText = " 查询 "; //如需要修必按钮风格,请自行实现
queryBtn.className = "query-button";
queryBtn.style.width = "70px";
queryBtn.style.height = "25px";
queryBtn.style.marginLeft = "30px";
lastCell.appendChild(queryBtn);
simpleReport.__queryBtn = queryBtn;
//给按钮添加事件
simpleReport.addListener(lastCell, "click",
function() {
simpleReport.refreshData();
},
this);
var span = document.createElement("span");
lastCell.appendChild(span);
span.innerHTML = " ";
var exportBtn = document.createElement("button");
exportBtn.innerText = " 导出 "; //如需要修必按钮风格,请自行实现
exportBtn.className = "query-button";
exportBtn.style.width = "70px";
exportBtn.style.height = "25px";
lastCell.appendChild(exportBtn);
//给按钮添加事件
simpleReport.addListener(exportBtn, "click",
function() {
//导出Excel方法
simpleReport.doExportMenuCloseUp("EXCEL2007");
},
this);
} catch (e) {
alert('更新查询、导出按钮位置失败:' + e.message);
}
}
//对日期的开始日期参数与结束日期参数之间的判断
function bindRefreshCheck(simpleReport, beginDateParamId, endDateParamId, paramPanelObj) {
if (!beginDateParamId || !endDateParamId) {
return;
}
simpleReport._old_refreshData = simpleReport.refreshData;
simpleReport.refreshData = function(refresh, noExecuteQuery, executeInMem) {
if (!checkDateParamValue(beginDateParamId, endDateParamId, paramPanelObj)) {
return;
}
simpleReport._old_refreshData(refresh, noExecuteQuery, executeInMem);
};
}
function checkDateParamValue(beginDateParamId, endDateParamId, paramPanelObj) {
var beginDateValue = paramPanelObj.getParamValue(beginDateParamId);
var endDateValue = paramPanelObj.getParamValue(endDateParamId);
if (!isValidDateParamValue(beginDateValue, endDateValue)) {
alert('时间跨度不能超过一年!');
return false;
}
return true;
}
function isValidDateParamValue(beginDateValue, endDateValue) {
if (!beginDateValue || !endDateValue) {
return false;
}
var beginTime = Date.parse(beginDateValue.replace(/-/g, '/'));
var endTime = Date.parse(endDateValue.replace(/-/g, '/'));
if (isNaN(beginTime) || isNaN(endTime) || beginTime >= endTime) {
return false;
}
var twoDaySeconds = 365 * 24 * 3600; //一年以内
if (((endTime - beginTime) / 1000) > twoDaySeconds) { // 时间跨度是否在一年以内
return false;
}
return true;
} |
关键对象总结
- 设置单元格显示值:simpleReport.grid.setCellText(int,int,text)
资源下载
资源:migrate.xml
borderColor | #BBBBBB |
---|---|
bgColor | #F0F0F0 |
borderWidth | 1 |
borderStyle | solid |