工作流中循环保存的问题

* 描述问题

在工作流中使用循环,每个循环结束时更新数据,但数据似乎不是立即更新,而是所有循环结束之后一起更新?

在实际使用过程中 (例如扣减库存),用户订单中含有多条商品,在个别情况下订单中会出现相同商品 (类似“一棵是枣树,另一颗也是枣树”)。工作流是循环订单中的商品,扣减库存后更新数据,然后开始下一项的循环。但实际发现,当前循环结束后似乎数据并没有立即更新,导致下一项循环仍然是在原始库存的基础上扣减,最终导致库存少扣减的情况。

麻烦请教一下,这个问题应该如何解决?

* 运行环境

  • NocoBase 版本: 1.8.27
  • 数据库种类与版本:
  • 操作系统: Windows
  • 部署方式:Docker
  • Docker 镜像版本: nocobase/nocobase:1.8.27

如何重现

预期行为

工作流就不适合做这种带有并发锁的功能;要么自己在DB里做个专门的函数用SQL节点执行,要么用一个库存扣减的微服务,用http节点去调.
如果非要用工作流处理,在循环内要加入读取当前库存的节点,你库存就读了一次,操作变量又不对工作流上下文赋值,有这个结果很正常

2 Likes

我也是用工作流处理,可以扣到库存啊。不过我的数据量很小。

非常感谢您的解答!您说的非常对,我读取库存是通过关联字段“订单明细-商品-商品库存”,误以为每次都是读取最新的数据,而实际上是一直在使用同样的一份数据。按您的方法在循环中加入查询,问题已经解决。非常感谢!

和数据量大小没什么关系,我这边有时候订单中也就只有几十个品种。
我是只查了一次数据,然后创建了一个循环一直修改同一个品种并保存,导致每次都是在原来的数据上修改。一个愚蠢的错误 :sweat_smile:


这是我的流程设计,看下有没有帮助

感谢分享!我目前就正在向这个方向修改。

不客气