ABAP Rut ALV Demo OM

  1. REPORT zini_01.
  2.  
  3. CLASS zini_cl_falv DEFINITION. " FAST ALV
  4.  
  5.   PUBLIC SECTION.
  6.  
  7.     CONSTANTS: c_version TYPE string VALUE 'v01.05'.
  8.  
  9. *--[ Coordenadas XY
  10.     TYPES: BEGIN OF ty_pop,
  11.              start_x TYPE i,
  12.              start_y TYPE i,
  13.              end_x   TYPE i,
  14.              end_y   TYPE i,
  15.            END OF ty_pop.
  16.     DATA: popup TYPE ty_pop.
  17.  
  18. *--[ Datos Globales para toquetear en publico
  19.     DATA: g_alv         TYPE REF TO cl_salv_table,
  20.           g_functions   TYPE REF TO cl_salv_functions_list,
  21.           g_columns     TYPE REF TO cl_salv_columns_table,
  22.           g_selections  TYPE REF TO cl_salv_selections,
  23.           G_grid        TYPE REF TO cl_salv_form_layout_grid,
  24.           g_layout      TYPE REF TO cl_salv_layout,
  25.           g_content     TYPE REF TO cl_salv_form_element,
  26.           g_display     TYPE REF TO cl_salv_display_settings,
  27.           G_layout_logo TYPE REF TO cl_salv_form_layout_logo.
  28.  
  29. *--[ Metodos
  30.     METHODS: alv_new CHANGING p_table TYPE ANY TABLE,
  31.       set_column IMPORTING i_name  TYPE string
  32.                            i_tit_l TYPE string optional
  33.                            i_tit_m TYPE string OPTIONAL
  34.                            i_tit_s TYPE string OPTIONAL,
  35.  
  36.      set_titulo IMPORTING i_data type any,
  37.  
  38.       alv_show IMPORTING p_popup         TYPE xfeld OPTIONAL
  39.                          p_popup_xy      TYPE ty_pop OPTIONAL
  40.                RETURNING VALUE(p_return) TYPE salv_t_row.
  41.  
  42. ENDCLASS.
  43.  
  44. CLASS zini_cl_falv IMPLEMENTATION.
  45.  
  46.  method set_titulo.
  47.    g_display->set_list_header( CONV LVC_TITLE( i_data ) ).
  48.  endmethod.
  49.  
  50.   METHOD set_column.
  51.     TRY.
  52.         DATA(l_col) = g_columns->get_column( columnname = CONV lvc_fname( i_name ) ). "
  53.       CATCH cx_root.
  54.         EXIT.
  55.     ENDTRY.
  56. *--[ Por Defecto
  57.       l_col->set_long_text( CONV scrtext_l( to_upper( i_NAME ) ) ).
  58.       l_col->set_medium_text( CONV scrtext_m( to_upper( i_NAME ) ) ).
  59.       l_col->set_short_text( CONV scrtext_s( to_upper( i_NAME ) ) ).
  60.  
  61.     IF i_tit_l IS NOT INITIAL and i_tit_l is SUPPLIED.
  62.       l_col->set_long_text( CONV scrtext_l( i_TIT_L ) ).
  63.     ENDIF.
  64.  
  65.     IF i_tit_M IS NOT INITIAL and i_tit_m is SUPPLIED.
  66.       l_col->set_medium_text( CONV scrtext_m( i_TIT_M ) ).
  67.     ENDIF.
  68.  
  69.     IF i_tit_S IS NOT INITIAL  and i_tit_s is SUPPLIED.
  70.       l_col->set_short_text( CONV scrtext_s( i_TIT_S ) ).
  71.     ENDIF.
  72.   ENDMETHOD.
  73.  
  74.   METHOD alv_new.
  75.  
  76.     TRY.
  77.         cl_salv_table=>factory(
  78.           IMPORTING
  79.             r_salv_table = g_alv
  80.           CHANGING
  81.             t_table      = p_table ).
  82.       CATCH cx_salv_msg.
  83.         EXIT.                                           "#EC NO_HANDLER
  84.     ENDTRY.
  85.  
  86.     g_functions   = g_alv->get_functions( ).
  87.     g_columns     = g_alv->get_columns( ).
  88.     g_selections  = g_alv->get_selections( ).
  89.     g_layout      = g_alv->get_layout( ).
  90.     g_display     = g_alv->get_display_settings( ).
  91.  
  92.     g_grid        = NEW cl_salv_form_layout_grid( ).
  93.     g_layout_logo = NEW cl_salv_form_layout_logo( ).
  94.  
  95. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  96. *--[ T�tulo y pantalla superior
  97. *    G_GRID->create_label( row = 1 column = 1 text = 'T�tulo' tooltip = 'ToolTIp' ).
  98. *    G_GRID->create_label( row = 2 column = 1 text = 'SubT�tulo' tooltip = 'ToolTIp' ).
  99. *    G_layout_logo->set_left_content( G_GRID ).
  100. *    G_CONTENT = G_layout_logo.
  101. *    G_ALV->set_top_of_list(  G_CONTENT ).
  102.  
  103.     g_functions->set_all( abap_true ).
  104.     g_columns->set_optimize( abap_true ).
  105.  
  106. *--[ Zebra
  107.     G_display->set_striped_pattern( cl_salv_display_settings=>true ).
  108.  
  109. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  110. *--[ Columnas
  111.     TRY.
  112.         DATA(l_col) = g_columns->get_column( columnname = 'MANDT' ). " Bye Bye Bye
  113.         l_col->set_visible( value  = if_salv_c_bool_sap=>false ).
  114.       CATCH cx_root.
  115.         CLEAR sy-subrc.
  116.     ENDTRY.
  117.  
  118. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  119. *--[ Disposiciones
  120. *    G_LAYOUT->set_key( VALUE = VALUE #( REPORT = sy-repid ) ).
  121. *    G_LAYOUT->set_save_restriction( if_salv_c_layout=>restrict_none ).
  122. *    G_LAYOUT->set_default( abap_true ).
  123.  
  124.     g_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
  125.  
  126.     popup = VALUE #( start_x = 1 start_y = 1 end_x = 180 end_y = 20 ). "<-- Default
  127.  
  128.   ENDMETHOD.
  129.  
  130.   METHOD alv_show.
  131.  
  132. *--[ Preparamos el popup
  133.     IF p_popup = abap_true.
  134.       IF p_popup_xy IS NOT INITIAL.
  135.         popup = p_popup_xy.
  136.       ENDIF.
  137.       g_alv->set_screen_popup( start_column = popup-start_x "1
  138.                                end_column   = popup-end_x "180
  139.                                start_line   = popup-start_y "1
  140.                                end_line     = popup-end_y ). "20
  141.     ENDIF.
  142.  
  143. *--[ Mostramos el ALV
  144.     g_alv->display( ).
  145.  
  146.     p_return = g_selections->get_selected_rows( ).
  147.  
  148.   ENDMETHOD.
  149.  
  150. ENDCLASS .
  151.  
  152. ****END-OF-SELECTION.
  153. ****
  154. *****--[ Para el ejemplo
  155. ****  SELECT * FROM t005t UP TO 500 ROWS INTO TABLE @DATA(t_bp) WHERE spras = @sy-langu.
  156. ****
  157. ****  DATA(nl) = NEW zini_cl_falv( ).
  158. ****
  159. ****  nl->alv_new( CHANGING p_table = t_bp ).
  160. *****--[ Esta en dos metodos, por si queremos toquetear por en medio columnas y demas
  161. ****  nl->set_column( i_name = 'LANDX50' i_tit_l = 'Soy un título bien largo' i_tit_m = 'Y yo medio' ).
  162. ****  DATA(l_seleccionados) = nl->alv_show( ).
  163. *****  DATA(L_SELECCIONADOS) = NL->ALV_SHOW( P_POPUP = ABAP_TRUE P_POPUP_XY = VALUE #( START_X = 50 START_Y = 5 END_X = 150 END_Y = 20 ) ).
  164. ****
  165. *****  BREAK-POINT. "<-- A Efectos de test