开发者社区> 问答> 正文

upsert更新子表单某个字段的问题

我有2张普通表单:
普通表单1:用户申请表,包括姓名、部门、流水号
普通表单1里面的子表单1:申请清单,包括申请的物品、数量
普通表单2:部门申请表
普通表单2里面的子表单2:部门申请清单,包括姓名、部门、流水号、申请的物品、数量。

我已经在普通表单1的提交规则里面配置了upsert函数,把普通表单1和子表单1的数据都赋值到子表单2里面。如果姓名、部门和申请的物品都可以匹配到,就更新数量。
目前遇到的问题:如果是上面提到的匹配到现有记录,更新数量的话,之前的流水号会被新的流水号覆盖。如何实现如果是更新的情况,可以保留之前的流水号记录。

举例:
用户第一次提交,申请1个苹果。
用户第二次提交,又申请1个苹果。
子表单2的记录应该只有1条:物品是苹果,数量是2,流水号包含用户2次提交的流水号

展开
收起
游客7ht34jzgyqs7s 2024-07-17 15:50:56 102 0
来自:钉钉宜搭
1 条回答
写回答
取消 提交回答
  • 首先,部门申请表的设计似乎有点问题,我理解,您的需求是,同一部门的用户申请记录,要收集到同一子表单中?如果是这样的话,部门申请表的“部门”组件应该从子表单中取出来,放置在主表单中。
    然后,在用户申请表的表单设置-表单事件中,添加两条业务关联规则
    第1条规则:如果部门申请表中相应部门不存在,则新增一条部门记录。参考代码如下:
    UPSERT(部门申请表,
    EQ(部门申请表.部门,部门),
    "",
    部门申请表.部门,部门
    )

    03e4381a512fb490c543125154c625e0.png

    第2条规则,按要求更新部门申请表中的申请物品数量。
    在UPSERT()函数中,主条件用于直接指向目标表中的记录,而子条件用来定位子表单中的具体记录。如果我上述理解是正确的,那么我们的主条件可以设置为

    EQ(部门申请表.部门,部门)

    然后,在子条件中定位具体要修改的子表单数据。
    AND(
    EQ(部门申请表.部门申请清单.姓名,姓名),
    EQ(部门申请表.部门申请清单.申请的物品,申请清单.申请的物品)
    )

    接着,更新子表单数据。
    完整参考代码如下:

    UPSERT(部门申请表,
    EQ(部门申请表.部门,部门),
    AND(
    EQ(部门申请表.部门申请清单.姓名,姓名),
    EQ(部门申请表.部门申请清单.申请的物品,申请清单.申请的物品)
    ),
    部门申请表.部门申请清单.姓名,姓名,
    部门申请表.部门申请清单.申请的物品,申请清单.申请的物品,
    部门申请表.部门申请清单.流水号,IF(ISEMPTY(部门申请表.部门申请清单.流水号), 流水号, CONCATENATE(部门申请表.部门申请清单.流水号,",",流水号)),
    部门申请表.部门申请清单.数量,部门申请表.部门申请清单.数量+申请清单.数量
    )

    6d24a731724b567005249de1b725dc15.png

    注意到,流水号的更新,先判断是否为空,如果为空,则直接使用流水号,否则,将流水号与当前流水号进行拼接。

    2024-07-18 17:55:43
    赞同 10 展开评论 打赏
问答分类:
问答地址:
来源圈子
更多
收录在圈子:
+ 订阅
「宜搭」是云钉原生低代码平台(钉钉 PaaS - aPaaS),让企业应用搭建更简单! 帮助中小企业降本提效,加强组织的数字化自主权; 帮助大型企业释放个体创新力,助力组织创新涌现。
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载