示例说明
灵活分析报表在设置跳转规则向导,下钻到另一张电子表格报表时,默认都是在新窗口中打开,无法实现在覆盖式下钻(即在当前窗口打开)的效果。如果希望跳转目标报表在当前窗口打开,则需要通过下述宏代码来实现。源报表见下图-1所示。
设置方法
- 在 定制 -> 展现定制 界面中,创建一张灵活分析报表。
- 切换到 定制 ->宏管理 页面,双击此灵活分析进入报表宏界面。在 资源定制 界面中,创建一张灵活分析报表。
- 选中灵活分析,右键选择 编辑宏 进入报表宏界面。
- 在报表宏界面新建跳转规则向导,按照正常步骤设置跳转规则的源、目标,让系统自动生成客户端模块代码。然后手动修改所生成的客户端模块代码。
- ,按照正常步骤设置跳转规则的源、目标,让系统自动生成客户端模块代码。然后手动修改所生成的客户端模块代码。
宏类型
类型 | 对象 | 事件 |
---|---|---|
ClientSide | simpleReport | onRenderTable |
宏代码
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
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;
}; |
提示 |
---|
主要修改内容:
|
跳转如何返回
在从源报表跳转到目标报表后,如何返回到第一张报表呢?我们可以在目标报表中添加一个“返回”按钮,点击后回到源报表。目标报表见下图-2所示。
设置方法
- 切换到 定制 ->宏管理 页面,双击目标电子表格进入报表宏界面。
- 在报表宏界面新建客户端模块,在新建模块对话框上,选择 spreadsheetReport 对象,onRender 事件,然后将如下代码粘贴到代码编辑区。
宏类型
类型 | 对象 | 事件 |
---|---|---|
ClientSide | spreadsheetReport | onRender |
宏代码
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
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) {} }; |
提示 |
---|
代码说明:
|