温馨提示
本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。
示例说明
在项目中有时需要通过报表中的URL打开显示对应的内容,如示例,通过点击“c”打开URL 为 http://www.baidu.com/img/bdlogo.png?1438079054232 内容。如下图:
设置方法
- 在展现定制中,创建一张电子表格分析;
- 在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。
- 在报表宏界面新建服务器端模块,在弹出的新建模块对话框中选择对象为spreadSheetReport;事件为onBeforeOutput;并把下面宏代码复制到代码区域。
- 在报表宏界面新建客户端模块,在弹出的新建模块对话框中选择对象为spreadSheetReport;事件为onRender;并把下面宏代码复制到代码区域。
服务器宏类型
类型 | 对象 | 事件 |
ServerSide | spreadSheetReport | onBeforeOutput |
服务器宏代码
function main(spreadsheetReport) { if (!spreadsheetReport) return spreadsheetReport; var sheet = spreadsheetReport.getSheetByName("Sheet1");//获取sheet名称 var positions = "C2".split(",");//获取点击事件单元 for (var i = 0; i < positions.length; i++) { var position = positions[i].trim(); var expandedPositions = sheet.getExpandedPositions(position); for (var j = 0; j < expandedPositions.length; j++) { var cell = sheet.getCell(expandedPositions[j]); if (true) { addLink(spreadsheetReport, sheet, cell); } } } } //获取指定单元格数据。B2为url,C2为value,D2为nextUrl function addLink(spreadsheetReport, sheet, cell) { sheet.addRuleLink(cell.cellPosition, "jump", [ getCellValue(sheet.getCell('B2')),getCellValue(sheet.getCell('C2')),getCellValue(sheet.getCell('D2'))]); } function getCellValue(cell) { if (!cell) return null; if (typeof cell.length == 'number') { var ret = []; for (var i = 0; i < cell.length; i++) { ret.push(cell[i].value); } return ret; } else { return cell.value; } } function checkValue(v1, v2, op) { if (v1 && typeof v1.length == 'number') { for (var i = 0; i < v1.length; i++) { if (checkValue(v1[i], v2, op)) return true; } return false; } switch (op) { case 'EQUAL': return (v1 == v2) || (v2.match(/^\d+(\.\d+)?$/) && v1 == parseFloat(v2)); case 'GREATER': return v1 > parseFloat(v2); case 'LESS': return v1 < parseFloat(v2); case 'INCLUDE': return v1.indexOf(v2) >= 0; case 'PREFIX': return v1.indexOf(v2) == 0; case 'SUFFIX': return v1.indexOf(v2) == (v1.length - v2.length); } }
客户端宏类型
类型 | 对象 | 事件 |
ClientSide | spreadSheetReport | onLinkClick |
客户端宏代码
function paramToString(v) { return v == null ? null: v.toString(); } function main(spreadsheetReport, ruleName, params) { if (ruleName != "jump") { return; } //根据服务器模块的顺序获取内容 var url = paramToString(params[0]); var value = paramToString(params[1]); var nextUrl = paramToString(params[2]); switch (url) { case "goBack": goBack(); break; case "jumpTo": jumpTo(value); break; case "goImage": goImage(value, nextUrl ); break; case "goShengchan": goShengchan(value); break; default: } } /* 返回到前一页面 */ var goBack = function() { window.history.back(); }; /* 跳转到其他报表 */ var jumpTo = function(field_cv) { if (!util.trim(field_cv)) { return; } var param = getParamInfo(field_cv); if (!param) { alert("没有查到相关批准文号信息。"); return; } var url = 'jumpToTabbedPage.jsp?param=' + param; url = encodeURI(url); // 生成用来提交请求的form var form = document.getElementById("__openReportURLForm"); if (!form) { form = document.createElement("FORM"); document.body.appendChild(form); } form.innerHTML = ""; form.style.display = "none"; form.id = "__openReportURLForm"; form.action = url; form.method = 'POST'; form.target = "_blank"; form.submit(); }; /* 生成需要传递的参数信息 */ var getParamInfo = function(RELATED_PJ_NO) { var dsId = "DS.bjj_ds"; var sql = ["select ID, RELATED_PJ_NO from BJJ_DRUG_BASE_INFO where APPROVAL_CODE = ", "'", RELATED_PJ_NO, "'"].join(""); var ret = util.remoteInvoke("TabbedReportService", "getSQLResult", [dsId, sql]); if (! (ret && ret.succeeded)) { modalWindow.showServerError(ret); return; } var drugInfo = ret.result.data; if (!drugInfo.length) { return false; } var id = drugInfo[0][0].value; // 当"相关批件号"值为空时,传递一个NONE参数过去 var pj_no = drugInfo[0][1].value; if (!util.trim(pj_no)) { pj_no = "NONE"; } var param = { ID: { realValue: id, dispValue: id }, RELATED_PJ_NO: { realValue: pj_no, dispValue: pj_no } }; var retVal = lang.toJSONString(param); return retVal; }; /* 跳转到图片文件 */ var goImage = function(field_cv, url ) { if (!util.trim(field_cv)) { return; } if (url == '') { alert("没有相关电子文档"); return; } url = encodeURI(url); // 生成用来提交请求的form var form = document.getElementById("__openReportURLForm"); if (!form) { form = document.createElement("FORM"); document.body.appendChild(form); } form.innerHTML = ""; form.style.display = "none"; form.id = "__openReportURLForm"; form.action = url; form.method = 'POST'; form.target = "_blank"; form.submit(); }; /* 跳转到图片文件 */ var goShengchan = function(field_cv) { if (!util.trim(field_cv)) { return; } //var nextTd = link.nextSibling; var url = "http://10.1.5.81:8081/upload/" + util.trim(field_cv); url = encodeURI(url); // 生成用来提交请求的form var form = document.getElementById("__openReportURLForm"); if (!form) { form = document.createElement("FORM"); document.body.appendChild(form); } form.innerHTML = ""; form.style.display = "none"; form.id = "__openReportURLForm"; form.action = url; form.method = 'POST'; form.target = "_blank"; form.submit(); };
评论
金星 发表:
如果是单元格扩展的话,要把getCells( )改成getRelativeCells( ),不然每次取的数据都是第一行??