ABAP Development

edit

ABAP/99. ETC2022. 7. 1. 11:43

REPORT zzedit NO STANDARD PAGE HEADING MESSAGE-ID 00.

TYPES: BEGIN OF itype,
       line(255),
       END OF itype.

DATA:g_answer,
     g_prg   VALUE 'Z'.

DATA itab TYPE itype OCCURS 0 WITH HEADER LINE.

PARAMETERS program LIKE trdir-name OBLIGATORY.

IF program(1) NE g_prg  AND program(1) NE 'Y'  AND
   program(2) NE 'MZ'   AND program(2) NE 'MY' AND program(2) NE 'LZ'.
  MESSAGE i001(00) WITH 'CBO만 사용가능!!'.
  EXIT.
ENDIF.

READ REPORT program INTO itab.
EDITOR-CALL FOR itab.
IF sy-ucomm = 'WB_SAVE' OR sy-ucomm = 'YES'.
  CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
    EXPORTING
      defaultoption = 'N'
      textline1     = 'Do you want to save now ?'
      titel         = 'Save'
    IMPORTING
      answer        = g_answer.
  CHECK g_answer = 'J'.
  INSERT REPORT program FROM itab.
  MESSAGE s001(00) WITH 'Save OK!'.
ENDIF.

Dynamic Structure

ABAP/DDIC2017. 9. 16. 23:54

출처 : https://archive.sap.com/discussions/thread/426726

 *&---------------------------------------------------------------------* *& Report  ZUS_SDN_RTTI_CREATE_STRUCTURES *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT  zus_sdn_rtti_create_structures.    TYPE-POOLS: abap.  DATA: celltab          TYPE lvc_t_styl. DATA: go_table         TYPE REF TO cl_salv_table,       go_sdescr        TYPE REF TO cl_abap_structdescr,       go_tdescr        TYPE REF TO cl_abap_tabledescr,       gdo_data         TYPE REF TO data,       gdo_handle       TYPE REF TO data,       gs_comp          TYPE abap_componentdescr,       gt_components    TYPE abap_component_tab. * *    name       TYPE string, *    type       TYPE REF TO cl_abap_datadescr, *    as_include TYPE abap_bool, *    suffix     TYPE string,   FIELD-SYMBOLS:   <gd_fld>      TYPE ANY,   <gs_struc>    TYPE ANY,   <gt_itab>     TYPE table.     PARAMETER:   p_tabnam      TYPE tabname  DEFAULT 'KNB1'.   START-OF-SELECTION.   * Create dynamically structure   CREATE DATA gdo_data TYPE (p_tabnam).   ASSIGN gdo_data->* TO <gs_struc>.   CHECK ( <gs_struc$gt; IS ASSIGNED ).     * Simulate dynamic addition of columns to ALV list   DO 10 TIMES.     ASSIGN COMPONENT syst-index OF STRUCTURE <gs_struc> TO <gd_fld>.       CLEAR: gs_comp.     gs_comp-type ?= cl_abap_datadescr=>describe_by_data( <gd_fld> ).     gs_comp-name  = gs_comp-type->get_relative_name( ).     APPEND gs_comp TO gt_components.       go_sdescr  = cl_abap_structdescr=>create( gt_components ).     go_tdescr  = cl_abap_tabledescr=>create( go_sdescr ).     "   Create data refence followed by table creation     CREATE DATA gdo_handle TYPE HANDLE go_tdescr.     ASSIGN gdo_handle->* TO <gt_itab>.   *   Dynamic select     SELECT        * FROM  (p_tabnam)       INTO CORRESPONDING FIELDS OF TABLE <gt_itab>            WHERE  bukrs  = '2000'.       TRY.         CALL METHOD cl_salv_table=>factory           IMPORTING             r_salv_table = go_table           CHANGING             t_table      = <gt_itab>.         go_table->display( ).       CATCH cx_salv_msg .     ENDTRY.     ENDDO.       " Add table type as field to structure   CLEAR: gs_comp.   gs_comp-type ?= cl_abap_typedescr=>describe_by_data( celltab ).   gs_comp-name  = 'CELLTAB'.   APPEND gs_comp TO gt_components.     go_sdescr  = cl_abap_structdescr=>create( gt_components ).   go_tdescr  = cl_abap_tabledescr=>create( go_sdescr ).   CREATE DATA gdo_handle TYPE HANDLE go_tdescr.   ASSIGN gdo_handle->* TO <gt_itab>.   *   Dynamic select   SELECT        * FROM  (p_tabnam)     INTO CORRESPONDING FIELDS OF TABLE <gt_itab>          WHERE  bukrs  = '2000'.         " Simplified version of table creation:   CLEAR: gdo_data.   UNASSIGN <gt_itab>.     CREATE DATA gdo_data TYPE (p_tabnam).   ASSIGN gdo_data->* TO <gt_itab>.     END-OF-SELECTION.  

출처 : https://wiki.scn.sap.com/wiki/display/Snippets/Creating+Flat+and+Complex+Internal+Tables+Dynamically+using+RTTI

*&---------------------------------------------------------------------* *& Report  Z_RTTI_CREATE_COMPLEX_ITAB *& *&---------------------------------------------------------------------* *& NOTE: revised version of ZUS_SDN_RTTI_CREATE_STRUCTURES *& *&---------------------------------------------------------------------*  REPORT  Z_RTTI_CREATE_COMPLEX_ITAB.   TYPE-POOLS: abap.   DATA:   celltab          TYPE lvc_t_styl.  " becomes field of complex itab  DATA:   gd_tabnam        TYPE string,   gd_tabfield      TYPE string,   go_table         TYPE REF TO cl_salv_table,   go_sdescr        TYPE REF TO cl_abap_structdescr,   go_sdescr_new    TYPE REF TO cl_abap_structdescr,   go_tdescr        TYPE REF TO cl_abap_tabledescr,   gdo_data         TYPE REF TO data,   gdo_handle       TYPE REF TO data,   gs_component     TYPE abap_compdescr,   gs_comp          TYPE abap_componentdescr,   gt_components    TYPE abap_component_tab.   FIELD-SYMBOLS:   <gt_itab>     TYPE STANDARD TABLE.   PARAMETER:   p_tabnam      TYPE tabname  DEFAULT 'KNB1'.  START-OF-SELECTION.    " Describe structure   go_sdescr ?= cl_abap_structdescr=>describe_by_name( p_tabnam ).   gd_tabnam     = go_sdescr->get_relative_name( ).     "   Simulate dynamic addition of columns to ALV list   DO 5 TIMES.     READ TABLE go_sdescr->components INTO gs_component INDEX syst-index.      "   Build fieldname     CONCATENATE gd_tabnam gs_component-name INTO gd_tabfield                                             SEPARATED BY '-'.      CLEAR: gs_comp.     gs_comp-type ?= cl_abap_datadescr=>describe_by_name( gd_tabfield ).     gs_comp-name  = gs_component-name.     APPEND gs_comp TO gt_components.       "   Create instances of dynamic structure and dynamic internal table     go_sdescr_new  = cl_abap_structdescr=>create( gt_components ).     go_tdescr      = cl_abap_tabledescr=>create( go_sdescr_new ).     "   Create data refence followed by table creation     CREATE DATA gdo_handle TYPE HANDLE go_tdescr.  " !!!     ASSIGN gdo_handle->* TO <GT_ITAB>.  *   Dynamic select     SELECT        * FROM  (p_tabnam)       INTO CORRESPONDING FIELDS OF TABLE <GT_ITAB>            WHERE  bukrs  = '2000'.      TRY.         CALL METHOD cl_salv_table=>factory           IMPORTING             r_salv_table = go_table           CHANGING             t_table      = <GT_ITAB>.         go_table->display( ).       CATCH cx_salv_msg .     ENDTRY.   ENDDO.     " Display component list in order to prove that indeed the field names   " are used (instead of the data element names)   TRY.       CALL METHOD cl_salv_table=>factory         IMPORTING           r_salv_table = go_table         CHANGING           t_table      = gt_components.       go_table->display( ).     CATCH cx_salv_msg .   ENDTRY.      " Add table type (LVC_T_STYL) as field to structure ==> complex structure   CLEAR: gs_comp.   gs_comp-type ?= cl_abap_typedescr=>describe_by_data( celltab ).   gs_comp-name  = 'CELLTAB'.   APPEND gs_comp TO gt_components.    go_sdescr  = cl_abap_structdescr=>create( gt_components ).   go_tdescr  = cl_abap_tabledescr=>create( go_sdescr ).   CREATE DATA gdo_handle TYPE HANDLE go_tdescr.   ASSIGN gdo_handle->* TO <gt_itab>.  *   Dynamic select   SELECT        * FROM  (p_tabnam)     INTO CORRESPONDING FIELDS OF TABLE <gt_itab>          WHERE  bukrs  = '2000'.     " Show how to fill the complex itab   PERFORM fill_celltab.  END-OF-SELECTION.   *&---------------------------------------------------------------------* *&      Form  FILL_CELLTAB *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *  -->  p1        text *  <--  p2        text *----------------------------------------------------------------------* FORM fill_celltab . * define local data   DATA:     ls_cell       TYPE lvc_s_styl,     lt_celltab    TYPE lvc_t_styl.     FIELD-SYMBOLS:     <gs_struc>    TYPE ANY,     <lt_celltab>  TYPE lvc_t_styl.     " Create dummy entry for local CELLTAB   ls_cell-fieldname = 'BUKRS'.   ls_cell-style     = cl_gui_alv_grid=>mc_style_enabled.   INSERT ls_cell INTO TABLE lt_celltab.     LOOP AT <gt_itab> ASSIGNING <gs_struc>.     ASSIGN COMPONENT 'CELLTAB' OF STRUCTURE <gs_struc> TO <lt_celltab>.      <lt_celltab> = lt_celltab.      "   No MODIFY required because we are working with the field symbol   ENDLOOP.  ENDFORM.                    " FILL_CELLTAB