温馨提示
本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如报表使用冻结,或多个宏代码冲突等),需根据实际需求开发代码。
示例说明
在组合分析的参数后面添加【查询】、【导出】按钮,并且对参数的【开始日期】、【结束日期】进行两参数之间的天数是否在一年以内。该功能可以通过宏实现。
效如下图:
前题:
去掉报表【切换参数后自动刷新报表】的选项,如下图:
设置方法
- 在资源定制节点下,创建一张组合分析。
- 选中组合分析,右键选择 编辑宏 进入报表宏界面。
- 在报表宏界面新建客户端模块。在弹出的新建模块对话框中选择对象为simpleReport、事件为onRender、并把下面宏代码复制到代码区域;
宏类型
类型 | 对象 | 事件 |
ClientSide | simpleReport | onRender |
宏代码
function main(simpleReport, simpleReportContext) { if (simpleReport.__queryBtn) return; if (!simpleReport.paramPanelObj) return; //添加的宏代码 var paramPanelObj = simpleReport.paramPanelObj; //读取参数面板 var beginDateParam = paramPanelObj.findParamByName('开始日期'); //读参数开始日期 var endDateParam = paramPanelObj.findParamByName('结束日期'); //读参数结束日期 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.value = " 查询 "; //如需要修必按钮风格,请自行实现 queryBtn.innerHTML = "查询"; queryBtn.className = "query-button"; lastCell.appendChild(queryBtn); simpleReport.__queryBtn = queryBtn; //给按钮添加事件 simpleReport.addListener(lastCell, "click", function() { debugger; simpleReport.doRefresh(); }, this); var span = document.createElement("span"); lastCell.appendChild(span); span.innerHTML = " "; var exportBtn = document.createElement("button"); exportBtn.value = " 导出 "; //如需要修必按钮风格,请自行实现 exportBtn.innerHTML = "导出"; exportBtn.className = "query-button"; lastCell.appendChild(exportBtn); //给按钮添加事件 simpleReport.addListener(exportBtn, "click", function() { //导出Excel方法 simpleReport.doExportMenuCloseUp("EXCEL") }, this); } catch(e) { alert('更新查询、导出按钮位置失败:' + e.message); } } //对日期的开始日期参数与结束日期参数之间的判断 function bindRefreshCheck(simpleReport, beginDateParamId, endDateParamId, paramPanelObj) { if (!beginDateParamId || !endDateParamId) { return; } // simpleReport._old_Refresh = simpleReport.doRefresh; simpleReport.doRefresh = function() { if (!checkDateParamValue(beginDateParamId, endDateParamId, paramPanelObj)) { return; } simpleReport._old_Refresh(); }; } 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 beginDate = new Date(beginTime); // var endDate = new Date(endTime); var twoDaySeconds = 365 * 24 * 3600; //一年以内 if (((endTime - beginTime) / 1000) > twoDaySeconds) { // 时间跨度是否在一年以内 return false; } return true; }
关键对象总结
- 设置单元格显示值:simpleReport.grid.setCellText(int,int,text)