系列文章目录


finereport点击按钮传递复选框参数并调用存储过程更改数据状态



文章目录

  • 系列文章目录
  • 前言
  • 一、首先介绍一下业务场景
  • 二、详细步骤
  • 1.在查询按钮添加点击事件
  • 2.数据库存储过程(这里也展示一下,希望可以帮到大家,注:mysql数据库)
  • 总结


前言

针对finereport大多数传参都为单个参数的情况,写了这篇传递多个参数的文章,希望对大家有所帮助



一、首先介绍一下业务场景

在填报时选择下拉框和下拉复选框的值,在点击查询按钮的同时将选中的内容更改为0(不展示)和1(展示)的状态,并且下次进入填报页面是默认选中状态为1的选项。

二、详细步骤

下拉框配置(数据字典就是普通的城市查询并去重)

finereport能查询redis数据吗 finereport 查询按钮_mysql


下拉复选框配置重要

数据字典就跟是简单的跟着城市去联动

这里要注意两点

1.返回值类型一定要选择字符串,分隔符为“,”,一定要是逗号,不然传参会很麻烦。甚至不生效

2.默认值(即下次进入此页面选择状态为1的选项,直接贴代码)

下面展示一些 内联代码片

// region为区域,geocity为城市,state为状态,$geocity为下拉框控件名
sql("数据库名","select distinct region from 表名 where geocity = '"+$geocity+"'and state = \'1\'",1)

finereport能查询redis数据吗 finereport 查询按钮_复选框_02

1.在查询按钮添加点击事件

代码如下(示例):

//b为标识位,存储过程用来区分哪一张表更改状态
var b = '1';
//获取下拉复选框选中的值
var p_region =this.options.form.getWidgetByName("region").getValue();
//获取下拉框选中的值
var p_geocity =this.options.form.getWidgetByName("geocity").getValue();
//拼接调用存储过程语句(下拉复选框分隔符设置为“,”的好处就在这里体现,不用无限转义)
var z =  "call proc_updateState('"+b+"','"+p_geocity+"','"+p_region+"')";
//执行sql,调用存储过程更改状态
FR.remoteEvaluate('SQL("Data_ycymb","'+z+'",1,1)');

2.数据库存储过程(这里也展示一下,希望可以帮到大家,注:mysql数据库)

代码如下(示例):

//三个入参(flag:表标识位,区分哪一个表;p_geocity:城市;p_region:区域)
CREATE PROCEDURE proc_updateState (IN flag varchar(255),IN p_geocity varchar(255),IN p_region varchar(255))
BEGIN
//每个if语句大同小异,无非就是为了起到多个报表共用的目的,提高复用性
if(flag = '1') THEN
update 表1 set state = '0' where geocity =p_geocity;
update 表1 set state = '1' where geocity =p_geocity and FIND_IN_SET(region,p_region);
end if;
if(flag = '2') THEN
update 表2 set state = '0' where geocity =p_geocity;
update 表2 set state = '1' where geocity =p_geocity and FIND_IN_SET(region,p_region);
end if;
if(flag = '3') THEN
update 表3 set state = '0' where geocity =p_geocity;
update 表3 set state = '1' where geocity =p_geocity and FIND_IN_SET(region,p_region);
end if;
END




总结

接到这个需求的时候,我也是痛苦了好几天,终于做出来了,希望可以帮助大家闭坑,越走越远。