1. 概述
1.1 版本
Finereport 版本 |
---|
11.0 |
1.2 应用场景
本文介绍制作模板时,参数控件相关的常见问题及解决方案。
1.3 排查步骤
1)检查参数使用是否正确,定义是否正确,参数选择和参数定义可查看:参数的种类与区别
2)检查参数命名是否符合规范,参数命名规范可查看:参数命名规则
3)参数定义正确,使用了控件,但是预览时,查询不到数据,检查参数名称和控件名称是否一致。参数查询如何设置可以看:控件筛选查询
4)参数正控件正常,但是给参数赋值、或者控件赋值后总是达不到预期效果,检查下是否是因为参数赋值不规范、赋值优先级等问题。参数赋值规范可查看:参数赋值规则
2. 下拉框和下拉复选框控件常见问题
2.1 控件选择值后查询不出内容
问题描述:
在实际应用中,常常会遇到这样的情况,在设计器预览时给参数输入值能正常查询出数据,但是在浏览器中预览报表,给控件输入值后报表却查询不出数据。
原因分析:
可能是您参数界面中参数控件的名字与参数名不一致导致。该错误常常发生在如某张已做好的模板,由于需要修改了参数名称,但未对参数界面的参数控件名做相应的修改。
注:图示中参数为数据集参数,其他类型参数名称位置查看对应的文档即可。
解决方案:
修改参数名称或者控件名称,使其一致。
2.2 下拉框选项框的宽度异常
问题描述:
下拉框选项框,随着滚动条下拉,宽度会变化。
原因分析:
下拉框数据为异步加载,一次 500 条,滚动到最后一条时会继续加载接下来的 500 条,因此下拉框宽度也需要跟随数据动态变化,属于正常现象。
2.3 输入时报错值不在下拉列表中
问题描述:
下拉框设置了不允许自定义值,但预览输入时还未失焦就触发了校验,报错值不在下拉列表中。
原因分析:
报表服务器升级更新到 10.0.18 及之后版本。
2.4 下拉框选项列表的字体大小和颜色无法调整
问题描述:
单元格下拉框控件,修改了单元格字体大小或者颜色,但预览时选项列表的字体大小或颜色没有改变。
原因分析:
下拉框控件不支持调整选项列表的字体大小和颜色。
2.5 JS无法给控件赋值
问题描述:
使用 JS 给下拉框/下拉复选框赋值,但值赋不上去,始终显示为空。
原因分析:
控件在触发数据字典联动时,会清空被联动控件的值,所以用JS赋值时,赋的值也会被此逻辑清空。
解决方案:
给赋值 JS 加延时,确保数据字典联动结束后再赋值。
2.6 数据字典的数字丢失精度
问题描述:
当控件数据字典使用的字段类型为数字类型时,例如 bigint,有可能会出现丢失精度的问题。
解决方案:
将数字类型转为字符串类型。
2.7 下拉框值的个数出现异常
问题描述:
移动端报表的下拉框,同一个下拉框,条件没有变化,但是有时候下拉选项是2个值,有时候是3个值。
原因分析:
移动端的请求是异步的,pc请求是同步的。移动端下拉框的值依赖于联动的控件值。因此这个下拉框的值必须等前面联动的控件的值请求有结果之后才能请求到正确的值
解决方案:
在出问题的控件加个初始化后事件 this.resetDependenceData();
2.8 SQL 实现下拉多选查询不生效
问题描述:
下拉复选项的分隔符设置和 sql 语句设置都正常,但是下拉多选查询不生效。预览sql语句报错如下:转义部分参数防止SQL注入,查询结果与预期可能不符。
解决方案:
关闭SQL防注入里的转义字符。可参考:SQL防注入 。
2.9 下拉复选框返回值为字符串时"允许为空"配置项不生效
问题描述:
下拉复选框的返回值为数组的话会提示不能为空,是正常的;返回值为字符串时、并且设置起始符和结束符的情况下,并且取消勾选了 "允许为空"这个配置项使复选框不能为空,但是实际上查询时不会提示为空。
原因分析:
当返回值为字符串时,设置了起始结束符后,返回值其实就是起始符+结束符,并非空值
解决方案:
可以去掉起始结束符,将符号写在分隔符中。
2.10 下拉框设置自定义值提示:不允许自定义值
问题描述:
下拉框设置自定义值,字段值里有带着斜线“\”的,会提示“不允许自定义值”,无法通过校验。
原因分析:
11.0 版本新加了单元格 的自定义值校验,带\符号的,在转成json的时候会有些问题,后台解析的时候\会变成\\,然后就校验失败。
解决方案:
用内置校验即可。
3. 下拉树和视图树控件常见问题
3.1 下拉树或视图树有值但无法选中对应选项
问题描述:
下拉树或视图树设置了默认值、联动赋值、JS赋值时,无法在下拉列表中选中对应选项。
原因分析:
下拉树或视图树在赋值时,要求必须用完整路径赋值,才能匹配到选项。
解决方案:
赋值时使用完整路径。
3.2 下拉树有值但选项列表中未正确展开到对应层级
问题描述:
下拉树或视图树设置了默认值、联动赋值、JS赋值时,选项列表中未正确展开到其对应层级,而是全部展开或者全部不展开。
原因分析:
下拉树和视图树在赋值时,根据其构建方式、加载方式,会有不同的展开逻辑,具体可参考下拉树控件中的异步加载相关内容。
解决方案:
根据需求和数据结构更换构建方式和加载方式。
3.3 下拉树填报时丢失层级结构
问题描述:
单元格下拉树选择值后填报,入库数据异常增多。
原因分析:
下拉树控件值在转化为单元格值的时候,会丢失层级,分号会统一变为逗号,所以入库时会作为多条数据入库,造成异常。
解决方案:
单元格下拉树目前不支持提交入库,更换控件类型。
3.4 下拉树显示空节点
问题描述:
下拉树使用极速分层构建时,假设某个节点下无值但设置了该层级,可能出现空节点。
解决方案:
使用普通分层构建。
3.5 树节点按钮字体颜色无法修改
问题描述:
单元格设置了树节点按钮,则该单元格设置的字体颜色会失效。
原因分析:
树节点按钮所在单元格不支持设置字体颜色。
3.6 下拉树结构显示异常,子节点无法展开
问题描述:
数据集 #1,#2 有对应层级关系,#3,#4 分别是自动构建时设置的实际值和显示值,预览后子节点无法展开。
原因分析:
#3 中有重复字值,目前不支持实际值重复的数据结构。
3.7 多个下拉树联动时全选模板卡死无响应
问题描述:
控件选项联动的场景下,使用两个及以上下拉树设置控件联动,如下图所示,小区数选择之后,房间数的选项对应变化:
当联动的下拉树全选时,出现模板卡死无响应现象,尤其是数据量较大的情况下容易出现,如下图所示:
原因分析:
控件联动,后一个下拉树每选一个值,触发前面下拉树变化,导致响应过多页面卡死。
解决方案:
被联动(前一个层级)的下拉树勾选「允许自定义值」,即上述场景中勾选“小区树”控件的设置项,如下图所示:
4. 日期控件常见问题
4.1 日期控件格式设置为yyyy但仍然显示年月样式
问题描述:
日期控件手动设置格式为yyyy时,其预览时选项框仍然是年月样式,未单独显示年。
原因分析:
11.0.5 之前版本不支持日期控件单独显示年。
解决方案:
更新 JAR 包至 11.0.5 及之后版本,或使用下拉框控件实现显示年份。
4.2 日期控件选择框异常显示为NaN
问题描述:
日期控件有默认值或者输入值后,选项框显示会异常。如下图所示:
原因分析:
日期控件格式不正确。
解决方案:
修改日期控件格式设置。
4.3 日期控件默认值的now()或today()存在误差
问题描述:
日期控件默认值设置了now()或today(),但预览时和本地时间对不上。
原因分析:
服务器时区、浏览器时区、tomcat时区、浏览器版本过旧都会影响时间函数的返回值。
解决方案:
依次排查上面几种可能,修改对应时区或者参数,升级浏览器版本。
4.4 起始结束日期使用公式year()报错找不到控件类型
问题描述:
11.0 日期控件开始支持“yyyy”年份形式,当日期控件类型选择了“yyyy”年份形式,开始日期或结束日期处使用公式year(today())给定日期范围时,控件报错显示“DATEEDITOR0找不到控件类型 详细信息:TypeError:”如下图所示:
原因分析:
日期控件不支持 integer 类型参数,从而公式取的值类型和日期控件值类型不匹配导致,报表服务器版本 11.0.12 及以后已经做了适配,已解决这个问题。
解决方案:
公式换用 today() 即可,或升级报表服务器至 11.0.12 及以后版本。
5. 单选和复选按钮组控件
5.1 决策报表中无法与其他控件对齐
问题描述:
决策报表中单选或复现按钮组控件无法与其他控件设置对齐,如下图所示:
原因分析:
单选/复选按钮组控件在 frm 的 body中,位置默认为靠上,不支持修改。
6. 参数面板加载慢
问题描述:
带有参数面板的模板,在勾选了「点击查询前不显示报表内容」的情况下,加载很慢。
6.1 控件数据字典取数慢
原因分析:
带有数据字典设置的控件,如果无默认值,则初始化时不会进行取数。
但如果设置了默认值,则在参数面板初始化时就会加载对应的数据字典。
这时如果该数据字典使用的数据集执行较慢的话,就会导致整个参数面板加载慢。
解决方案:
1)不设置默认值
2)使用「抽数缓存」优化取数速度
6.2 控件默认值取数慢
原因分析:
控件的默认值使用了 sql(),ds1.select() 等函数时,如果对应 sql 语句执行较慢,就会导致整个参数面板加载慢。
解决方案:
1)不设置默认值
2)换成 value() 函数
3)使用「抽数缓存」优化取数速度
7. 其他问题
7.1 模板数据集和服务器数据集部分重名时无法取数
问题描述:
控件绑定的数据字典的数据集名字为 a,服务器数据集的名字为 a_b,控件读取时读取的数据不是绑定的数据字典的数据集,而是服务器数据集的数据,会发生错乱。
原因分析:
“_”是java里的保留字符,a_b会被拆成两段读取,由于先匹配到了a,所以就读取了服务器数据集。
解决方案:
修改数据集名字,避免使用保留字符,如 false,null,inner,go,加减号等。
7.2 Divide by zero error encountered
问题描述:
参数筛选,偶发查询报错:Divide by zero error encountered
原因分析:
该参数下得到的SQL语句,有除以0的语句
解决方案:
1)用报错的参数字符串,测试数据集SQL,预览数据集,看是否同样报错,若同样报错,则为SQL的问题
2)自行排查优化SQL语句。