表单关联字段做冗余存储

* 描述问题

我的订单表表单关联了产品表,在创建订单的时候选择产品表,关联了产品 id,现在我想将产品名称作为冗余字段也存储到订单表里面,请问如何实现这种操作?

* 运行环境

  • NocoBase 版本: v1.3.6-beta

预期行为

希望可以实现关联表的字段冗余存储。

配置字段的时候,在显示关联表的字段里边勾选你想要显示的产品名称等其他产品表的字段,产品id也可以在这里勾选。

这种方式可以显示出来,但并不会冗余存储。我想将显示出来的字段冗余存储起来。

那可以写个工作流?或者建关联字段的时候勾选“在目标数据表里创建反向关系字段”,这样行不?

感谢,我去试试。我现场景是这样。A 关联了 B,B 关联了 C.

在 A 表单下拉框选择 B 表数据时,设置标题,我想显示 C 中的字段,而不是 B 的(现在前端只能支持到 B 表字段显示),因此想做冗余存储 C 的字段到 B 表中。

不在电脑边,但是印象中应该可以的呀。
不过关系字段无法作为标题,这样会造成在目前表格中只显示ID,尤其在日历这种区块中还无法被筛选。
如果是这个问题的话,我是写了个工作流解决的。 :grin:

1 Like

感谢大佬, A 关联 B 只能使用 B 表字段作为显示字段,无法使用 B 关联的 C。我正在准备使用工作流,在 B 表增加 C 表字段做冗余,然后 B 表在新增数据时,执行工作流的 SQL 去 update 冗余字段数据到 B 表。

:rofl: 我是纯小白,没给你误导就行,和大家多学习。

1 Like

我确认了工作流的方式可以实现。我在 nocobase 给的演示地址里测试了。但我自己搭建的一直无法触发工作流。执行次数一直是 0。请问你知道添加工作流,配置完流程,启用后,再绑定到表单提交按钮中,还有其他操作吗

用新建的表居然可以触发。目前还没看出原因。不过确定不是 bug,就可以慢慢研究了。感谢大佬。

对的,新建数据时触发工作流就可以了。

我找到前面的工作流不触发原因了,新增数据要 create 才能触发,firstOrCreate 无法触发。因为用的是局部方式。firstOrCreate 可能要全局模式才能。

“关联表的字段的冗余存储”在 nocobase 里早就支持了。
实际就是官方给与的演示环境里的“默认值”的用法。
具体一点:
在订单的明细表里,建立字段 product_name, 在表单配置里配置这个字段的默认值=当前对象.产品.产品名称

我有一个相关的需求,和您这个需求是相反的:
1,(我不希望建立冗余字段)
2,我希望有虚拟的“关联型字段”,仅在单据界面上显示,不存储到数据表行(表行内只存储外键)。

实际的系统设计中,上面这两种做法都有选择,涉及到“产品表”内产品的名称等档案的版本化。
用户视角的区别是:当产品名称改变后,历史单据上应该显示历史产品名称? 还是显示最新产品名称?
版本化(按历史名称展示)看似是个简单合理需求,实际上实现起来比较复杂。
更优的选择是放弃版本化(当商品名称档案改变后,历史单据上都显示最新的商品名称)。

1 Like

谢谢!我的表数据新增后刚好是不允许修改的,这种方式更方便了。

demo 已修改,不是通过默认值来实现,而是通过子表格里的联动规则。

默认值和联动规则都有各自适用的场景。

版本化请使用 快照字段