历史版本2 :下拉复选框多值提交 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
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","产品ID")))
B4:INDEXOFARRAY(B2,A4)
C4:value("ds1","产品名称","产品ID",B4)
公式说明如下:
A4:获取下拉复选框选项的最大个数来构建出表格的序号
B4:根据序号依次获取下拉复选框所选的产品ID,使其扩展显示
C4:根据B4的产品ID,获取对应的产品名称
2.3 设置填报属性
如图设置填报属性:
有两处需要注意下:
1)产品ID字段需要设置为主键,否则只设置id字段的话,按照提交逻辑相同id的数据会视为更新提交,最后入库的数据只有一条。
2)需要设置提交条件为len(B4)!=0,目的是去除掉构建的表格中为空的数据。
2.4 效果预览
使用填报预览,效果如下:
3. 模板下载编辑
点击下载模板:下拉复选框数组提交.cpt