二开案例.基础资料.过滤
【应用场景】给单据上的基础资料字段,设置额外的过滤条件。
【案例演示】给采购订单的供应商字段,设置不同的过滤条件,并观察其影响范围。
【基础知识】
<1>单据上的础资料字段,可设置三种过滤条件,分别是过滤、高级过滤和过滤界面条件。
过滤:专用于在单据中进行基础资料查询,最终会和高级过滤的条件合并在一起使用。
高级过滤:专用于在单据中进行基础资料查询,最终会和过滤的条件合并在一起使用。
过滤界面条件:专用于在单据的列表过滤界面中进行基础资料查询,包括过滤条件表格,批量过滤条件表格,快捷过滤等。
<2>单据中的基础资料字段的过滤条件来源有:基础资料.过滤、基础资料.高级过滤、BeforeF7Select事件(https://vip.kingdee.com/article/104945110479021056)等。
列表过滤界面中的基础资料字段的过滤条件来源有:基础资料.过滤界面条件、BeforeFilterGridF7Select事件(https://vip.kingdee.com/article/104956800675357696)等。
【实操1-基础资料.过滤】
<1>BOSIDE扩展采购订单,选中供应商字段,将过滤属性设置为:FNumber like '%GY%',保存元数据,如下图所示。
此过滤条件的含义为:只查询编码包含GY的供应商,过滤条件需要遵循SQL语法,用于查询的字段名必须使用字段的标识。
<2>登录业务站点,打开采购订单,观察供应商字段的模糊查询结果,此时返回的查询结果都是编码包含GY的供应商。
<3>数据库抓包SQL如下:
SELECT TOP 5
t0.FNUMBER AS FNumber ,
t0_L.FNAME AS FName ,
t0.FSUPPLIERID AS FSupplierId
FROM T_BD_SUPPLIER t0
LEFT JOIN T_BD_SUPPLIERBASE t1 ON ( t0.FSUPPLIERID = t1.FSUPPLIERID )
LEFT JOIN T_BD_SUPPLIER_L t0_L ON ( t0.FSUPPLIERID = t0_L.FSUPPLIERID
AND t0_L.FLOCALEID = 2052
)
WHERE ( (( t0.FNUMBER LIKE '%GY%' )
AND ( t1.FSUPPLYCLASSIFY <> 'WW' ))
)
AND t0.FUSEORGID = 100003
AND t0.FDOCUMENTSTATUS = 'C'
AND t0.FFORBIDSTATUS = 'A'
ORDER BY t0.FNUMBER;
【实操2-基础资料.高级过滤】
<1>在实操1的基础上继续,BOSIDE扩展采购订单,选中供应商字段,将高级过滤的前提条件设置为:FPurchaseOrgId.FNumber = '101.2',将前置条件成立时的过滤条件设置为:FName like '%YS%',保存元数据,如下图所示。
<2>登录业务站点,打开采购订单,观察供应商字段的模糊查询结果,此时返回的查询结果是编码包含GY且名称包含YS的供应商。
<3>数据库抓包SQL如下:
SELECT TOP 5
t0.FNUMBER AS FNumber ,
t0_L.FNAME AS FName ,
t0.FSUPPLIERID AS FSupplierId
FROM T_BD_SUPPLIER t0
LEFT JOIN T_BD_SUPPLIERBASE t1 ON ( t0.FSUPPLIERID = t1.FSUPPLIERID )
LEFT JOIN T_BD_SUPPLIER_L t0_L ON ( t0.FSUPPLIERID = t0_L.FSUPPLIERID
AND t0_L.FLOCALEID = 2052
)
WHERE ( (( ( t0.FNUMBER LIKE '%GY%' )
AND ( t0_L.FNAME LIKE N'%YS%' )
)
AND ( t1.FSUPPLYCLASSIFY <> 'WW' ))
)
AND t0.FUSEORGID = 100003
AND t0.FDOCUMENTSTATUS = 'C'
AND t0.FFORBIDSTATUS = 'A'
ORDER BY t0.FNUMBER;
----------------------------------------------------------------------------------------------
观察上面的SQL可知,高级过滤条件会和过滤条件合并在一起。
【实操3-基础资料.过滤界面条件】
<1>BOSIDE扩展采购订单,选中供应商字段,将过滤界面条件属性设置为:FName like N'%新宇%',保存元数据,如下图所示。
<2>登录业务站点,打开采购订单列表的过滤界面,观察供应商字段的模糊查询结果,此时返回的查询结果是名称包含新宇的供应商。
<3>数据库抓包SQL如下:
SELECT TOP 5
t0.FNUMBER AS FNumber ,
t0_L.FNAME AS FName ,
t0.FSUPPLIERID AS FSupplierId
FROM T_BD_SUPPLIER t0
LEFT JOIN T_BD_SUPPLIER_L t0_L ON ( t0.FSUPPLIERID = t0_L.FSUPPLIERID
AND t0_L.FLOCALEID = 2052
)
WHERE t0.FSUPPLIERID = t0.FMASTERID
AND EXISTS ( SELECT 1
FROM ( SELECT t0.FMASTERID
FROM T_BD_SUPPLIER t0
LEFT JOIN T_BD_SUPPLIER_L t0_L ON ( t0.FSUPPLIERID = t0_L.FSUPPLIERID
AND t0_L.FLOCALEID = 2052
)
WHERE ( (t0_L.FNAME LIKE N'%新宇%') )
AND t0.FUSEORGID IN ( 1, 100001,
100002, 100003,
100004, 100005,
100006, 100007,
135255, 135713,
135879, 136122,
136492, 144050,
151026, 151043,
174323, 304707 )
) t0sfq
WHERE t0.FMASTERID = t0sfq.FMASTERID )
ORDER BY t0.FNUMBER;
【知识点】
<1>过滤条件查询常量值时要严格按照字段的数据类型来选择格式(是否加N),例如:
如果字段FName是VARCHAR类型,格式是:FName like '%新宇%'
如果字段FName是NVARCHAR类型,格式是:FName like N'%新宇%'
如果未按字段的真实数据类型来写SQL语句,可能导致索引失效,严重影响查询性能。
【参考资料】
【二开案例.基础资料.联动查询(GetValue)】https://vip.kingdee.com/article/127710528226504960
【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696
二开案例.基础资料.过滤
本文2024-09-23 04:20:51发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164716.html