本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。

示例说明
       在组合分析的参数后面添加【查询】、【导出】按钮,并且对参数的【开始日期】、【结束日期】进行两参数之间的天数是否在一年以内。该功能可以通过宏实现。       

        效如下图:
       
 前题:
       去掉报表【切换参数后自动刷新报表】的选项,如下图:

       
 
设置方法

  1. 在资源定制节点下,创建一张组合分析。
  2. 选中组合分析,右键选择 编辑宏 进入报表宏界面。
  3. 在报表宏界面新建客户端模块。在弹出的新建模块对话框中选择对象为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 = "&nbsp;&nbsp;";
        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;
}
 
 

关键对象总结