本文介绍了在金蝶BOS系统中,如何使用SQL查询单据上使用的插件或某插件被哪些单据引用的方法。通过解析存储在T_META_OBJECTTYPE表中的XML记录,可以快速查找相关信息。文中详细阐述了实现步骤,包括了解金蝶框架特性、具体查询示例及应用小结,强调了理解查询思路的重要性,并提供了SQL查询语句示例。
1. 业务背景与导语
在日常客制化开发或BOS配置中,有些时候需要查询某一层单据上使用了哪些插件或某个插件被哪些单据引用,这个时候如果单纯靠BOS平台从表单到操作一项项去查,非常不方便也不直观。这个时候就希望有个工具或者方法可以快速又直观的解决这个问题,目前BOS暂未有这个功能,写Python或C#虽然可以解决但是要求比较高不适合大部分人,那么就只能从SQL入手,本文将讲诉SQL如何解决查询某一层单据上使用了哪些插件或某个插件被哪些单据引用。
2. 实现步骤
(1) 首先我们需要明确金蝶框架特性,我们在BOS里面不管新增单据还是修改单据,最终都会形成XML记录到T_META_OBJECTTYPE里面,并且要注意到扩展的每一层单据都有自己的FID标识,以采购订单为例,扩展三层,那么在T_META_OBJECTTYPE就会有三层不同的XML记录且不互相影响,明白这一点,对接下来理解SQL有所帮助,插件注册的位置决定其所处于单据扩展层次。
(2) 明白上面所说,接下来可以看具体实例是怎么样的,我们以标准层采购订单为例展示效果,来查询标准层采购订单注册了哪些插件。利用XML的数据方法,点击Dome可以跳转新的页面,这个时候就显示标准层采购订单上引用了什么插件了。
图一:
图二:
(3) 最后,再展示下查询某一个插件类被哪些单据引用的查询效果,语句跟步骤二没有太大的区别
图三:
3. 应用小结
授人以鱼不如授人以渔,本文所展示的SQL只是示例的,重要的是明白其中的思路,这样才能灵活应用与变化,末尾贴上SQL语句。
--查询单据上都有哪些插件
select a.FID,a.FKERNELXML,b.FNAME,a.Dome
from
(select FKERNELXML.query('//ClassName') 'Dome', * from T_META_OBJECTTYPE) a
left join T_META_OBJECTTYPE_L b on b.FID = a.FID
where b.FLOCALEID = '2052' and b.FNAME = '采购订单'
-- 查询插件被哪些单据引用
select a.FID,a.FKERNELXML,b.FNAME,a.Dome
from
(select FKERNELXML.query('//ClassName') 'Dome', * from T_META_OBJECTTYPE) a
left join T_META_OBJECTTYPE_L b on b.FID = a.FID
--插件类名
where convert(varchar(max),Dome) like '%CMK_LS_POOrderEdit%'
END
推荐阅读