前言
每个顾问可能都知道在报表的选择屏幕可以设置变式,但是用户需要每次到变式目录中选择自己设置的变式。
有没有一种方式,进入程序后自动获取用户设置的变式呢?答案是肯定的。
设置变式
1\. 在自开发程序中,创建变式,名称为 "U_+用户名"
2\. 在开发中程序的 IN ITIALIZATION 事件中添加如下代码
INITIALIZATION. zcl_common=>get_default_variant( ).3\. 使用TCODE打开程序后,选择屏幕自动根据变式填充值
额外说明
1\. 用户 变式: 名称为 "U_+用户名" ,只对特定用户起作用。
2\. 自定义 变式: 名称为 "C_+事务代码" ,如果没有用户变式时,该变
式有效。
3\. 自定义系统变式: 名称为 "CUS&+事务代码" ,这种变式创建时会产
生传输 请求, 如果没有用户变式和自定义变式时,该变 式有效。
4\. 系统变式: 名称为 "SAP&+事务代码" ,这种变式由SAP官方创建,
如果没有前3种变式时,该变式有效。
代码
METHOD get_default_variant. DATA: lv_repid LIKE sy-repid. DATA: lv_subrc LIKE sy-subrc. DATA: lv_variant TYPE rsvar-variant. DATA: lt_callstack TYPE abap_callstack.
CALL FUNCTION 'SYSTEM_CALLSTACK' IMPORTING callstack = lt_callstack.
ASSIGN lt_callstack[ 2 ] TO FIELD-SYMBOL(<fs_stack>). IF sy-subrc EQ 0. lv_repid = <fs_stack>-mainprogram. ENDIF.CHECK lv_repid IS NOT INITIAL. IF sy-slset IS INITIAL AND sy-calld IS INITIAL AND sy-batch IS INITIAL AND sy-tcode <> 'SE38' AND sy-tcode <> 'SA38'.
*--- 用户默认变式 lv_variant = |U_{ sy-uname }|. lv_subrc = is_variant_exists( report = lv_repid variant = lv_variant ).
IF lv_subrc IS NOT INITIAL.*--- 自定义默认变式/不跨Client lv_variant = |C_{ sy-tcode }|. lv_subrc = is_variant_exists( report = lv_repid variant = lv_variant ). IF lv_subrc IS NOT INITIAL.*--- 系统默认变式,跨客户端,"CUS&"开头变式会产生请求 lv_variant = |CUS&{ sy-tcode }|. lv_subrc = is_variant_exists( report = lv_repid variant = lv_variant ). IF lv_subrc IS NOT INITIAL. lv_variant = |SAP&{ sy-tcode }|. lv_subrc = is_variant_exists( report = lv_repid variant = lv_variant ). ENDIF. ENDIF. ENDIF. IF lv_subrc = 0. CALL FUNCTION 'RS_SUPPORT_SELECTIONS' EXPORTING report = lv_repid variant = lv_variant EXCEPTIONS variant_not_existent = 01 variant_obsolete = 02. ENDIF. ENDIF. ENDMETHOD.METHOD is_variant_exists. CALL FUNCTION 'RS_VARIANT_EXISTS' EXPORTING report = report variant = variant IMPORTING r_c = rv_subrc EXCEPTIONS not_authorized = 1 no_report = 2 report_not_existent = 3 report_not_supplied = 4. rv_subrc = COND #( WHEN sy-subrc <> 0 THEN sy-subrc ELSE rv_subrc ). ENDMETHOD.总结
完整代码见Github
地址:https://github.com/a87b01c14/ZCL_COMMON.git