You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改标准非托管查询的筛选器行为(供应商列表Fiori应用场景)

如何修改标准非托管查询的筛选器行为(供应商列表Fiori应用场景)

我之前也碰到过非托管CDS查询的筛选逻辑定制难题,结合你的场景给你几个可行的方案,避开直接修改标准类的风险:

方案一:增强标准非托管查询的实现类(安全扩展方式)

虽然CL_FAP_SUPPLIER_LIST_V2是标准SAP类,但咱们可以通过ABAP的增强机制来修改它的筛选逻辑,不用动原始代码:

  • 首先找到这个类里处理筛选条件的核心方法,比如IF_FINB_QUERY~PROCESS或者专门处理WHERE子句的方法(可以用SE24查看类的接口和方法)
  • 给这个方法添加隐式增强或者找合适的显式增强点,在代码里判断:如果当前筛选的字段是你自定义的INDUSTRIES,并且用户选择的操作符是EQ(等于),就把这个条件转换成包含匹配的逻辑——比如把INDUSTRIES = 'XXX'改成INDUSTRIES LIKE '%XXX%',或者直接用CONTAINS(INDUSTRIES, 'XXX')
  • 注意增强逻辑要加判断条件,只针对你的自定义字段生效,别影响其他标准字段的筛选行为

方案二:创建自定义托管CDS视图作为中间层(推荐)

因为非托管查询的注解限制太多,不如绕开它,自己建一个托管视图来承接筛选逻辑:

  1. 新建一个托管CDS视图Z_C_SupplierList_Ext,以C_SupplierList为基础数据源,把所有需要的标准字段和你的INDUSTRIES字段都包含进来
  2. 在这个新视图的INDUSTRIES字段上配置你之前尝试的注解:
    @ObjectModel.readOnly: true
    @ObjectModel.virtualElement:true
    @ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_BUPA_INDUSTRIES_CALC_EXIT'
    @ObjectModel.filter.transformedBy: 'ABAP:ZCL_BUPA_INDUSTRIES_FILTER'
    
    这里因为是托管视图,之前的Gateway报错就不会出现了
  3. 修改Fiori应用的数据源配置,指向你新建的Z_C_SupplierList_Ext视图

这个方案完全基于自定义扩展,不用碰标准代码,后续升级SAP版本也不容易受影响,是最稳妥的选择。

方案三:调整表函数的筛选逻辑

既然你的INDUSTRIES字段是从表函数取的,也可以在表函数里反向处理筛选条件:

  • 在表函数的逻辑里,判断如果传入了针对INDUSTRIES的EQ筛选值,不要直接匹配拼接后的字符串,而是去关联原始的供应商行业表,检查该供应商是否包含这个行业码
  • 比如在表函数的WHERE子句里加:EXISTS (SELECT 1 FROM <供应商行业表> s WHERE s.supplier = supplier_key AND s.industry_code = :filter_value)
  • 这样即使拼接字符串里有多个行业,只要包含用户输入的那个,就能被筛选出来

总结

优先推荐方案二,扩展性和维护性最好;如果不想改动Fiori应用的数据源,方案一的增强方式也能解决问题,但要注意增强代码的兼容性;方案三适合对表函数逻辑有控制权的场景。

备注:内容来源于stack exchange,提问作者Cutter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:28:12