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

如何通过RAP在ODataV2预览版中实现搜索字段(金额/货币)的依赖验证?

解决RAP中金额与货币筛选依赖校验的方案

针对你遇到的筛选场景下无法校验金额与货币字段依赖的问题,给你两个可行的实现方向:

方向一:利用Query Validation接口实现校验

RAP专门提供了针对查询/筛选场景的校验机制,通过实现IF_QUERY_VALIDATION接口即可完成,步骤如下:

  • 创建ABAP类,实现IF_QUERY_VALIDATION接口的VALIDATE方法
  • 在方法内获取当前筛选条件里的金额和货币字段值:
    DATA(lo_filter) = io_request->get_filter( ).
    DATA(lv_amount) = lo_filter->get_value( iv_element = 'AMOUNT' ).
    DATA(lv_currency) = lo_filter->get_value( iv_element = 'CURRENCY' ).
    
  • 判断若金额有值但货币为空,抛出错误消息并终止筛选:
    IF lv_amount IS NOT INITIAL AND lv_currency IS INITIAL.
      DATA(lo_msg_manager) = cl_message_manager=>get_instance( ).
      lo_msg_manager->add_message(
        iv_msg_type = if_abap_behv=>message_type-error
        iv_msg_text = 'Currency field is empty'
      ).
      RAISE EXCEPTION TYPE cx_query_validation_failed.
    ENDIF.
    
  • 在CDS Query定义中,通过@Query.validation: 'ZCL_QUERY_VALIDATION'将校验类绑定到查询上

方向二:用Feeder Class拦截筛选请求(Fiori Elements场景适用)

如果你的RAP应用是基于Fiori Elements的列表报表,可通过Feeder Class处理:

  • 创建继承自CL_FPM_GUIBB_LIST的Feeder Class
  • 重写PROCESS_AFTER_INPUT方法,在用户点击「Go」时触发校验逻辑
  • 方法内获取筛选参数,不符合条件则添加错误消息并阻止数据加载:
    DATA(lo_filter) = mo_fpm->get_filter( ).
    DATA(lv_amount) = lo_filter->get_value( 'AMOUNT' ).
    DATA(lv_currency) = lo_filter->get_value( 'CURRENCY' ).
    
    IF lv_amount IS NOT INITIAL AND lv_currency IS INITIAL.
      DATA(lo_msg_manager) = cl_message_manager=>get_instance( ).
      lo_msg_manager->add_message(
        iv_msg_type = 'E'
        iv_msg_text = 'Currency field is empty'
        iv_display_type = cl_message_manager=>display_type_inline
      ).
      mo_fpm->set_event_result( iv_result = if_fpm_constants=>gc_result-failure ).
    ENDIF.
    
  • 在Fiori Elements的Manifest文件中,将该Feeder Class配置到对应的列表报表组件

补充:Unmanaged Query场景的消息提示

你之前尝试的Unmanaged Query,只需在拦截逻辑中添加消息到消息管理器,即可在预览界面显示提示:

DATA(lo_msg_manager) = cl_message_manager=>get_instance( ).
lo_msg_manager->add_message(
  iv_msg_type = if_abap_behv=>message_type-error
  iv_msg_text = 'Currency field is empty'
).

添加后前端会自动弹出错误提示,同时阻止数据展示。

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:43:25