历史版本3 :下拉复选框多值提交 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

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 效果预览

使用填报预览,效果如下:

1.gif

3. 模板下载编辑

点击下载模板:下拉复选框数组提交.cpt