能否从传统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.
相关产品推荐
相关产品推荐

