九月下旬更新速递丨 AI赋能、技术实战与智能探索

金秋九月,下旬更新携AI发布会回放、丰富实战案例与进阶开发资源强势登场!助您深化技术理解,加速智能应用落地!

重点推荐Smartbi AIChat V4发布会圆满落幕!发布会精彩内容已完整上架,随点随看,深度回顾!共同步入智能新纪元!点击观看Smartbi AIChat V4发布会全程回放

麦学堂同步上架,加速学习

【Smartbi AIChat全新升级发布会根据不同篇章提炼上架,方便您按需定位,快速直达重点环节,高效吸收核心内容!

十分钟完整体验AIchat→ 只要10分钟时间,即可使用自己的本地数据快速体验AIChat所有功能。

一、任务持续上线

场景实战系列任务:数据处理,赢取278麦豆!通过实战任务巩固技能,真正掌握数据驱动的企业决策全流程

【BI知识闯关】数据回写填报太头疼?方案请收好!》→破解填报难题,提升数据处理效率。

【AI每日一学知识巩固】为什么Python 是目前人工智能领域最常用的编程语言》→深入解析Python在AI领域的优势,巩固编程基础。

二、实战技巧分享

数据回写填报太头疼?方案请收好!》→聚焦六大常见回写场景,拆解每类场景的实现思路,带您清晰掌握 Smartbi 数据回写的实操逻辑。

、开发技能突破

自定义计划任务案例 进一步了解自定义计划任务,从而提升自定义任务的开发效率和能力。

四、AI每日一学

【AI每日一学】为什么Python 是目前人工智能领域最常用的编程语言》→探讨Python为何能成为人工智能领域最常用的编程语言。

【AI每日一学】简单总结一下AI Agent的五个发展阶段从简单的指令响应到复杂的多智能体协作,AI Agent正逐步向着更拟人、更通用的方向演进。

五、全新素材上线

科技指标卡底座(二)→科技感视觉主题,深色科技风跃动,光线流动引爆焦点!

按需管控:业务人员导出最大行数设置在“导出规则”中,“导出动作”增加“部分导出”的选项

屏蔽“我的工作区”根据角色控制,屏蔽产品中“我的工作区”目录的功能,同时,对于该模块下的资源进行“保存”或者“另存为”,以及“移动到”时,对应的弹出框都不会显示“我的工作区”目录。

数据预警:异常数据可以落地到知识库在“预警推送”中,“推送渠道”增加“数据库”的选项,可以把异常数据存储到“知识库”的表中。

同一账号不能同时登录同一账号不能同时登录,后登录踢出先登录。


六、行业方案上线

汽车制造-财务数字化分析决策平台方案“核账型财务”向“经营型财务”升级

汽车制造-媒介平台ROI实时分析需求解决方案在激烈的市场竞争中,汽车行业对广告投放精准性要求极高,打破决策延时,敏捷响应时长,解决资源浪费,提升广告投放ROI!

为进一步提升认证服务的质量与体验,我们对认证业务进行全面优化升级。更多详情请看→Smartbi认证考试优化升级公告


麦粉社区
>
帖子详情

填报表批量删除的实现

干货分享 发表于 2025-7-1 11:16
发表于 2025-7-1 11:16:34
本帖最后由 周伟斌 于 2025-7-1 11:37 编辑

有没有人对填报表批量删除感兴趣的

发表于 2025-7-1 11:35:32
本帖最后由 周伟斌 于 2025-7-1 11:36 编辑

实现方式如下:


 


1、添加用于操作的列:


PS:历史填报表增加列时,需调整回写规则



2、设置选择框左父格为ID的单元格


PS:避免合并单元格



3、全局宏设置


也可参照全局宏代码编写私有宏


function main(spreadsheetReport, isAjaxRefreshCallback) {
    //console.log(spreadsheetReport, isAjaxRefreshCallback);
    var allCheckBoxCell; //全选单元格
    var detailCheckbocCell; //明细选择单元格
    var idCheckbocCell; //明细ID单元格
    var dataSource; //数据源
    var tablename; //表名
    switch (spreadsheetReport.reportId) {
        case 'I2c91808c0192ea75ea751718019323a528e06a7a':
            allCheckBoxCell = "U2";
            detailCheckbocCell = "U3";
            idCheckbocCell = "B3";
            dataSource = "DS.StrongBiPublic";
            tablename = "labor_cost_adjust_import";
            break;
        default:
            return;
    }
    render(spreadsheetReport, allCheckBoxCell, detailCheckbocCell, idCheckbocCell, dataSource, tablename);
}

/**
* 工具栏添加批量删除按钮
* @param spreadsheetReport 填报表对象
* @param allCheckBoxCell 全选单元格
* @param detailCheckbocCell 明细选择单元格
* @param idCheckbocCell 明细ID单元格
* @param dataSource 数据源
* @param tablename 表名
* @returns
*/
function render(spreadsheetReport, allCheckBoxCell, detailCheckbocCell, idCheckbocCell, dataSource, tablename) {
    if (!spreadsheetReport._batchDeleteBtn) {
        var input = document.createElement("button");
        input.className = "button-buttonbar icon-queryview-toolbar-button-normal";
        input.innerText = "批量删除";
        input.style.width = "70px";
        input.style.height = "25px";
        input.style.verticalAlign = 'top';
        input.style.marginLeft = "12px";
        var target = spreadsheetReport.elem_space2.parentNode.nextSibling;
        var newBtn = target.parentNode.insertBefore(input, target);

        spreadsheetReport.addListener(newBtn, "click", function() {
            doNewButtonClick(spreadsheetReport, dataSource, tablename);
        }, spreadsheetReport);

        spreadsheetReport._batchDeleteBtn = newBtn;
    }

    try {

        //增加全选复选框
        var allCheckBox_td = spreadsheetReport.getCell(allCheckBoxCell); //获取全选单元格
        if (allCheckBox_td) {
            var checkboxElement = allCheckBox_td.querySelector('input[type="checkbox"]');

            if (checkboxElement) {
                //console.log('复选框存在1');
                return;
            }
            var _allChceckBtn = document.createElement('input');
            _allChceckBtn.id = 'allCheckBox';
            _allChceckBtn.type = 'checkbox';

            //监听处理全选
            _allChceckBtn.addEventListener('change', function() {
                allCheckChange(spreadsheetReport);
            });

            allCheckBox_td.insertBefore(_allChceckBtn, allCheckBox_td.firstChild);
            spreadsheetReport._allChceckBtn = _allChceckBtn;
        }

        var checkboxCells = spreadsheetReport.getExpandedPositions(detailCheckbocCell); //获checkbox所有单元格
        var idCells = spreadsheetReport.getExpandedPositions(idCheckbocCell); //获ID所有单元格
        spreadsheetReport._allChceckBtns = [];
        for (var i = 0; i < checkboxCells.length; i++) {
            var checkbox_td = spreadsheetReport.getCell(checkboxCells);
            var id_td = spreadsheetReport.getCell(idCells);
            if (checkbox_td && id_td) {
                var id = id_td.innerText; //获取id

                var checkbox = document.createElement('input');
                checkbox.type = 'checkbox';
                checkbox.setAttribute('data_id', id);

                // 将复选框添加到单元格中
                checkbox_td.appendChild(checkbox);
                spreadsheetReport._allChceckBtns.push(checkbox);
            }
        }
    } catch (error) {
        //新增行会报一个Cannot read properties of undefined (reading 'toUpperCase')忽略处理
        alert('批量删除功能异常请联系管理员');
        console.error('发生异常:', error);
    }
}

function allCheckChange(spreadsheetReport) {
    if (spreadsheetReport._allChceckBtns) {
        spreadsheetReport._allChceckBtns.forEach(function(checkbox) {
            checkbox.checked = spreadsheetReport._allChceckBtn.checked;
        });
    }
}

function doNewButtonClick(spreadsheetReport, dataSource, tablename) {
    var del_ids = [];
    spreadsheetReport._allChceckBtns.forEach(function(checkbox) {
        if (checkbox.checked) {
            var id = checkbox.getAttribute('data_id');
            del_ids.push(id);
        }
    });
    if (del_ids.length == 0) {
        alert("请选择要删除的数据!");
        return;
    }
    var modalWindow = jsloader.resolve("freequery.common.modalWindow");
    var flag = confirm("确认删除以下数据吗?\r\n" + JSON.stringify(del_ids));
    if (flag) {
        // 将数组中的字符串格式化为 'x' 格式
        var formattedStrings = del_ids.map(function(str) {
            return "'" + str + "'";
        });

        // 使用逗号连接格式化后的字符串
        var result = formattedStrings.join(',');

        var util = jsloader.resolve("freequery.common.util");
        var sql = "delete from " + tablename + " where id in (" + result + ")";
        var ret = util.remoteInvoke("DataSourceService", "executeUpdate", [dataSource, sql]); //执行删除数据的sql
        if (ret.succeeded) {
            alert("删除成功");
        } else {
            alert("删除失败");
        }
        spreadsheetReport.doRefresh(); //刷新报表
    }
}


 


 

打赏人数1麦豆 +40 收起 理由
Smartbi社区管理员 + 40 太棒了,给你32个赞,么么哒

查看全部打赏

  •   Smartbi社区管理员
    这也太棒了吧!还有详细的流程截图,流程清晰明了,还有重点说明,太细心了,看完感觉我也可以,感动了感动了,必须给你打个赏!
    2025-7-2 11:08| 回复

回复

使用道具 1 举报

发表于 2025-7-1 19:30:17
赞赞赞,有时间必须得试一下,强强强
回复

使用道具 举报

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

本版积分规则

3回帖数 0关注人数 565浏览人数
最后回复于:2025-7-1 19:30
快速回复 返回顶部 返回列表