#使用技巧# 查询单据上引用了哪些插件或插件被哪些单据引用(sql)原创
金蝶云社区-大风里最靓的仔
大风里最靓的仔
107人赞赏了该文章 1594次浏览 未经作者许可,禁止转载编辑于2023年02月06日 21:54:14
封面

1. 业务背景与导语

在日常客制化开发或BOS配置中,有些时候需要查询某一层单据上使用了哪些插件或某个插件被哪些单据引用,这个时候如果单纯靠BOS平台从表单到操作一项项去查,非常不方便也不直观。这个时候就希望有个工具或者方法可以快速又直观的解决这个问题,目前BOS暂未有这个功能,写PythonC#虽然可以解决但是要求比较高不适合大部分人,那么就只能从SQL入手,本文将讲诉SQL如何解决查询某一层单据上使用了哪些插件或某个插件被哪些单据引用。

 

2. 实现步骤

(1) 首先我们需要明确金蝶框架特性,我们在BOS里面不管新增单据还是修改单据,最终都会形成XML记录到T_META_OBJECTTYPE里面,并且要注意到扩展的每一层单据都有自己的FID标识,以采购订单为例,扩展三层,那么在T_META_OBJECTTYPE就会有三层不同的XML记录且不互相影响,明白这一点,对接下来理解SQL有所帮助,插件注册的位置决定其所处于单据扩展层次。

(2) 明白上面所说,接下来可以看具体实例是怎么样的,我们以标准层采购订单为例展示效果,来查询标准层采购订单注册了哪些插件。利用XML的数据方法,点击Dome可以跳转新的页面,这个时候就显示标准层采购订单上引用了什么插件了。


 图一:

image.png

图二:

image.png


(3) 最后,再展示下查询某一个插件类被哪些单据引用的查询效果,语句跟步骤二没有太大的区别

 

 图三:

image.png


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

赞 107