可以根据下拉框的选项,动态显示选择屏幕

ABAP <wbr>Dynamic <wbr>Selection <wbr>Screen <wbr>using <wbr>Tabbed <wbr>Selection <wbr>Screen



ABAP <wbr>Dynamic <wbr>Selection <wbr>Screen <wbr>using <wbr>Tabbed <wbr>Selection <wbr>Screen



code: *&---------------------------------------------------------------------*


*& Report  ZLM_SCREEN_001


*&


*&---------------------------------------------------------------------*


*&


*&


*&---------------------------------------------------------------------*



REPORT ZLM_SCREEN_001 .



*&---------------------------------------------------------------------*


*& Purpose - Dynamic Selection Screen using the Tabbed Selected Screen


*& Author  - Naimesh Patel


*& URL     -


*&---------------------------------------------------------------------*


*


CLASS lcl_main  DEFINITION .

 

  PUBLIC  SECTION .

 

      TYPES :

 

          BEGIN  OF ty_vrm_values ,

 

              KEY   TYPE char40 ,

 

              text  TYPE char80 ,

 

          END    OF ty_vrm_values .

 

      TYPES : tt_vrm_values  TYPE  STANDARD  TABLE  OF ty_vrm_values

 

                        WITH  DEFAULT  KEY .

 

      TYPES :

 

          BEGIN  OF ty_config ,

 

              KEY   TYPE char10 ,

 

              desc  TYPE char50 ,

 

              dynnr  TYPE sy -dynnr ,

 

          END    OF ty_config .

 

      DATA : t_config  TYPE  STANDARD  TABLE  OF ty_config .

 

      METHODS :

 

          get_vrm_values

 

              RETURNING  VALUE (rt_values )  TYPE tt_vrm_values ,

 

          get_dynnr

 

              IMPORTING iv_objtype  TYPE char10

 

              RETURNING  VALUE (rv_dynnr )  TYPE sy -dynnr .


ENDCLASS .                     "lcl_main DEFINITION


*


DATA : t_objtypes  TYPE lcl_main =>tt_vrm_values .


DATA : o_main  TYPE  REF  TO lcl_main .



*


DATA : v_vbeln  TYPE vbak -vbeln ,

 

          v_erdat  TYPE vbak -erdat ,

 

          v_vkorg  TYPE vbak -vkorg ,

 

          v_vtweg  TYPE vbak -vtweg ,

 

          v_spart  TYPE vbak -spart .



* Object type Selector


PARAMETER : p_objtyp  TYPE char10  AS LISTBOX

 

                        VISIBLE  LENGTH  30  USER-COMMAND v_obj  .


*


* TABBED Selection screen for displaying the screen


SELECTION-SCREEN :  BEGIN  OF TABBED  BLOCK mytab  FOR  7  LINES ,

 

                                  TAB  ( 20 ) seltab  USER-COMMAND push1 ,

 

                                  END  OF  BLOCK mytab .


*


* Default screen


SELECTION-SCREEN  BEGIN  OF  SCREEN  100  AS SUBSCREEN .


SELECTION-SCREEN  END  OF  SCREEN  100 .


*


* for SO


SELECTION-SCREEN  BEGIN  OF  SCREEN  200  AS SUBSCREEN .


SELECT-OPTIONS : so_vbeln  FOR v_vbeln ,

 

                              so_erdat  FOR v_erdat ,

 

                              so_vkorg  FOR v_vkorg ,

 

                              so_vtweg  FOR v_vtweg ,

 

                              so_spart  FOR v_spart .


SELECTION-SCREEN  END  OF  SCREEN  200 .


*


* for Billing


SELECTION-SCREEN  BEGIN  OF  SCREEN  300  AS SUBSCREEN .


SELECT-OPTIONS : bi_vbeln  FOR v_vbeln ,

 

                              bi_erdat  FOR v_erdat ,

 

                              bi_vkorg  FOR v_vkorg ,

 

                              bi_vtweg  FOR v_vtweg ,

 

                              bi_spart  FOR v_spart .


SELECTION-SCREEN  END  OF  SCREEN  300 .


*


INITIALIZATION .

 

  CREATE OBJECT  o_main .

 

  t_objtypes  = o_main ->get_vrm_values (  ) .

 

  CALL  FUNCTION  'VRM_SET_VALUES'

 

      EXPORTING

 

          ID      =  'P_OBJTYP'

 

          VALUES  = t_objtypes .


*

 

  mytab -dynnr  = o_main ->get_dynnr ( p_objtyp  ) .

 

  mytab -prog  = sy -repid .

 

  mytab -activetab  =  'PUSH1' .


*

 

  seltab  =  'Selection Criteria' .


*


* dynamic text for objec type

 

  %_p_objtyp_%_app_% - text  =  'Object Type' .


*


*


AT  SELECTION-SCREEN  OUTPUT .


* Set the selection screen based on the object type

 

  mytab -dynnr  = o_main ->get_dynnr ( p_objtyp  ) .


*


*


START-OF-SELECTION .


*


*


CLASS lcl_main  IMPLEMENTATION .

 

  METHOD get_vrm_values .

 

      DATA : ls_config  LIKE  LINE  OF me ->t_config .


* ---- Config entries, in real time it comes from table


*

 

      ls_config - KEY    =  ".             " Default

 

      ls_config -desc    =  ".

 

      ls_config -dynnr  =  '0100' .

 

      APPEND ls_config  TO me ->t_config .


*

 

      ls_config - KEY    =  'ORDER' .

 

      ls_config -desc    =  'Sales Order' .

 

      ls_config -dynnr  =  '0200' .

 

      APPEND ls_config  TO me ->t_config .


*

 

      ls_config - KEY    =  'BILLING' .

 

      ls_config -desc    =  'Billing Document' .

 

      ls_config -dynnr  =  '0300' .

 

      APPEND ls_config  TO me ->t_config .


*


*   vrm set values

 

      DATA : ls_vrm  LIKE  LINE  OF rt_values .

 

      LOOP  AT me ->t_config  INTO ls_config .

 

          ls_vrm - KEY  = ls_config - KEY .

 

          ls_vrm - text  = ls_config -desc .

 

          APPEND ls_vrm  TO rt_values .

 

      ENDLOOP .


 

  ENDMETHOD .                     "get_vrm_values

 

  METHOD get_dynnr .


*   get the screen number

 

      DATA : ls_config  LIKE  LINE  OF me ->t_config .

 

      READ  TABLE me ->t_config  INTO ls_config

 

          WITH  KEY  KEY  = iv_objtype .

 

      IF sy -subrc  EQ  0 .

 

          rv_dynnr  = ls_config -dynnr .

 

      ELSE .


*     fallback - if default is not maintained in config

 

          rv_dynnr  =  '0100' .

 

      ENDIF .

 

  ENDMETHOD .                     "get_dynnr



ENDCLASS .                     "lcl_main IMPLEMENTATION