页面树结构
转至元数据结尾
转至元数据起始

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

示例说明
在灵活分析中对文本框参数的输入值进行限制,如下图:A 参数值不能小于12,B参数值不能小于A。


设置方法

  1. 在资源定制中,创建一张灵活分析(带两个文本输入参数A和B)。
  2. 选中灵活分析,右键选择 编辑宏 进入报表宏界面。
  3. 在报表宏界面新建客户端模块,在弹出的新建模块对话框中选择对象为simpleReport;事件为onParamValueChanged;并把下面宏代码复制到代码区域。

宏类型

类型

对象

事件

ClientSide

simpleReport

onParamValueChanged

宏代码

function main(simpleReport, simpleReportContext) {
    // 定义参数名称 
    var startParamName = "A";
    var endParamName = "B";
    // 定义参数值的条件函数 
    function checkStartParam(val) {
        return parseInt(val) > 12;
    }
    function checkEndParam(startVal, endVal) {
        return parseInt(endVal) > parseInt(startVal);
    }
    // 获得参数控件 
    var startParamInput = getParamComponentByName(simpleReport, startParamName);
    if (!startParamInput) {
        alert("找不到参数:" + startParamName);
        return;
    }
    var endParamInput = getParamComponentByName(simpleReport, endParamName);
    if (!endParamInput) {
        alert("找不到参数:" + endParamName);
        return;
    }
    startParamInput.__oldValue = startParamInput.value;
    endParamInput.__oldValue = endParamInput.value;
    // 绑定事件检查非法字符输入 
    startParamInput.onkeydown = checkKeydown;
    endParamInput.onkeydown = checkKeydown;
    // 绑定事件检查条件函数 
    if (domutils.isIE()) {
        startParamInput.onpropertychange = function() {
            if (checkStartParam(startParamInput.value)) {
                startParamInput.__oldValue = startParamInput.value;
            } else {
                alert("参数" + startParamName + "不符合条件,输入值应大于12");
                startParamInput.value = startParamInput.__oldValue;
            }
        };
        endParamInput.onpropertychange = function() {
            if (checkEndParam(startParamInput.value, endParamInput.value)) {
                endParamInput.__oldValue = endParamInput.value;
            } else {
                alert("参数" + endParamName + "不符合条件,输入值应大于参数A的值");
                endParamInput.value = endParamInput.__oldValue;
            }
        };
    } else {
        startParamInput.onblur = function() {
            if (checkStartParam(startParamInput.value)) {
                startParamInput.__oldValue = startParamInput.value;
            } else {
                alert("参数" + startParamName + "不符合条件,输入值应大于12");
                startParamInput.value = startParamInput.__oldValue;
            }
        };
        endParamInput.onblur = function() {
            if (checkEndParam(startParamInput.value, endParamInput.value)) {
                endParamInput.__oldValue = endParamInput.value;
            } else {
                alert("参数" + endParamName + "不符合条件,输入值应大于参数A的值");
                endParamInput.value = endParamInput.__oldValue;
            }
        };
    }
}
// 检查非法字符 
function checkKeydown() {
    var ev = window.event;
    if (!isValidKey(ev.keyCode)) {
        ev.returnValue = false;
        return;
    }
}
// 判断哪些字符是有效的 
function isValidKey(keyCode) {
    //return 48 / 0 / <=keyCode && keyCode <= 57 / 9 / ||keyCode == 46 / Delete / ||keyCode == 8 / Backspace / ||keyCode == 9 / Tab / ||keyCode == 37 / Left / ||k//eyCode == 39 / Right / ;
    return (keyCode >= 48 && keyCode <= 57) || keyCode == 46 || keyCode == 8 || keyCode == 9 || keyCode == 37 || keyCode == 39;
}
// 通过参数名获得参数控件 
function getParamComponentByName(simpleReport, paramName) {
    var paramIndex = getParamIndexByName(simpleReport, paramName);
    if (paramIndex < 0) {
        return null;
    }
    return simpleReport.paramPanelObj.paramObjList[paramIndex];
}
// 通过参数名获得参数序号 
function getParamIndexByName(simpleReport, paramName) {
    for (var i = 0; i < simpleReport.params.length; i++) {
        with(simpleReport.params[i]) {
            if (name == paramName) {
                return i;
            }
            if (alias == paramName) {
                return i;
            }
        }
    }
    reutrn - 1;
}

关键对象总结

  • 通过参数名获取参数对象:getParamComponentByName(simpleReport, paramName)
  • 通过参数名获取参数序号:getParamIndexByName(simpleReport, paramName)

     资源文件:migrate.xml

  • 无标签