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

如何为通过CDS视图创建的OData服务生成供Fiori使用的function import

基于CDS视图的OData服务添加Function Import的实现方案

完全可以不依赖SEGW事务,为基于CDS视图生成的OData服务创建Function Import,主流实现方式分两种,对应不同的CDS服务架构:

场景1:RAP架构的CDS OData服务

如果是基于REST应用编程(RAP)模型开发的CDS服务,直接通过行为定义(BDL)声明静态操作即可自动生成对应的Function Import,无需额外配置:

  • 在CDS行为定义中声明static function类型的操作,指定输入参数和返回结构
  • 实现对应操作的ABAP处理逻辑,激活后OData服务会自动生成同名Function Import
    示例BDL代码:
define behavior for ZC_MyBusinessObject alias BO
persistent table zmy_db_table
lock master
authorization master (global)
{
  // 声明静态Function,无副作用、支持HTTP GET调用
  static function GetTotalRecords( inputYear : abap.numc(4) ) result [1] abap.int4;
}

场景2:传统@OData.publish: true发布的CDS OData服务

如果是使用@OData.publish: true注解直接发布的非RAP架构CDS OData服务,通过扩展OData服务的标准生成类手动注册即可:

  1. 找到服务对应的模型扩展类*_MPC_EXT和数据提供扩展类*_DPC_EXT,命名规则通常为ZCL_<OData服务标识>_MPC_EXT/ZCL_<OData服务标识>_DPC_EXT
  2. 重写MPC_EXT类的DEFINE方法,注册Function Import的元数据:
METHOD define.
  super->define( ).
  " 创建Function Import实例
  DATA(lo_func_import) = model->create_function_import( iv_name = 'GetCustomData' ).
  " 配置返回实体集,若返回基础类型可调用set_return_type方法
  lo_func_import->set_return_entity_set( iv_entity_set_name = 'ZC_MYCDSVIEWSet' ).
  " 配置输入参数
  DATA(lo_param) = lo_func_import->create_parameter( iv_name = 'Status' iv_abap_type = 'ABAP.CHAR(2)' ).
  lo_param->set_nullable( abap_false ).
  " 配置支持HTTP GET调用
  lo_func_import->set_supported_for_http_get( abap_true ).
ENDMETHOD.
  1. 重写DPC_EXT类的/IWBEP/IF_MGW_APPL_SRV_RUNTIME~EXECUTE_ACTION方法,实现业务逻辑:
METHOD /iwbep/if_mgw_appl_srv_runtime~execute_action.
  CASE iv_action_name.
    WHEN 'GetCustomData'.
      " 读取传入参数
      DATA(lv_status) = it_parameter[ name = 'Status' ]-value.
      " 自定义业务逻辑处理,返回结果
      SELECT * FROM zc_mycdsview WHERE status = @lv_status INTO CORRESPONDING FIELDS OF TABLE @er_data.
    WHEN OTHERS.
      " 调用标准逻辑处理其他请求
      super->/iwbep/if_mgw_appl_srv_runtime~execute_action(
        EXPORTING iv_action_name = iv_action_name
                  iv_entity_set_name = iv_entity_set_name
                  iv_source_name = iv_source_name
                  it_parameter = it_parameter
                  io_tech_request_context = io_tech_request_context
        IMPORTING er_data = er_data
                  es_response_context = es_response_context ).
  ENDCASE.
ENDMETHOD.

上述两种方式生成的Function Import均可直接在Fiori应用中正常调用,和SEGW创建的Function Import使用逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:09:01