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

能否从传统ABAP程序调用ABAP RAP的CRUD方法?

能否从传统ABAP程序调用ABAP RAP的CRUD方法?

完全可以。ABAP RAP提供了多种机制让传统ABAP程序调用其CRUD操作,核心可通过服务代理或直接调用RAP定义的事务API(Transactional API)、查询API实现。

一、调用RAP的READ操作(读取数据)

RAP的读取逻辑通常通过CDS查询视图或服务定义暴露,传统ABAP程序有两种调用方式:

方式1:直接使用RAP暴露的CDS查询视图

若RAP项目中定义了公开访问的CDS接口视图(如Z_I_XXXXX),可直接用SELECT语句读取数据,后续用于ALV展示:

DATA(lt_data) = VALUE zty_xxxx( ).
SELECT * FROM z_i_xxxx INTO TABLE @lt_data WHERE key_field = 'XXX'. "添加过滤条件

"调用ALV显示数据
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_structure_name = 'ZTY_XXXX'
  TABLES
    t_outtab         = lt_data.

方式2:通过服务代理调用查询服务

若RAP服务以OData形式暴露,可先在SEGW或SE80中生成服务代理类(如ZCL_PROXY_XXXX),再在传统程序中实例化调用:

DATA(lo_proxy) = NEW zcl_proxy_xxxx( ).
DATA(lt_result) = VALUE zty_proxy_xxxx_result( ).

TRY.
    lo_proxy->execute_query(
      EXPORTING
        iv_filter = 'KeyField eq ''XXX''' "符合OData格式的过滤条件
      IMPORTING
        et_result = lt_result
    ).
  CATCH cx_ai_system_fault INTO DATA(lx_fault).
    "处理系统异常
ENDTRY.

二、调用RAP的CREATE/UPDATE/DELETE操作(写操作)

RAP的写操作依赖事务边界,推荐通过以下两种方式实现:

方式1:使用RAP事务API(推荐)

若RAP项目在行为定义中通过DEFINE TAPI FOR ENTITY声明了事务API,可直接调用对应的全局类方法:

"创建数据示例
DATA(ls_create) = VALUE zty_xxxx( field1 = 'VAL1' field2 = 'VAL2' ).
DATA(lt_created_keys) = VALUE zty_xxxx_key( ).

TRY.
    zcl_tapi_xxxx=>create(
      EXPORTING
        is_data = ls_create
      IMPORTING
        et_key  = lt_created_keys
    ).
    COMMIT WORK.
  CATCH cx_rap_tapi INTO DATA(lx_tapi).
    "处理RAP事务异常
    ROLLBACK WORK.
ENDTRY.

"删除数据示例
DATA(ls_delete_key) = VALUE zty_xxxx_key( key_field = 'XXX' ).

TRY.
    zcl_tapi_xxxx=>delete(
      EXPORTING
        is_key = ls_delete_key
    ).
    COMMIT WORK.
  CATCH cx_rap_tapi INTO lx_tapi.
    ROLLBACK WORK.
ENDTRY.

方式2:通过服务代理调用写操作

基于生成的服务代理类,调用对应实体的CRUD方法:

DATA(lo_proxy) = NEW zcl_proxy_xxxx( ).
DATA(ls_create_data) = VALUE zty_proxy_xxxx_create( field1 = 'VAL1' ).

TRY.
    lo_proxy->create_entity(
      EXPORTING
        is_entity = ls_create_data
      IMPORTING
        es_entity = DATA(ls_created)
    ).
    COMMIT WORK.
  CATCH cx_ai_system_fault INTO DATA(lx_fault).
    ROLLBACK WORK.
ENDTRY.

注意事项

  • 确保传统ABAP程序的用户拥有RAP服务的对应权限(如CDS视图访问权限、事务API执行权限)
  • 调用写操作时必须正确处理事务边界(COMMIT WORK/ROLLBACK WORK),遵循RAP的事务逻辑
  • 若RAP使用未检查的更新(Unchecked Updates),需额外关注数据一致性

内容的提问来源于stack exchange,提问作者I.B.N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:07:13