示例说明
在某特定情况下,需要实现在报表跳转时,需要在指定大小的弹出窗口中打开目标页面。效果图:
设置方法
- 在【资源定制】创建案例类似的页面。
- 选中页面,右键选择 编辑宏 进入报表宏界面,右击【编辑宏】->创建【跳转规则向导】。
- 在双点打开已创建的跳转规则的action,在该界面中进行修改【跳转规则向导】生成宏代码,如下图:
宏类型
类型 | 对象 | 事件 |
ClientSide | simpleReport | onRenderTable |
宏代码
//@smartbi.utility_macro:system.utils.JMClientUtils var jmUtils = use("system.utils.JMClientUtils"); var domutils = jsloader.resolve("freequery.lang.domutils"); function main(chartView, point, mouseEvent) { if (!chartView || !point) return; var aotuCmd = false; chartView.addMenuItem("新弹出窗口", callback, aotuCmd); } //点击跳转规则菜单触发的回调函数 function callback(chartView, point) { var simpleReport = chartView.getContext(); var simpleReportContext = simpleReport.getContext(); var pageContext = page.getContext(); simpleReport.writeParamsToContext(); var targetResId = "I2c91918a1cc607a1014d1d8f10ce0304"; var newReport = false; //定义参数对象列表。 var paramsInfo = new Array(); //设置或收集参数值。 var pObj = simpleReportContext.get("产品目录参数"); if (pObj) { var paramInfo = createParamInfo("产品目标编号", pObj.value, pObj.displayValue); paramsInfo.push(paramInfo); } var pObj = point.getCurrentPointValueObj("产品名称"); if (pObj) { var paramInfo = createParamInfo("产品名称参数", pObj.value, pObj.displayValue); paramsInfo.push(paramInfo); } /* 去掉原来的打开目录衣面的方式 //新窗口打开资源 //@smartbi.openOtherPage:"I2c91918a1cc607a1014d1d8f10ce0304" if (domutils.isIOS() || domutils.isAndroid()) showInternalFrame(targetResId, paramsInfo); else page.openResourceInNewWindow(targetResId, paramsInfo); */ //修改为弹出窗口打开目标页面 var openUrls = "openresource.jsp?resid=I2c91918a1cc607a1014d1d8f10ce0304" + "&p" + "aramsInfo=" + lang.toJSONString(paramsInfo); if (!domutils.isIE()) //for chrome window.open(openUrls, "newwindow", "height=400, width=600, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no"); }else{ window.showModalDialog(openUrls, null, "dialogWidth=600px;dialogHeight=400px;resizable=yes"); } //window.showModalDialog(openUrls, null, "dialogWidth=600px;dialogHeight=400px;resizable=yes"); } //创建参数信息 function createParamInfo(name, value, disValue, mergeType) { var paramInfo = new Object(); paramInfo.name = name; paramInfo.value = value; paramInfo.displayValue = disValue; if (mergeType) paramInfo.groupType = mergeType; return paramInfo; }
注意事项:相关报表中的参数名称必须是英文,参数值也必须是英文或数字。