1. 概述
1.1 问题描述
在制作填报模板时,经常遇到单元格控件勾选了多个指标,出现以下两种情况:
1)当填报时存在主键时,即做修改操作,提交成功后却只保留了一个值。
举例:
我们在「下拉复选框控件」勾选了「佳佳乐、康富食品、秒生、为全」 4 个指标后提交入库,刷新页面后,发现只保留了一个最后勾选的指标「为全」。
2)当填报时不存在主键时,即做添加操作,提交成功后数据库则会录入多条数据。
举例:
使用「产品」表添加一条测试数据进行填报,供应商选择了 3 个指标后提交入库后,发现「产品」表中新增了 3 条数据。
而我们希望「下拉复选框控件」多选值提交后,能在一条数据中正确显示多个值,该如何处理呢?
1.2 解决思路
「下拉复选框控件」的返回值类型默认为「数组」,上述两种情况返回值类型需要为「字符串」,所以导致填报结果不正确。
处理方法:将「下拉复选框控件」的返回值类型由「数组」改为「字符串」即可。
注:修改操作和添加操作的解决思路一致。
2. 示例
2.1 准备模板
打开内置模板 %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\LineForm\LineForm1.cpt
2.2 设置下拉复选框控件
将 D3 单元格控件修改为「下拉复选框控件」,返回值类型为「字符串」,其他默认。步骤如下图所示:
2.3 设置数据字典
给 D3 单元格设置「数据字典」,类型设置为「数据库表」,数据库选择「FRDemo」,数据库表选择「供应商」,实际值为「供应商ID」,显示值为「公司名称」。步骤如下图所示:
2.4 设置公式形态
选中 D3 单元格,设置「单元格属性>形态>公式形态」,定义公式形态:sql("FRDemo", "select DISTINCT 公司名称 from 供应商 where 供应商ID in ('" + $$$ + "')", 1,null)
步骤如下图所示:
注:公式 sql("FRDemo", "select DISTINCT 显示值字段 from 表名 where 实际值字段 in ('" + $$$ + "')", 1,null) 使得鼠标离开单元格时,单元格内容能展示显示值而不是实际值。
2.5 修改字段类型
设计器内置数据库表「产品」中「供应商ID」字段类型为 integer,需要先使用数据库连接工具将其修改为 text 类型,才可以存储字符串类型的值。
否则提交入库时会提示报错:数据列类型不匹配。
2.6 效果预览
1)PC端
保存报表,点击「填报预览」,效果如下图所示:
2)移动端
保存报表,点击「移动端预览」,点击「填报」,App 端和 H5 端均支持,效果如下图所示:
注:下拉复选框控件、单选按钮组控件、复选框组控件 等多选控件都有类似的问题,请参考本文档处理。
3. 模板下载
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\LineForm\下拉复选框多选值进行填报时出现的问题及解决方案.cpt
点击下载模板:下拉复选框多选值进行填报时出现的问题及解决方案.cpt