#使用技巧#走进金蝶云星空后台表原创
金蝶云社区-CQ周玉立
CQ周玉立
190人赞赏了该文章 10341次浏览 未经作者许可,禁止转载编辑于2022年12月19日 21:31:46
封面

一、业务背景

    接触金蝶云星空这个系统,你是否经常在找表时不只所错?

     不知道这个单据存在哪?某个字段又从哪取数?

     "谁有最新的数据字典?"

     金蝶云星空系统数据后台是典型的关系型数据库,那么在系统应用或者开发过程中,肯定少不了SQL的使用,这个系统使用了EF CodeFirst 技术,只要在BOS里面添加单据元数据就会自动生成单据对应的后台表结构。那么,系统的“数据字典“就是一个谜了,虽然官方也发布了数据字典PDM文档,但也仅限于标准产品的字段,二开字段肯定是没有的,那么我们就需要一个方法能够快速的找准单据的后台表结构。

    今天凭着个人经验总结,给大家分享一下如何通过BOS快速找到单据的表结构,理解BOS单据与数据库表之间的联系

    BOS平台的强大,也许超乎你的想象,打开后台数据库表这个"黑盒子",也许你就差这一步了!

    你想获取的信息 ,也许就在眼前,只是你不知道而已,世界上最遥远的距离莫过于此!

    掌握这个知识技巧之后,你就不会太依赖于"数据字典了"!

二、关键步骤

    1.知识储备

        我们要研究金蝶云星空的后台表结构,需要具备2个基础:

  • 数据库基础,SQL基础

  • 会使用金蝶云星空BOS平台

    2.重新认识单据

     数据基础和SQL基础我就不多说了,大家应该比我更擅长,我这里简单给大家剖析介绍一下:《单据的表结构与BOS单据的联系》

     众所周知,金蝶云星空系统是由不同类型的业务对象构成的,最常见的就是:单据、基础资料。

     虽然系统中有这么多的业务对象类型,但核心都是以单据(也可称为表单)为基础的,我们来重新认识一下单据的构成。

     下图是一个单据的主要构成,简单来讲单据就是由布局控件+实体字段构成。布局控件就是仅用于界面展示,不会存储实际物理数据,而实体字段除了有特定的展示效果之外,更重要的是构成了单据业务数据,会存储到数据库物理表中。

image.png

    单据实体数据,就是上图中红色的内容。系统中的实体就只有上图中的4种

    对于实体,我们可以这样理解,实体是一层一层的,最外层是单据头,单据头里面可以有多个子单据头或者多个单据体,子单据体则是单据体的下一层,子单据体下面其实还可以再挂子单据体,这样单据的数据就可以呈现"树形"结构了,多个不同的实体组合成了一个单据,实体字段都是放在这些实体中的!我们只要搞清楚实体的层次关系就能知道后台表结构的关系了。

 (扩展:对于单据实体构成详细介绍,我写过另外的文章讲解,可以参考看看:【Python插件入门】第3篇:插件中如何进行数据操作)

    3.单据的实体结构与数据库表结构之间的联系

什么!你问我一个单据对应几张表?实体构成了单据,实体表结构就是单据的数据库表结构!

下面我们用一张图看懂1个实体的表构成逻辑,只要我们理解了这张图,就掌握了BOS中的"数据字典"!

image.png

这里不能发语音,关于这个知识的视频讲解,如需要可私信我获取,这里简单介绍一下:

  • 1个实体由实体主表+实体拆分表构成,是实体拆分表又可以分为多业务拆分表+多语言拆分表(实体主表一定有,拆分表不一定有!)

  • 拆分表:表名的构成规则是"实体主表名_拆分表后缀",查询拆分表中的字段时,只需要知道拆分表的后缀就可以了。

  • 多语言表:表名的构成规则是"实体主表名_L",只要实体中存在多语言文本,就会自动生成这个表,并将多语言字段名添加到这个表中。

  • 实体主键:可以分为单据(主单据头)主键、子单据头主键、单据体主键、子单据体主键,常见的命名规范如上图所示。

  • 实体主表、拆分表、多语言表通过实体主键进行关联。

  • 除了业务字段之外,我们应该更注意实体主键的使用,这是把多个表、多个实体连接起来的“标记”。实体表中的单据主键标记了这个实体数据属于哪个单据,拆分表中的实体主键标记了这个拆分表数据属于哪一个实体主表。

  • 基础资料/辅助资料字段(F8字段):实体表中的F8字段记录的是该资料数据的主键,通过这个数据可以关联对应资料类型的单据数据。

  • 这些主键通常被称为"内码"或者"ID",字段类型也分为整数、字符串,这两种,并不是所有ID都是整数,这个要注意!

上面描述的这些信息知道了,你还需要数据字典吗?其实BOS单据里面已经告诉了我们这些信息,你平时注意到了吗?


    3.通过BOS来找到单据实体结构

怎么通过BOS来找到单据实体结构、业务字段名、拆分表、主键字段名等信息呢?下面我们通过BOS单据截图来剖析。

我们在BOS中打开一个单据来看下单据的实体结构,点开【批量编辑字段属性】即可查看实体结构,以采购订单为例:

PS:【批量编辑属性】界面只会显示单据的实体结构信息,不会显示其他布局控件,更容易帮助我们分析单据的实体结构哦!

image.png

  • 先看单据的【表单属性】,可以知道单据的主键字段名和主键字段类型

image.png

  • 找到单据的最外层--单据头,也可以称为单据的【主实体】

image.png

  • 展开单据头实体,选中一个字段看一下

image.png

  • 再选择一个基础资字段看看

image.png

  • 多语言文本字段

image.png

  • 看下子单据头

image.png

  • 看下子单据头的字段:查询单据头字段时,要注意看字段的所属实体是不是子单据头!

image.png

  • 我们再来看看单据体

image.png

  • 看看单据体的字段:查询单据体的字段,要注意看所属拆分表是不是[缺省值]

image.png

  • 下面看看子单据体:子单据体的数据不能直接与单据头信息关联,子单据体是单据体的下级,所以要先关联父分录。

image.png

    4.注意事项

看完上面采购订单的单据剖析,你应该明白了BOS单据结构与数据库表的关系,还有一些注意点:

  • 通常来需要查数据库时是这样的顺序:明确查询字段->找字段所在实体->实体主表名->字段是否在拆分表中->与其他实体进行关联

  • 标准产品通常会把不同子单据头的数据放在不同的页签,但是要注意表面上看到字段所在的页签,不代表字段在这个实体中,一定要在BOS单据中看实体结构,才是最准确的

  • 前面截图中右上角的说明:同一单据中4种实体之间的强关联逻辑(系统自带的关联性),对于这个问题再强调2点:

       ①多单据体之间并无强关联,只是分别和单据头有强关联(通过单据主键关联)。

       ②子单据体只能先和父分录单据体关联(通过父分录实体主键),然后再往上级的实体进行关联

  • 保存/修改写入数据时:可以把单据理解成数据录入的的界面,然后根据实体结构写入数据库表中。

  • 查询读取数据时候:系统又根据实体表构成从对应的数据库表中读取数据。

三、应用小结

  • 了解这个知识点之后,让你对系统的数据构成与存储应该更深一步了,相信遇到问题也会有更多分析和解决思路。

  • 不管是二开字段还是标准字段,通过数据库查询、更新,都不再是问题了。

  • 二开单据时,也要注意表与字段的命名规范,了解这个结构之后,你也能设计出更适合业务需求的单据结构。



  好了,就讲这么多,至此正文结束================================================= 

单据的表可以绑定视图哦,这个功能大有用处,后续我也会做相关的实践分享,敬请期待。

大家多多点赞、评论、收藏,一波三连走起来,感谢大家捧场!

赞 190