1. 概述
1.1 问题描述
填报模板中有一个下拉复选框,设置了实际值和显示值,希望将选中数据拆开作为不同的数据提交入库,且需要将其显示值也提交入库。如下图所示:
1.2 解决思路
要拆成多条数据入库的话,下拉复选框的返回值需要选择数组格式。
此时如果在提交属性里用 value 或者 maparray 等函数去获取显示值的话,就会出现两个数组,导致笛卡尔积。所以该需求需要用一种比较巧妙的方法实现。
利用 range 函数做一个固定的表格,用公式来将选择数据的实际值和显示值一一匹配,这样在提交的时候就有对应关系了。
2. 示例
2.1 设计模板
新建数据集 ds1,sql 语句为SELECT * FROM S产品 limit 5
在 B2 单元格设置「下拉复选框控件」,「返回值类型」设置为数组,数据字典为 ds1,实际值为 产品ID,显示值为 产品名称
2.2 设置公式
在 A4,B4 和 C4 单元格设置公式来构建一个提交用的表格。
A4:range(1,max(value("ds1",1)))
B4:INDEXOFARRAY(B2,A4)
C4:value("ds1",2,1,B4)
公式说明如下:
A4:获取下拉复选框选项的最大个数来构建出表格的序号
B4:根据序号依次获取下拉复选框所选的 产品ID,使其扩展显示
C4:根据 B4 的 产品ID,获取对应的产品名称
2.3 设置填报属性
如图设置填报属性:
有两处需要注意下:
1)产品ID 字段需要设置为主键,否则只设置 id 字段的话,按照提交逻辑相同 id 的数据会视为更新提交,最后入库的数据只有一条。
2)需要设置提交条件为len(B4)!=0,目的是去除掉构建的表格中为空的数据。
2.4 效果预览
使用填报预览,效果如下:
注1:多选内容并不是一定要是数字类型,只要有能区分数据唯一的字段就行,类似于文档中的产品ID。
注2:方案支持移动端。
3. 模板下载
点击下载模板:下拉复选框数组提交.cpt