1. 前言
在之前的学习中,已经多次使用数据接口来完成列表选择和自动填写。但在实际业务中,数据接口的设计直接影响用户的操作体验。比如在入库单中选择采购订单时,如果已经全部入库的订单也显示在列表中,用户就得多花时间筛选,甚至选错。
本教程以"只显示未完成入库的采购订单"为场景,讲解数据接口的过滤条件设置、去重处理、函数使用以及扩展性设计。
2. 操作步骤
(1)修改采购订单列表数据接口
第16篇创建的"采购订单列表"数据接口,数据源是采购订单主表。要实现"只显示未完成入库的采购订单",需要将数据源切换为明细表,通过对比明细的采购数量和入库数量来判断是否完成入库。
① 打开"采购订单"模板,进入数据接口管理,选中"采购订单列表"数据接口,在数据源设置中,将数据源切换为"采购订单.明细"。

② 添加过滤条件:
空值替换(本模板.明细.入库数量,0) < 本模板.明细.数量。因为在采购订单中存在有一些商品还未入库的情况,此时入库数量为空,需要用空值替换函数将空值转为0再进行比较。
函数说明: 空值替换函数的作用是将空值替换为指定的默认值。这里
空值替换(本模板.明细.入库数量,0) 表示如果入库数量为空,则按0参与运算。这个函数在数据接口的过滤条件和赋值公式中都可以使用。(2)调试数据接口
保存设置后,我们来调试一下数据接口,看看效果。
① 在数据接口列表页面中,点击"调试"按钮,执行数据接口查询。

这时会发现一个问题:同一个采购单号在结果中出现了多次。这是因为数据源是明细表,每一条明细行都会带出对应的主表信息,如果一个采购单有三条明细,这个单号就会重复出现三次。
(3)去除重复数据
② 在数据接口的查询设置中,找到"重复数据只显示一次"选项,勾选该选项。

勾选后再次调试,每个采购单号只显示一次,列表清晰简洁。

使用效果: 用户在入库单中选择采购订单时,列表只显示未完成入库的采购订单,且每个单号只出现一次。

(4)修改采购订单查询数据接口
第16篇创建的"采购订单查询"数据接口用于选择采购订单后带出明细数据,也需要加上同样的过滤条件,确保只查未完成入库的商品。
① 打开"采购订单查询"数据接口,在过滤条件中添加:
空值替换(本模板.明细.入库数量,0) < 本模板.明细.数量。 
(5)修改填表公式
选择采购订单后,系统带出明细数据时,数量字段应该是"未入库数量"(即采购数量减去已入库数量),而不是原始的采购数量。
① 打开"采购入库单"模板,在填表公式中找到值变化事件下"来源单号"的赋值公式(插入明细的那个),将"数量"字段的值设置为
数据源.数量 - 数据源.入库数量。
使用效果: 选择采购订单后,明细中带出的数量自动计算为未入库数量,用户无需手动修改。

(6)数据接口的扩展性设计
在设计数据接口时,有一个重要的原则:尽量将相关的数据列都查出来,这样数据接口能在更多的地方使用,不需要重复创建。
① 一个设计良好的数据接口,应该包含比当前需求更多的数据列。这样当其他模板需要用到这个接口时,可以直接复用。

精确查询 vs 通用查询:
| 类型 | 特点 | 适用场景 |
|---|---|---|
| 精确查询 | 过滤条件严格,只返回所需数据 | 业务操作中的特定查询 |
| 通用查询 | 数据列齐全,过滤条件灵活 | 多处复用的公共数据接口 |
提示: 在设计数据接口时,尽量将相关的数据列都查出来,这样数据接口能在更多的地方使用。同时也要注意不要查询过多的列,避免影响性能。
3. 核心要点回顾
(1)通过切换数据源为明细表,结合过滤条件(入库数量 < 采购数量),可以筛选出未完成入库的采购订单。
(2)空值替换函数可以将空值转为0后再参与比较,避免因空值导致过滤条件不生效。
(3)数据源为明细表时,同一条主表信息会重复出现多次,需要勾选"重复数据只显示一次"来去重。
(4)采购订单查询数据接口也需要加同样的过滤条件,确保只查未完成入库的商品。
(5)通过赋值公式计算"采购数量 - 入库数量",可以将带出的数量自动设为未入库数量。