ABAP 7.40版本ABAP CDS无法使用$session变量,如何获取当前用户?
替代ABAP CDS硬编码用户ID的可行方案
针对ABAP 7.40版本无法直接使用$session变量的问题,以下是几种替代硬编码用户ID的实用方案:
方案一:参数化CDS视图,调用时传入当前用户
定义带参数的CDS视图,在ABAP程序调用时传入系统字段SY-UNAME的值:
- 定义参数化CDS视图:
define view Z_USR05_VIEW with parameters p_uname : abap.char(12) as select from usr05 where bname = :p_uname
- 在ABAP程序中调用视图:
SELECT * FROM Z_USR05_VIEW( p_uname = sy-uname ) INTO TABLE @DATA(lt_usr05_data).
这种方式灵活可控,适合需要在不同场景传入不同用户的需求。
方案二:通过AMDP函数获取当前用户
利用AMDP(ABAP Managed Database Procedures)在数据库层面获取当前用户,然后在CDS视图中调用该函数:
- 创建AMDP类及方法:
CLASS zcl_amdp_get_user DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_amdp_marker_hdb. CLASS-METHODS get_current_user RETURNING VALUE(r_uname) TYPE abap.char(12). ENDCLASS. CLASS zcl_amdp_get_user IMPLEMENTATION. METHOD get_current_user BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY. r_uname = CURRENT_USER; ENDMETHOD. ENDCLASS.
- 在CDS视图中调用AMDP函数:
define view Z_USR05_VIEW as select from usr05 where bname = zcl_amdp_get_user=>get_current_user()
此方案适合需要在CDS内部直接获取当前用户,无需外部传参的场景。
方案三:尝试使用CDS内置函数SYSTEM_USER()
如果你的ABAP 7.40版本安装了较高的补丁包,可能支持CDS内置函数SYSTEM_USER()直接获取当前数据库用户(该用户与ABAP用户通常一致):
define view Z_USR05_VIEW as select from usr05 where bname = SYSTEM_USER()
建议先在系统中测试该函数是否可用,若支持则这是最简便的方案。
内容的提问来源于stack exchange,提问作者Rone
相关产品推荐
相关产品推荐

