JS实现填报同时提交进不同表
1. 描述
填报报表时,当同一张表需要实现分别提交进不同数据库表时,需要在控件编辑结束事件里面写提交js,提交js又会触发控件编辑结束事件,造成死循环。此时可以用延时提交js+填报过滤来达到提交进不同表的目的。
2. 示例
2.1 数据库表准备
新建两张表dim_whtj_privset_ds(表1)和dim_whtj_test(表2),如下:
2.2 模板样式
新建数据库查询ds1:SELECT * FROM `dim_whtj_privset_ds`
ds2:SELECT * FROM `dim_whtj_test`
表样设计如下:
2.3 模板参数
点击模板>模板参数,添加参数A:

2.4 报表填报属性
分别给两个数据库表1和表2设置填报属性:


公式使得填入表2NAME1字段的值为表1中B1所在单元格的值。
2.5 控件设置
D1单元格的按钮控件,按钮类型为插入行,设置如下,:
E1单元格的按钮控件,按钮名称为点击插入数据,添加点击事件,达到点击按钮实现两次提交入库的功能:
setTimeout(function() {
//校验并提交报表
contentPane.verifyAndWriteReport();
//获取控件所在单元格列号
var cr=FR.cellStr2ColumnRow(this.options.location);
cr.col=cr.col-4;
//根据单元格获取控件
var loc=FR.columnRow2CellStr(cr);
//获取单元格控件的值
var A=contentPane.getWidgetByCell(loc).getValue();
//执行SQL
var sql ="SQL(\"JDBC2\",\"Select NAME1_CODE from `dim_whtj_test` WHERE NAME1='"+A+"'\",1,1)";
//获取对应的值
alert(sql)
var Count=FR.remoteEvaluate(sql);
alert(Count)
//给单元格赋值
contentPane.setCellValue(COL,ROW,Count);
contentPane.verifyAndWriteReport();
},100)
3. 保存与预览
通过填报属性和按钮的设置,使得数据填入表1的同时,单元格D2所对应的B1的值同时提交入表2。
效果如下,点击按钮即可提交入库:
查看表1和表2,可以看到数据已入库:
附件列表
主题: 二次开发
标签:
已验证

