1. 概述
1.1 应用场景
填报时常规的删除数据方法是,设置删除行按钮跟在每一行数据后面,详细参见文档:插入和删除行列
但是数据量大时这个方法有很大弊端,如果每一行后面都有个按钮控件,会导致模板加载时间过长,影响填报效率。
可以考虑用超链代替按钮控件,通过传参间接实现删除行填报,效果如下图所示:
1.2 实现思路
每一行后的删除行按钮改用 JavaScript 类型的超链代替,写 JS 代码获取当前行的主键值。
参数面板添加一个文本框控件和一个按钮控件,将代码获取的主键值传参给参数面板的文本框控件,再调用参数面板的按钮控件点击事件,实现入库。
2. 示例
2.1 设计模板
1)新建普通报表,新建数据集 ds1 ,SQL 语句为:SELECT * FROM Sales
2)如下图设计表格,其中 G2 单元格写文本:删除改行,这个单元格是加超链用的。
3)参数面板添加一个文本框控件和一个按钮控件。
文本框控件名称改为a,按钮控件名称改为b。
并设置这 2 个控件不可见,如下图取消勾选「可见」即可,这样分页预览时控件隐藏不可见。
4)选中右上角组件设置界面的「para」,也就是参数面板,取消勾选「点击查询前不显示报表内容」,这样预览时页面不会什么数据都没有。
2.2 设置提交事件
选中按钮控件,添加一个点击事件,事件类型为「提交入库」,设置「删除提交」,数据库为「FRDemo」,表为「sales」。
点击「添加字段」,只将 sales 表中的ID字段添加为列,设置其值为公式=$a,也就是文本框控件的值,并勾选主键。
2.3 设置回调函数
在上面提交入库事件设置界面点击「设置回调函数」,目的是为了执行入库事件时,可以提醒用户提交成功了还是失败了。
JavaScript 代码如下:
if (fr_submitinfo.success) {
FR.Msg.toast('提交成功');
} else {
FR.Msg.toast('提交失败');
}
2.4 添加超链
选中 G2 单元格,添加一个 JavaScript 类型的超链,设置参数c,其值为公式=A2,下方输入 JS 代码,如下图所示:
JavaScript 代码如下:
_g().parameterEl.getWidgetByName("a").setValue(c);
//获取当前行主键值传参给参数面板的文本框控件
FR.Msg.confirm("警告", "确定要删除吗?", function(value) {
if (value) {
_g().parameterEl.getWidgetByName("b").fireEvent("click");
//触发参数面板按钮控件的点击事件
}
})
2.5 效果预览
保存报表,分页预览后,删除效果如 1.1应用场景 中所示。
支持 App 端和 HTML5 端预览。
3. 模板下载
已完成模板参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\HyplinkReport\JS实现超链删除当前行数据.cpt
点击下载模板:JS实现超链删除当前行数据.cpt
4. 补充说明
超链代码中实现了删除时二次确认的效果,如果想点击后直接提交,不弹出确认是否删除的对话框,可以修改下代码,如下图所示:
JavaScript 代码如下:
_g().parameterEl.getWidgetByName("a").setValue(c);
//获取当前行主键值传参给参数面板的文本框控件
_g().parameterEl.getWidgetByName("b").fireEvent("click");
//触发参数面板按钮控件的点击事件