SAP ABAP QA11屏幕增强 BADI QEVA_SUBSCREEN_1101

本文档展示了在SAP系统中如何通过BADI(业务添加件接口)进行屏幕增强,添加客制化字段,并实现数据在自定义屏幕与主程序之间的传输。主要涉及屏幕逻辑处理、自定义函数组的创建以及数据获取与设置的方法,如GET_DATA和PUT_DATA,以根据不同的业务场景动态控制屏幕元素的可见性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        

QA11屏幕增强:

效果图:

BADI: QEVA_SUBSCREEN_1101

SE11添加客制化字段:QALS或者决策表。

创建自定义函数组,添加屏幕信息:

全局定义:

FUNCTION-POOL ZFG_QM_EN.                    "MESSAGE-ID ..
TABLESqals_cust.
CONSTANTSBEGIN OF C_TABS,
             TAB1 LIKE SY-UCOMM VALUE 'TAB1',
             TAB2 LIKE SY-UCOMM VALUE 'TAB2',
             TAB3 LIKE SY-UCOMM VALUE 'TAB3',
             TAB4 LIKE SY-UCOMM VALUE 'TAB4',
             TAB5 LIKE SY-UCOMM VALUE 'TAB5',
             TAB6 LIKE SY-UCOMM VALUE 'TAB6',
             TAB7 LIKE SY-UCOMM VALUE 'TAB7',
           END OF C_TABS.
*&SPWIZARD: DATA FOR TABSTRIP 'TABS'
CONTROLS:  TABS TYPE TABSTRIP.
DATA:      BEGIN OF G_TABS,
             SUBSCREEN   LIKE SY-DYNNR,
             PROG        LIKE SY-REPID VALUE 'SAPLZFG_QM_EN',
             PRESSED_TAB LIKE SY-UCOMM VALUE C_TABS-TAB1,
           END OF G_TABS.
DATA:      OK_CODE LIKE SY-UCOMM.

DATAg_display TYPE c.
data:gs_qals type qals .
data:
REF_SUBSCR_1101_QEVA  TYPE REF TO IF_EX_QEVA_SUBSCREEN_1101.
data:gv_FLT_VAL type QHERK ,
gs_RQEVA TYPE  RQEVA.

屏幕数据传输到主程序:

主程序数据传输到自定义屏幕

*屏幕逻辑

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
  module GET_DATA .
  MODULE TABS_ACTIVE_TAB_SET.
  CALL SUBSCREEN:
       SUBarea  INCLUDING G_TABS-PROG G_TABS-SUBSCREEN.

PROCESS AFTER INPUT.
CALL SUBSCREEN:
       SUBarea .
  MODULE TABS_ACTIVE_TAB_GET.
 MODULE USER_COMMAND_0100.

*屏幕PBOPAI MODULE

MODULE STATUS_0100 OUTPUT.
  IF REF_SUBSCR_1101_QEVA IS INITIAL.
    CALL METHOD CL_EXITHANDLER=>GET_INSTANCE_FOR_SUBSCREENS
      
CHANGING
        INSTANCE REF_SUBSCR_1101_QEVA
  
EXCEPTIONS
    NO_REFERENCE                  1
    NO_INTERFACE_REFERENCE        2
    NO_EXIT_INTERFACE             3
    DATA_INCONS_IN_EXIT_MANAGEM   4
    CLASS_NOT_IMPLEMENT_INTERFACE 5
    others                        .

    IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
*  if REF_SUBSCR_1101_QEVA is not INITIAL .
*  CALL METHOD REF_SUBSCR_1101_QEVA->GET_DATA
*    EXPORTING
*      FLT_VAL = GV_FLT_VAL
*    IMPORTING
*      E_QALS  = GS_QALS
*      E_RQEVA = GS_RQEVA.
*endif .
*  MOVE-CORRESPONDING GS_QALS TO QALS_CUST .
*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.
  LOOP AT SCREEN.
    IF  GS_QALS-ART  EQ 'J61' OR  GS_QALS-ART  EQ  'J91'.
      IF SCREEN-NAME EQ 'TAB2' OR SCREEN-NAME EQ 'TAB3' OR SCREEN-NAME EQ 'TAB4' OR
        SCREEN-NAME EQ 'TAB5' OR SCREEN-NAME EQ 'TAB6' OR SCREEN-NAME EQ 'TAB7'  .
        SCREEN-ACTIVE .
      ENDIF .
    ELSEIF  GS_QALS-ART  EQ 'J81'.
      IF SCREEN-NAME EQ 'TAB1' OR SCREEN-NAME EQ 'TAB3' OR SCREEN-NAME EQ 'TAB4' OR
        SCREEN-NAME EQ 'TAB5' OR SCREEN-NAME EQ 'TAB6' OR SCREEN-NAME EQ 'TAB7'  .
        SCREEN-ACTIVE .
      ENDIF .
    ELSEIF  GS_QALS-ART  EQ 'J82'.
      IF SCREEN-NAME EQ 'TAB1' OR SCREEN-NAME EQ 'TAB2' OR SCREEN-NAME EQ 'TAB4' OR
        SCREEN-NAME EQ 'TAB5' OR SCREEN-NAME EQ 'TAB6' OR SCREEN-NAME EQ 'TAB7'  .
        SCREEN-ACTIVE .
      ENDIF .
    ELSEIF  GS_QALS-ART  EQ 'J83'.
      IF SCREEN-NAME EQ 'TAB1' OR SCREEN-NAME EQ 'TAB2' OR SCREEN-NAME EQ 'TAB3' OR
        SCREEN-NAME EQ 'TAB5' OR SCREEN-NAME EQ 'TAB6' OR SCREEN-NAME EQ 'TAB7'  .
        SCREEN-ACTIVE .
      ENDIF .

    ELSEIF  GS_QALS-ART  EQ 'J85'.
      IF SCREEN-NAME EQ 'TAB1' OR SCREEN-NAME EQ 'TAB2' OR SCREEN-NAME EQ 'TAB3' OR
        SCREEN-NAME EQ 'TAB5' OR SCREEN-NAME EQ 'TAB6' OR SCREEN-NAME EQ 'TAB7'  .
        SCREEN-ACTIVE .
      ENDIF .
    ELSEIF  GS_QALS-ART  EQ 'J88'.
      IF SCREEN-NAME EQ 'TAB1' OR SCREEN-NAME EQ 'TAB2' OR SCREEN-NAME EQ 'TAB3' OR
        SCREEN-NAME EQ 'TAB4' OR SCREEN-NAME EQ 'TAB6' OR SCREEN-NAME EQ 'TAB7'  .
        SCREEN-ACTIVE .
      ENDIF .
    ELSEIF  GS_QALS-ART  EQ 'J62'.
      IF SCREEN-NAME EQ 'TAB1' OR SCREEN-NAME EQ 'TAB2' OR SCREEN-NAME EQ 'TAB3' OR
        SCREEN-NAME EQ 'TAB4' OR SCREEN-NAME EQ 'TAB5' OR SCREEN-NAME EQ 'TAB7'  .
        SCREEN-ACTIVE .
      ENDIF .
    ELSEIF  GS_QALS-ART  EQ 'J63'.
      IF SCREEN-NAME EQ 'TAB1' OR SCREEN-NAME EQ 'TAB2' OR SCREEN-NAME EQ 'TAB3' OR
        SCREEN-NAME EQ 'TAB4' OR SCREEN-NAME EQ 'TAB5' OR SCREEN-NAME EQ 'TAB6'  .
        SCREEN-ACTIVE .
      ENDIF .
    ELSE.
      IF SCREEN-NAME EQ 'TAB1' OR SCREEN-NAME EQ 'TAB2' OR SCREEN-NAME EQ 'TAB3' OR
     SCREEN-NAME EQ 'TAB4' OR SCREEN-NAME EQ 'TAB5' OR SCREEN-NAME EQ 'TAB6' OR SCREEN-NAME EQ 'TAB7' .
        SCREEN-ACTIVE .
      ENDIF .
    ENDIF .
    MODIFY SCREEN .
  ENDLOOP .
ENDMODULE.                 " STATUS_0100  OUTPUT

*&SPWIZARD: OUTPUT MODULE FOR TS 'TABS'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE TABS_ACTIVE_TAB_SET OUTPUT.
  CASE GS_QALS-ART .
    WHEN 'J61' .
      G_TABS-PRESSED_TAB =  'TAB1' .
    WHEN 'J91' .
      G_TABS-PRESSED_TAB =  'TAB1' .
    WHEN 'J81'.
      G_TABS-PRESSED_TAB 'TAB2' .
    WHEN 'J82'.
      G_TABS-PRESSED_TAB 'TAB3' .
    WHEN 'J83'.
      G_TABS-PRESSED_TAB 'TAB4' .
    WHEN 'J83'.
      G_TABS-PRESSED_TAB 'TAB5' .
    WHEN 'J88'.
      G_TABS-PRESSED_TAB 'TAB5' .
    WHEN 'J62'.
      G_TABS-PRESSED_TAB 'TAB6' .
    WHEN 'J63'.
      G_TABS-PRESSED_TAB 'TAB7' .
  ENDCASE .
  TABS-ACTIVETAB G_TABS-PRESSED_TAB.
  CASE G_TABS-PRESSED_TAB.
    WHEN C_TABS-TAB1.
      G_TABS-SUBSCREEN '0101'.
    WHEN C_TABS-TAB2.
      G_TABS-SUBSCREEN '0102'.
    WHEN C_TABS-TAB3.
      G_TABS-SUBSCREEN '0103'.
    WHEN C_TABS-TAB4.
      G_TABS-SUBSCREEN '0104'.
    WHEN C_TABS-TAB5.
      G_TABS-SUBSCREEN '0105'.
    WHEN C_TABS-TAB6.
      G_TABS-SUBSCREEN '0106'.
    WHEN C_TABS-TAB7.
      G_TABS-SUBSCREEN '0107'.
    WHEN OTHERS.
      G_TABS-SUBSCREEN '9999'.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.                    "TABS_ACTIVE_TAB_SET OUTPUT

*&SPWIZARD: INPUT MODULE FOR TS 'TABS'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TABS_ACTIVE_TAB_GET INPUT.
  OK_CODE SY-UCOMM.
  CASE OK_CODE.
    WHEN C_TABS-TAB1.
      G_TABS-PRESSED_TAB C_TABS-TAB1.
    WHEN C_TABS-TAB2.
      G_TABS-PRESSED_TAB C_TABS-TAB2.
    WHEN C_TABS-TAB3.
      G_TABS-PRESSED_TAB C_TABS-TAB3.
    WHEN C_TABS-TAB4.
      G_TABS-PRESSED_TAB C_TABS-TAB4.
    WHEN C_TABS-TAB5.
      G_TABS-PRESSED_TAB C_TABS-TAB5.
    WHEN C_TABS-TAB6.
      G_TABS-PRESSED_TAB C_TABS-TAB6.
    WHEN C_TABS-TAB7.
      G_TABS-PRESSED_TAB C_TABS-TAB7.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.                    "TABS_ACTIVE_TAB_GET INPUT

*----------------------------------------------------------------------*
***INCLUDE LZFG_QM_ENI01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  MOVE-CORRESPONDING QALS_CUST TO GS_QALS .

*触发BADI get_data方法
  IF REF_SUBSCR_1101_QEVA IS NOT INITIAL .
    CALL METHOD REF_SUBSCR_1101_QEVA->get_DATA
      
EXPORTING
        FLT_VAL GV_FLT_VAL
        
IMPORTING
        e_QALS  GS_QALS
        e_RQEVA 
GS_RQEVA.

  ENDIF .
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  GET_DATA  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE GET_DATA OUTPUT.

ENDMODULE.                 " GET_DATA  OUTPUT

BADI方法:

PUT_DATA将数据传输子屏幕:

METHOD IF_EX_QEVA_SUBSCREEN_1101~PUT_DATA.
  data:ls_qals type qals .
  IF IF_EX_QEVA_SUBSCREEN_1101~G_QALS IS NOT INITIAL .
    MOVE-CORRESPONDING IF_EX_QEVA_SUBSCREEN_1101~G_QALS TO LS_QALS .
  ELSE .
    MOVE-CORRESPONDING I_QALS TO LS_QALS .
  ENDIF .
  CALL FUNCTION 'ZQM_FM_PUT_DATA'
    EXPORTING
      I_QALS  =  LS_QALS
      I_RQEVA 
I_RQEVA
      I_QHERK 
FLT_VAL.

ENDMETHOD.

GET_DATA从子屏幕获取数据:

METHOD IF_EX_QEVA_SUBSCREEN_1101~GET_DATA.
data:lv_string type string VALUE '(SAPMQEVA)QALS' .
data:ls_infos type ci_qals .
data:ls_cust type ci_qals .
FIELD-SYMBOLS:<fs_info> type qals .

  CALL FUNCTION 'ZQM_FM_GET_DATA'
   IMPORTING
     E_QALS        =  E_QALS
     E_RQEVA       
=  E_RQEVA
            
.
MOVE-CORRESPONDING E_QALS to IF_EX_QEVA_SUBSCREEN_1101~G_QALS .
ASSIGN (lv_stringto <fs_info> .
if sy-subrc .
  MOVE-CORRESPONDING E_QALS to ls_cust .
  MOVE-CORRESPONDING ls_cust to <fs_info> .
endif .
ENDMETHOD.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值