关于苍穹弹性域字段开发的样例(一)原创
金蝶云社区-聚宝彭
聚宝彭
39人赞赏了该文章 6599次浏览 未经作者许可,禁止转载编辑于2021年01月19日 10:45:10

本文章以物料的辅助属性为基础来介绍弹性域字段数据的存储。

① 在【系统服务云】->【基础资料】->【供应链数据】->【辅助属性定义】中添加两个辅助属性:辅助属性1&辅助属性2。在辅助属性新增界面按ctrl+alt+g进入其设计器界面,可知该页面的标识为bd_auxproperty,对应的数据表为t_bas_flex_property。

注意:新建的辅助属性数据必须经提交、审核通过操作之后方可在后面步骤中使用!

弹性域数据存储介绍-1.png

弹性域数据存储介绍-2.png

弹性域数据存储介绍-3.png

弹性域数据存储介绍-3.1.png

② 新建一条物料数据,在“公共信息”页签下启用辅助属性,并维护两个辅助属性(维度),分别选择第①步新建的2个辅助属性。

注意:新建的物料数据必须经提交、审核通过操作之后方可在后面步骤中使用!

弹性域数据存储介绍-5.png

③ 通过单据模板新建一个单据,并添加“物料”&“弹性域”控件,并将“弹性域”字段的弹性域类型设置为“辅助属性”,基础资料字段绑定为物料字段。

备注

  • “弹性域”字段的弹性域类型的可选项目前只有:辅助属性、核算维度、职位。其中,辅助属性在物料中使用,核算维度&职位具体在什么页面使用暂不清楚,如有清楚的小伙伴,还请指点指点迷津~~~

  • 在第②步中,在物料新增界面按ctrl+alt+g进入设计器界面,即可看到辅助属性字段是一个基础资料字段,其基础资料类型绑定为“辅助属性定义”,故“弹性域”字段的弹性域类型需设置为“辅助属性”,而不是核算维度或职位。

弹性域数据存储介绍-6.png

④ 预览单据,物料字段选择第②步中启用了辅助属性的数据,并在弹性域字段的两个维度中录入数据,完成之后点击“保存”即将数据存入数据库中。

弹性域数据存储介绍-7.png

⑤ 通过查询分析器可查到第④步新增的单据数据。

弹性域数据存储介绍-8.png

⑥ 由第⑤步可知,弹性域字段存储的是长整型数据,类似于是主键ID。但它来自于哪张表呢?

在苍穹平台里面有一个基础资料实体是弹性域(页面标识:bos_flex),与之对应的数据表为t_bas_flex,查询该表数据如下图所示。

弹性域数据存储介绍-9.png

⑦ 查询表t_bd_flexauxpropdata的数据。

弹性域数据存储介绍-10.png

⑧ 从第⑦步查询的表数据可知,在单据界面输入的弹性域字段的值是存放在表t_bd_flexauxpropdata的fvalue字段中。对比第⑤步业务单据中弹性域字段的值与第⑦步中数据的主键ID可知,业务单据上弹性域字段的值存储的是表t_bd_flexauxpropdata中数据的主键ID,即:业务单据表与表t_bd_flexauxpropdata是通过表t_bd_flexauxpropdata的主键ID相关联的。so,你以为这就完了吗?不不不,还早呐,难道客官您没有注意到一个问题吗?第④步我们输入的是“属性1”和“管理员”,但在表t_bd_flexauxpropdata中fvalue存储的是“属性1”和一个人员(标识:bos_user)的主键ID,so,那这个值又是怎么存的呐?

⑨ 由第⑥步知,弹性域(基础资料实体,标识:bos_flex)的fformid记录了业务单据上的弹性域字段的值的是存储在哪个实体中,ftable记录了是存储在哪张表中。在开发平台搜索“bd_flexauxprop”,点击“辅助属性”超链接进入功能分组列表界面。

弹性域数据存储介绍-11.png

弹性域数据存储介绍-12.png

⑩ 依次打开页面“bd_flexauxprop_bd”、“bd_flexauxprop_txt”的设计器界面,可知数据表分别为:t_bd_flexauxpropdata_bd、t_bd_flexauxpropdata_txt。查询数据表如下图。

弹性域数据存储介绍-13.png

弹性域数据存储介绍-14.png

? 由第⑩步可知,以物料的辅助属性为例,业务单据上弹性域字段的值如为基础资料类型,则最终是存储在表t_bd_flexauxpropdata_bd中;如为文本类型,则最终存储在表t_bd_flexauxpropdata_txt中的。

划重点啦~划重点啦~划重点啦~

这里给大家科普一下:

苍穹的弹性域字段数据表包含横表和纵表,纵表按类型分为基础资料、文本2个表,表名后缀分别固定为“_BD”和“_TXT”,且字段名(横表、属性类型、属性值)固定。

纵表里面的“横表”字段是一个基础资料字段,其基础资料类型属性绑定的基础资料即为横表对应的页面。

如:

辅助属性,横表:t_bd_flexauxpropdata(页面:bd_flexauxprop),纵表:t_bd_flexauxpropdata_bd(页面:bd_flexauxprop_bd)、t_bd_flexauxpropdata_txt(页面:bd_flexauxprop_txt)。

核算项目组合,横表:t_gl_assist(页面:gl_assist),纵表:t_gl_assist_bd(页面:gl_assist_bd)、t_gl_assist_txt(页面:gl_assist_txt)。

注意:弹性域字段的某个维度值如为空将不存储!

至此,我们就理清了关于弹性域字段数据的存储位置了。

洋洋洒洒写了这么多,可能还是有小伙伴没看太懂,行,那我再以一张图片给大家简单说明一下,大家结合前面的内容消化消化,希望能对各位有所帮助。

弹性域.jpg

① 在辅助属性定义/核算维度中维护属性/维度定义。

② 有一个基础资料实体(例如:物料),该实体上有一个基础资料字段(例如:辅助属性)关联到辅助属性定义/核算维度。

③ 在业务单据上有一个基础资料字段(basefield)&弹性域字段(flexfield),基础资料字段关联到基础资料实体,弹性域字段的“基础资料字段”属性关联到单据上的基础资料字段,“弹性域类型”属性与基础资料实体的基础字段所关联的保持一致。

④ 业务单据录入数据保存后,弹性域字段保存的是弹性域横表的主键ID。

⑤ 通过弹性域实体(bos_flex)可查询到属性/维度值是存在哪个横表中的。

⑥ 业务单据上弹性域字段各属性/维度的值在纵表中可查询到。


最后,让我们来总结一下:

  • 弹性域数据表包含横表和纵表。

  • 业务单据上弹性域字段存储的是弹性域横表中数据的主键ID。

  • 弹性域实体(基础资料,标识:bos_flex)记录了弹性域字段值是存储在哪个实体,哪张数据表中的,即:弹性域数据表中的横表。

  • 弹性域实体的数据表中的数据是平台已预置好的。如:“辅助属性定义”定义的属性,其值是存储在实体“辅助属性值”(标识:bd_flexauxprop,对应的数据表:t_bd_flexauxpropdata)中的;“核算维度”中定义的属性,其值是存储在实体“核算项目组合”(标识:gl_assist,对应的数据表:t_gl_assist)中的。


大家如有任何建议和意见,欢迎在评论区留言,我将努力改进。

创作不易,如能帮到大家,请动动您的金手指点赞鼓励一下,非常感谢~【emoji】【emoji】【emoji】


赞 39