本文详细解释了BOS星空中表单的存储方式,指出表单文件实际上是XML文件存储在SVN上,每次操作都会与数据库中的版本进行比对。同时,说明了表单的XML元数据存储在数据库的T_META_OBJECTTYPE表中,并介绍了相关表字段的含义。此外,还展示了如何通过SQL查询了解特定表被哪些单据使用,以及查找系统所有Python脚本的方法。
刚接触BOS星空的同学,也许会对表单的存储很迷茫,一时半会搞不清楚,甚至有同学认为表单是存在指定目录下的。下面我们就仔细剖析一下表单的存储方式,请看图:
在右边项目里面,选中一个表单,点击右键->打开所在文件夹,可以看到表单文件存放的目录,当我们每次登录Bos协同云环境或者点击图上的刷新按钮时, 都会从SVN上面获取最新的文件,每次我们选中单据点击右键->同步业务对象到数据库,其实是用刚才打开的目录下的文件里面的版本号和数据库中的进行比对,版本号不一样话会提示版本的高低,根据实际情况选择是要更新业务对象到数据库,还是更新数据中心业务对象到应用。
可以从两张图中清晰的看到,同一张单据,协同云上的版本高于数据中心。
我们同步验证一下,果然也是和我们想的一样。
大家刚才也看到了,其实表单文件就是一推XML文件,我们关闭单据,选中右边项目中的单据,点击刷新旁边的打开xml增量按钮,如图:
就可以看到这张表单的xml文件,xml文件的结构也特别简单,里面会包含业务信息和布局信息,这里就不赘述了。
每次我们打开表单,bos IDE会从数据库加载xml文件,那文件存在哪里呢
表单的xml元数据信息就是存在T_META_OBJECTTYPE这张表的FKERNELXML这个字段,可以点击字段查看具体信息,同学们会发现和bos里面看到的内容一模一样。
下面介绍一下T_META_OBJECTTYPE、T_META_OBJECTTYPE_E 这两张表中字段的含义。
T_META_OBJECTTYPE
FMODELTYPEID:业务对象ID,100:表单,400:基础资料,等等。
FVersion:业务对象版本号。
FBASEOBJECTID:上一级对象Id,可以看出单据的扩展关系,上面一层是被扩展节点的ID。
FDEVTYPE:0 和1 好像都是金蝶自己的单据,2是二开的。
FSUPPLIERNAME:开发商标识。
FINHERITPATH:单据继承关系。
T_META_OBJECTTYPE_E
FSEQ:加载顺序,一般情况下都是0,只有并行扩展的情况才会出现1和2,没有并行扩展是按照T_META_OBJECTTYPE 表中的FBASEOBJECTID 顺序加载的。
今天先写这么多,未完待续。。。。。。
接着写,比如我们想知道某个表被那几个单据使用,就可以在xml中查询,sql脚本如下:
select FID ,
(select FNAME from T_META_OBJECTTYPE_L where FID = T_META_OBJECTTYPE_Temp.FID and FLOCALEID = 2052) FNAME ,
FKERNELXML ,(select FNAME from T_META_OBJECTTYPE_L where FID = T_META_OBJECTTYPE_Temp.FID and FLOCALEID = '2052') FNAME ,
Item from(select FKERNELXML.query('//TableName') 'Item', *
from T_META_OBJECTTYPE) T_META_OBJECTTYPE_Temp where convert(varchar(max),Item) like '%T_BD_STAFF%'
类似的比如我们想找到系统所有的python脚本,也可以写类似的脚本,找到<PyScript>节点包含的内容就可以了。
推荐阅读