我有2张普通表单:
普通表单1:用户申请表,包括姓名、部门、流水号
普通表单1里面的子表单1:申请清单,包括申请的物品、数量
普通表单2:部门申请表
普通表单2里面的子表单2:部门申请清单,包括姓名、部门、流水号、申请的物品、数量。
我已经在普通表单1的提交规则里面配置了upsert函数,把普通表单1和子表单1的数据都赋值到子表单2里面。如果姓名、部门和申请的物品都可以匹配到,就更新数量。
目前遇到的问题:如果是上面提到的匹配到现有记录,更新数量的话,之前的流水号会被新的流水号覆盖。如何实现如果是更新的情况,可以保留之前的流水号记录。
举例:
用户第一次提交,申请1个苹果。
用户第二次提交,又申请1个苹果。
子表单2的记录应该只有1条:物品是苹果,数量是2,流水号包含用户2次提交的流水号
首先,部门申请表的设计似乎有点问题,我理解,您的需求是,同一部门的用户申请记录,要收集到同一子表单中?如果是这样的话,部门申请表的“部门”组件应该从子表单中取出来,放置在主表单中。
然后,在用户申请表的表单设置-表单事件中,添加两条业务关联规则
第1条规则:如果部门申请表中相应部门不存在,则新增一条部门记录。参考代码如下:
UPSERT(部门申请表,
EQ(部门申请表.部门,部门),
"",
部门申请表.部门,部门
)
第2条规则,按要求更新部门申请表中的申请物品数量。
在UPSERT()函数中,主条件用于直接指向目标表中的记录,而子条件用来定位子表单中的具体记录。如果我上述理解是正确的,那么我们的主条件可以设置为
EQ(部门申请表.部门,部门)
然后,在子条件中定位具体要修改的子表单数据。
AND(
EQ(部门申请表.部门申请清单.姓名,姓名),
EQ(部门申请表.部门申请清单.申请的物品,申请清单.申请的物品)
)
接着,更新子表单数据。
完整参考代码如下:
UPSERT(部门申请表,
EQ(部门申请表.部门,部门),
AND(
EQ(部门申请表.部门申请清单.姓名,姓名),
EQ(部门申请表.部门申请清单.申请的物品,申请清单.申请的物品)
),
部门申请表.部门申请清单.姓名,姓名,
部门申请表.部门申请清单.申请的物品,申请清单.申请的物品,
部门申请表.部门申请清单.流水号,IF(ISEMPTY(部门申请表.部门申请清单.流水号), 流水号, CONCATENATE(部门申请表.部门申请清单.流水号,",",流水号)),
部门申请表.部门申请清单.数量,部门申请表.部门申请清单.数量+申请清单.数量
)
注意到,流水号的更新,先判断是否为空,如果为空,则直接使用流水号,否则,将流水号与当前流水号进行拼接。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。