页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

示例说明

灵活分析报表在设置跳转规则向导,下钻到另一张电子表格报表时,默认都是在新窗口中打开,无法实现在覆盖式下钻(即在当前窗口打开)的效果。如果希望跳转目标报表在当前窗口打开,则需要通过下述宏代码来实现。源报表见下图-1所示。

Image Removed

 Image Added

设置方法

  1. 在 定制 -> 展现定制 界面中,创建一张灵活分析报表。
  2. 切换到 定制 ->宏管理 页面,双击此灵活分析进入报表宏界面。在 资源定制 界面中,创建一张灵活分析报表。
  3. 选中灵活分析,右键选择 编辑宏 进入报表宏界面。
  4. 在报表宏界面新建跳转规则向导,按照正常步骤设置跳转规则的源、目标,让系统自动生成客户端模块代码。然后手动修改所生成的客户端模块代码。 
Image Removed
  1. ,按照正常步骤设置跳转规则的源、目标,让系统自动生成客户端模块代码。然后手动修改所生成的客户端模块代码。

宏类型

类型

对象

事件

ClientSide

simpleReport

onRenderTable


宏代码

代码块
languagejs
firstline1
linenumberstrue

function main(simpleReport, simpleReportContext) {
    simpleReport.addColumnLinkByName("City0", me); //字段别名:顾客所在城市
};
 
var menuItem = {
    alias: "覆盖式下钻到电子表格",
    callback: function(simpleReport, simpleReportContext) {
        simpleReport.writeParamsToContext();
        var paramsInfo = new Array();
        //获取当前单元格所在行的顾客所在城市字段的值
        var realValue = simpleReport.getCurrentFieldRealValue("顾客所在城市");
        var dispValue = simpleReport.getCurrentFieldValue("顾客所在城市");
        var paramInfo = createParamInfo("城市", realValue, dispValue);
        paramsInfo.push(paramInfo);
        //在新窗口打开资源
        /*        simpleReportContext.openURL("openresource.jsp?resid=I40282b811f09cb49014ca0f64b2303fd&showtoolbar=true&refresh=true", [{
            name: "paramsInfo",
            value: lang.toJSONString(paramsInfo)
        }]);*/
 
        // 在当前窗口覆盖式打开
        //debugger;
        window.iframe_drilldown_to_spreadsheet = 1;
        var frameId = "iframe_drilldown_to_spreadsheet";
        var tempIFrame;
        try { // for I.E.
            tempIFrame = document.createElement('<iframe name="iframe_drilldown_to_spreadsheet">');
        } catch(ex) { //for other browsers, an exception will be thrown
            tempIFrame = document.createElement('iframe');
        }
        tempIFrame.style.position = "absolute";
        //tempIFrame.style.width = simpleReport.parent.style.pixelWidth;
        //tempIFrame.style.height = simpleReport.parent.style.pixelHeight;
  
  tempIFrame.style.border = "none";
  
  tempIFrame.style.width = "1040px";
        tempIFrame.style.height = "1040px";
        tempIFrame.style.top = "0px";
        tempIFrame.style.left = "0px";
        tempIFrame.style.zIndex = "999999";
        tempIFrame.setAttribute("class", frameId);
        tempIFrame.setAttribute("id", frameId);
        tempIFrame.setAttribute("name", frameId);
        tempIFrame.setAttribute("scrolling", "no");
        simpleReport.parent.appendChild(tempIFrame);
        simpleReportContext.openURL("openresource.jsp?resid=I40282b811f09cb49014ca0f64b2303fd&showtoolbar=true&refresh=true", [{
            name: "paramsInfo",
            value: lang.toJSONString(paramsInfo)
        }], frameId);
    }
};
var me = menuItem;
 
//创建参数信息
function createParamInfo(name, value, disValue) {
    var paramInfo = new Object();
    paramInfo.name = name;
    paramInfo.value = value;
    paramInfo.displayValue = disValue;
    return paramInfo;
};
提示

主要修改内容:

  • 将原来打开目标报表的代码注视掉://simpleReportContext.openURL("openresource.jsp?resid=I40282b811f09cb49014ca0f64b2303fd&showtoolbar......; 换成其下“在当前窗口覆盖式打开”的代码。
  • 覆盖式打开的原理是在源报表的窗口中创建一个IFrame,覆盖整个灵活分析报表的窗口,打开的目标报表就显示在该IFrame之中。

  

跳转如何返回

在从源报表跳转到目标报表后,如何返回到第一张报表呢?我们可以在目标报表中添加一个“返回”按钮,点击后回到源报表。目标报表见下图-2所示。

 

设置方法

  1. 切换到 定制 ->宏管理 页面,双击目标电子表格进入报表宏界面。
  2. 在报表宏界面新建客户端模块,在新建模块对话框上,选择 spreadsheetReport 对象,onRender 事件,然后将如下代码粘贴到代码编辑区。


宏类型

类型

对象

事件

ClientSide

spreadsheetReport

onRender


宏代码

代码块
languagejs
firstline1
linenumberstrue
function main(spreadsheetReport) {
    if (!spreadsheetReport._newBtn) { // 不要重复添加按钮
        //debugger;
        var input = document.createElement("INPUT");
        input.type = "button";
        input.value = "返回";
        input.title = "返回";
        input.accessKey = "N";
        input.style.width = "55";
        input.style.height = "20";
        var newBtn = spreadsheetReport.elem_btnPrint.parentNode.appendChild(input);
        spreadsheetReport.addListener(newBtn, "click", doNewButtonClick, spreadsheetReport);
        spreadsheetReport._newBtn = newBtn;
    }
};

// 新添加按钮Click事件处理函数
function doNewButtonClick(e) {
    //debugger;
    var spreadsheetReport = this;
    try {
        var tempIFrame;
        var obj = window;
        var maxLevel = 10;
        while (obj && !obj.iframe_drilldown_to_spreadsheet && (--maxLevel > 0)) {
            obj = obj.parent;
        }
        if (obj) {
            tempIFrame = obj.document.getElementById("iframe_drilldown_to_spreadsheet");
        }
        if (tempIFrame) {
            // 如果找到外层打开当前电子表格的IFrame对象则销毁
            spreadsheetReport.destroy();
            domutils.destroyNode(tempIFrame);
        }
    } catch(e) {}
};
提示

代码说明:

  • 首先在工具栏上添加一个“返回”按钮:spreadsheetReport.elem_btnPrint.parentNode.appendChild(input);
  • 用户点击返回按钮时,先关闭并销毁当前报表,然后再销毁承载该报表的外层IFrame容器。这样就相当于回到了源报表。