麦粉社区
>
帖子详情

想给弹窗传递参数

电子表格软件 发表于 2026-5-21 21:01
发表于 2026-5-21 21:01:49

 


 


 


// 参数列后添加多个按钮(导入 + 导出)
function addButtons(spreadsheetReport){
    var paramTable = spreadsheetReport.paramPanelObj.layoutTable;
    var i, j, cell, lastCell;


    for (i = 0; i < paramTable.rows.length; i++){
        cell = paramTable.rows.insertCell(-1);
        var tr = paramTable.rows;
        if (i == paramTable.rows.length - 1){
            for (j = tr.cells.length - 1; j >= 0; j--){
                var td = tr.cells[j];
                if(td.innerHTML === ""){
                    lastCell = td;
                } else {
                    break;
                }
            }
        }
    }


    if(!spreadsheetReport._newBtn1){
        
        // 按钮1:弹窗 → E1单元格 作为ID参数传递
        var outportButton = document.createElement("button");
        outportButton.type = "button";
        outportButton.innerText = "弹窗";
        outportButton.title = "弹窗";
        outportButton.className = "queryview-toolbar-button";
        outportButton.style.background = "url(img/button/button/bgicon_add.png) no-repeat left center";
        outportButton.style.border = "1px solid #A1ACB9";
        outportButton.style.width = "90px";
        outportButton.style.height = "23px";
        outportButton.style.padding = "2px 0 0 0";
        outportButton.style.margin = "0 9px 0 10px";
        
        var newBtn1 = lastCell.appendChild(outportButton);
        // ===================== 核心:E1 传参给弹窗 =====================
        spreadsheetReport.addListener(outportButton, "click", function(){
            try {
                // ✅ 正确:获取 E1 单元格
                var cellE1 = spreadsheetReport.getCell("E1");
                var val_E1 = cellE1.textContent ? cellE1.textContent.trim() : "";


                // 构造参数:把 E1 的值 传给弹窗的 ID 参数
                var paramsInfo = [];
                paramsInfo.push({
                    name: "id-1776337685173",
                    alias: "id",
                    value: val_E1,
                    displayValue: val_E1
                });


                // 编码 + 拼接URL
                var paramJson = lang.toJSONString(paramsInfo);
                var encParams = encodeURIComponent(paramJson);


                var url = "https://decsmartbi.cloud.smartbi.com.cn/smartbi/vision/openresource.jsp"
                        + "?resid=I0bb87da4c7fab000"
                        + "¶msInfo=" + encParams
                        + "&refresh=true";


                // 打开弹窗
                openInDialog(url);
            } catch (e) {
                alert("参数传递失败:" + e.message);
            }
        }, spreadsheetReport);
        
        spreadsheetReport._newBtn1 = newBtn1;
    }
}
// 声明回调函数 刷新页面数据
function dialogCallback(ret) {



     window.sp.doRefresh();



 }


// ===================== 弹窗代码 =====================
function openInDialog(url) {
    try {
        var dialogFactory = jsloader.resolve("freequery.dialog.dialogFactory");
        var dialogConfig = {
            title: "弹窗内容",
            size: dialogFactory.size.LARGE,
            dialogType: "modeless",
            fullName: "freequery.dialog.BaseDialogEx",
            closeBeforeCallback: true,
            width: 500,
            height: 400
        };
        dialogFactory.showDialog(dialogConfig, {},dialogCallback); //  添加回调函数
        setTimeout(function() {
            var elem = window.dialog.dialogBody;
            var btnOK = window.dialog.btnOK;
            var btnCancel = window.dialog.btnCancel;


            if (btnOK) btnOK.style.display = 'none';
            if (btnCancel) {
                btnCancel.value = "关闭";
                btnCancel.innerHTML = "关闭";
                btnCancel.textContent = "关闭";
            }


            if (elem) elem.innerHTML = '';
        }, 300);
    } catch (error) {
        alert("无法打开对话框: " + error.message);
    }
}


// ===================== 主入口 =====================
function main(spreadsheetReport, isAjaxRefreshCallback){
    addButtons(spreadsheetReport);
    window.sp = spreadsheetReport; // 声明全局变量
}


发表于 2026-5-22 09:30:33
这种最简单的就是用跳转规则来实现,配置好后然后参考跳转规则的代码修改。这种跳转都需要前后端代码配合使用的,没那么简单。
547016a0fb1a3138c8.png

回复

使用道具 举报

发表于 2026-5-22 11:11:20
本帖最后由 橘猫今天喝水了吗 于 2026-5-22 11:18 编辑

你已经尝试在url中传递参数了。


我最开始想法跟你几乎一模一样,但是对内部的代码不太懂,也不知道怎么才能正确传参,经搜索资料和测试,得出以下结果。


参考资料:JS获取URL中参数值的4种方法_js 获取url参数-CSDN博客


通过计划任务将电子表格以邮件正文发送 - Smartbi Insight V11帮助中心 -


首先,需在宏代码中获取到你需要传递的值,然后将它拼接到url中


 


var id_value = 1;


var url = "https://decsmartbi.cloud.smartbi.com.cn/smartbi/vision/openresource.jsp"
                    + "?resid=I0bb87da4c7fab000"
                    + "&param1="+id_value
                    + "&refresh=true";


          


然后在弹窗的目标电子表格创建宏,类型是在打开报表时,以免参数修改触发自动刷新造成死循环。


宏代码如下:


 



function main(spreadsheetReport, isAjaxRefreshCallback) {


 var param_id_id = "数据集.fxxxasdasdq2eqwe.ID";
    const url = new URL(window.location.href);
    // console.log(url);
    const value= url.searchParams.get("param1");
    //console.log(value);
    spreadsheetReport.setParamValue(param_id_id, value, value)
}


 


 


 


补充:


var param_id_id = "数据集.fxxxasdasdq2eqwe.ID";


这个参数id,是通过在数据集或者其他位置中点击对应参数,查看属性得到的,一般是


"OutputParameter.资源id.参数名称" // 输出参数


或者


BusinessViewCustomParameter.资源id.参数名称。//数据集私有参数


或者


AUGMENTED_DATASET_PARAMETER.资源id.参数id。// 数据模型内部参数


 


如果是数据模型内部参数,可能看不到参数id,那么可以通过以下方法得到。


 


在目标资源创建宏,类型为“参数变化时”


 


function main(spreadsheetReport, param) {
        console.log(param.id);
}


点击对应参数,就能在后台得到参数id。


回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

5回帖数 0关注人数 466浏览人数
最后回复于:2026-5-22 11:11

社区

指南

AI

搜索

快速回复 返回顶部 返回列表