打开开发集成平台(BOS),会被里面简单而强大的功能折服。随意打开一个业务(如销售订单),再进去 编辑--批量编辑字段属性, 在这里可以修改很多东西并且会持久保存会生效。问题就来了,能持久保存,那是保存在哪里呢?以什么方式保存么??
还好我有个强大的师傅,当时我问他销售订单这一业务,他告诉我了后台数据库有T_META_O JECTTYPE表,以XML的方式保存。一用 语句select FKERNELXML, * from T_META_OBJECTTYPE where FID='SAL_SaleOrder' 即可了。系统BOS(项目 这一工具栏)有不同的类型,如 基础资料、单据、动态表单、系统参数、监控对象、账表等不同类型。我又要猜想下,肯定有个字段规定它们的type值,顾名思义,我猜想是 字段FMODELTYPEID 了,写了个SQL语句做下验证,代码如下:
select FID as 'FormId', FMODELTYPEID as '类型编码', '销售价目表' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'基础资料' as '类型' from T_META_OBJECTTYPE where FID='BD_SAL_PriceList'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '销售条款' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'基础资料' as '类型' from T_META_OBJECTTYPE where FID='BD_SALCLAUSE'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '销售订单' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'单据' as '类型' from T_META_OBJECTTYPE where FID='SAL_SaleOrder'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '发货通知单' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'单据' as '类型' from T_META_OBJECTTYPE where FID='SAL_DELIVERYNOTICE'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '价格综合查询' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'动态表单' as '类型' from T_META_OBJECTTYPE where FID='SAL_QueryAllPrice'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '客户应收余额查询' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'动态表单' as '类型' from T_META_OBJECTTYPE where FID='SAL_RecAmtQuery'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '销售系统参数' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'系统参数' as '类型' from T_META_OBJECTTYPE where FID='SAL_SystemParameter'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '单据用户参数模板' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'系统参数' as '类型' from T_META_OBJECTTYPE where FID='Sal_PriceListUserPara'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '销售订单执行明细表' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'账表' as '类型' from T_META_OBJECTTYPE where FID='SAL_DetailReport'
union all
select FID as 'FormId', FMODELTYPEID as '类型编码', '销售排名表' as '对象名', FSUBSYSID as '系统ID', FSUBSYSID as '子系统ID' ,
'账表' as '类型' from T_META_OBJECTTYPE where FID='SAL_RPT_SaleRankingList'
结果截图如下
以上的猜想是OK的,读者可以验证更加多。
XML是可扩展标记语言,非常适合万维网传输(题外话,XML与JSON也是一对很有意思的“冤家”,有兴趣可以自行理解)。MSSQL在2008新增了XML 为列的存储类型,适合于大数据存储,只是不方便操作。
以销售订单为例,复制其字段FKERNELXML出来, 为了方便显示XML内容,我用常用IDE Notepad++进行了查看。如下图
Metadata是元数据,又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息。FormMetaData可以说是窗体主数据,标识了窗体的所有信息了。顾名思义,BusinessInfo是应该是列表信息,这部分是业务信息以及字段如何在后台表存储的,LayoutInfos应该是布局信息,说明了外观参数。
为了直观表达效果,以下用截图来对比信息,表单插件信息如下
以下是列表插件的对比,
服务校验规则的对比如下
物流详细信息的分录信息对比如下
基本信息 销售组的 对比信息如下
我的想法,是想提供个思路给大家查看具体的BOS数据是存储在那里,更多之处,有兴趣的同学可以进一步进行查看。谢谢。
推荐阅读