多对多数组字段所在的表被间接关联添加时会报错

* 描述问题

有多对多数组字段所在的表被间接关联添加时会报错,比如:
有表A、表B、表C和表D
表C.字段1是引用表D.ID的多对多数组字段
表B.字段1是引用表C.ID的多对一字段
表A.字段1是引用表B.ID的多对多字段
此时,在表A的添加或编辑区块中添加表B的关联数据时,提交即为报 "oldValue.sort is not a function"的错误

TypeError: oldValue.sort is not a function
    at eval (eval at <anonymous> (\nocobase\packages\core\database\src\fields\array-field.ts:2:1203), <anonymous>:1:10)
    at AsyncEmitter.sortValue (\nocobase\packages\core\database\src\fields\array-field.ts:33:33)
    at run (\nocobase\packages\core\utils\src\mixin\AsyncEmitter.ts:29:19)
    at <anonymous> (\nocobase\packages\core\utils\src\mixin\AsyncEmitter.ts:52:18)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at AsyncEmitter.emitAsync (\nocobase\packages\core\utils\src\mixin\AsyncEmitter.ts:50:7)
    at Function.<anonymous> (\nocobase\packages\core\database\src\model-hook.ts:74:9)
    at Function.runHooks (\nocobase\node_modules\sequelize\src\hooks.js:131:7)
    at model.save (\nocobase\node_modules\sequelize\src\model.js:4090:7)
    at Function.create (\nocobase\node_modules\sequelize\src\model.js:2305:12)

原因是多对多数组的字段在数据库中是以JSON格式存储的数组,后台代码会将空值转换为空对象:{},而不是空数组:[ ],因此在调用sort函数会报错

* 运行环境

  • NocoBase 版本:v1.4.30
  • 数据库种类与版本: MySQL 8.x
  • 操作系统:
    -浏览器及版本
  • 部署方式:Docker
  • Docker 镜像版本:nocobase/nocobase:latest
  • NodeJS 版本:

如何重现

预期行为

截图

image

日志

我又看了一下,感觉不是空值转换成空对象的问题,因为即便是空值,数据库里面也存的是[ ],也能正常识别为数组。我感觉是上层调用时遇到非必要的字段将其设置为空对象了。因为我又测试了,将中间的关联关系减少一级,这个问题就消失了。

请问这一步是怎么操作的。方便截图看看吗,或者申请一个demo复现一下。在最新版中尝试,暂时未能复现。

DEMO中没复现出来,可能还有更复杂的原因,我看到日志中有 task_queues ,猜测可能是受工作流影响,因为我确实在B表上设置了一个工作流,但是该工作流只是在B表的其他字段上插入值或更新值时才会触发