ABAP /

ALV POP con selector

  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.06'.
  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_hotspot IMPORTING i_name TYPE string,
  32.       set_column IMPORTING i_name  TYPE string
  33.                            i_tit_l TYPE string optional
  34.                            i_tit_m TYPE string OPTIONAL
  35.                            i_tit_s TYPE string OPTIONAL,
  36.  
  37.      set_titulo IMPORTING i_data type any,
  38.  
  39.       alv_show IMPORTING p_popup         TYPE xfeld OPTIONAL
  40.                          p_popup_xy      TYPE ty_pop OPTIONAL
  41.                RETURNING VALUE(p_return) TYPE salv_t_row.
  42.  
  43.   PRIVATE SECTION.
  44.  
  45.     DATA: t_hotspot_cols TYPE STANDARD TABLE OF lvc_fname WITH EMPTY KEY.
  46.     DATA: g_clicked_row TYPE salv_t_row.
  47.  
  48.     METHODS on_link_click
  49.       FOR EVENT link_click OF cl_salv_events_table
  50.       IMPORTING row column.
  51.  
  52. ENDCLASS.
  53.  
  54. CLASS zini_cl_falv IMPLEMENTATION.
  55.  
  56.  method set_titulo.
  57.    g_display->set_list_header( CONV LVC_TITLE( i_data ) ).
  58.  endmethod.
  59.  
  60.   METHOD set_hotspot.
  61.     TRY.
  62.         " get_column devuelve cl_salv_column (padre). Necesitamos la hija cl_salv_column_table
  63.         " para poder invocar set_cell_type( ).
  64.         DATA(l_col) = CAST cl_salv_column_table(
  65.                         g_columns->get_column( columnname = CONV lvc_fname( i_name ) ) ).
  66.  
  67.         l_col->set_cell_type( if_salv_c_cell_type=>hotspot ).
  68.  
  69.         APPEND CONV lvc_fname( i_name ) TO t_hotspot_cols.
  70.  
  71.         " Registrar el handler del evento link_click sobre el ALV
  72.         DATA(l_events) = g_alv->get_event( ).
  73.         SET HANDLER me->on_link_click FOR l_events.
  74.  
  75.       CATCH cx_root.
  76.         EXIT.
  77.     ENDTRY.
  78.   ENDMETHOD.
  79.  
  80.  
  81.   METHOD on_link_click.
  82.     READ TABLE t_hotspot_cols TRANSPORTING NO FIELDS
  83.       WITH KEY table_line = column.
  84.     IF sy-subrc <> 0.
  85.       RETURN.
  86.     ENDIF.
  87.  
  88.     CLEAR g_clicked_row.
  89.     APPEND row TO g_clicked_row.
  90.  
  91.     g_alv->close_screen( ).
  92.   ENDMETHOD.
  93.  
  94.   METHOD set_column.
  95.     TRY.
  96.         DATA(l_col) = g_columns->get_column( columnname = CONV lvc_fname( i_name ) ). "
  97.       CATCH cx_root.
  98.         EXIT.
  99.     ENDTRY.
  100. *--[ Por Defecto
  101.       l_col->set_long_text( CONV scrtext_l( to_upper( i_NAME ) ) ).
  102.       l_col->set_medium_text( CONV scrtext_m( to_upper( i_NAME ) ) ).
  103.       l_col->set_short_text( CONV scrtext_s( to_upper( i_NAME ) ) ).
  104.  
  105.     IF i_tit_l IS NOT INITIAL and i_tit_l is SUPPLIED.
  106.       l_col->set_long_text( CONV scrtext_l( i_TIT_L ) ).
  107.     ENDIF.
  108.  
  109.     IF i_tit_M IS NOT INITIAL and i_tit_m is SUPPLIED.
  110.       l_col->set_medium_text( CONV scrtext_m( i_TIT_M ) ).
  111.     ENDIF.
  112.  
  113.     IF i_tit_S IS NOT INITIAL  and i_tit_s is SUPPLIED.
  114.       l_col->set_short_text( CONV scrtext_s( i_TIT_S ) ).
  115.     ENDIF.
  116.   ENDMETHOD.
  117.  
  118.   METHOD alv_new.
  119.  
  120.     TRY.
  121.         cl_salv_table=>factory(
  122.           IMPORTING
  123.             r_salv_table = g_alv
  124.           CHANGING
  125.             t_table      = p_table ).
  126.       CATCH cx_salv_msg.
  127.         EXIT.                                           "#EC NO_HANDLER
  128.     ENDTRY.
  129.  
  130.     g_functions   = g_alv->get_functions( ).
  131.     g_columns     = g_alv->get_columns( ).
  132.     g_selections  = g_alv->get_selections( ).
  133.     g_layout      = g_alv->get_layout( ).
  134.     g_display     = g_alv->get_display_settings( ).
  135.  
  136.     g_grid        = NEW cl_salv_form_layout_grid( ).
  137.     g_layout_logo = NEW cl_salv_form_layout_logo( ).
  138.  
  139. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  140. *--[ T&#65533;tulo y pantalla superior
  141. *    G_GRID->create_label( row = 1 column = 1 text = 'T&#65533;tulo' tooltip = 'ToolTIp' ).
  142. *    G_GRID->create_label( row = 2 column = 1 text = 'SubT&#65533;tulo' tooltip = 'ToolTIp' ).
  143. *    G_layout_logo->set_left_content( G_GRID ).
  144. *    G_CONTENT = G_layout_logo.
  145. *    G_ALV->set_top_of_list(  G_CONTENT ).
  146.  
  147.     g_functions->set_all( abap_true ).
  148.     g_columns->set_optimize( abap_true ).
  149.  
  150. *--[ Zebra
  151.     G_display->set_striped_pattern( cl_salv_display_settings=>true ).
  152.  
  153. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  154. *--[ Columnas
  155.     TRY.
  156.         DATA(l_col) = g_columns->get_column( columnname = 'MANDT' ). " Bye Bye Bye
  157.         l_col->set_visible( value  = if_salv_c_bool_sap=>false ).
  158.       CATCH cx_root.
  159.         CLEAR sy-subrc.
  160.     ENDTRY.
  161.  
  162. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  163. *--[ Disposiciones
  164. *    G_LAYOUT->set_key( VALUE = VALUE #( REPORT = sy-repid ) ).
  165. *    G_LAYOUT->set_save_restriction( if_salv_c_layout=>restrict_none ).
  166. *    G_LAYOUT->set_default( abap_true ).
  167.  
  168.     g_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
  169.  
  170.     popup = VALUE #( start_x = 1 start_y = 1 end_x = 180 end_y = 20 ). "<-- Default
  171.  
  172.   ENDMETHOD.
  173.  
  174.   METHOD alv_show.
  175.     CLEAR g_clicked_row[].
  176. *--[ Preparamos el popup
  177.     IF p_popup = abap_true.
  178.       IF p_popup_xy IS NOT INITIAL.
  179.         popup = p_popup_xy.
  180.       ENDIF.
  181.       g_alv->set_screen_popup( start_column = popup-start_x "1
  182.                                end_column   = popup-end_x "180
  183.                                start_line   = popup-start_y "1
  184.                                end_line     = popup-end_y ). "20
  185.     ENDIF.
  186.  
  187. *--[ Mostramos el ALV
  188.     g_alv->display( ).
  189.  
  190.     IF g_clicked_row IS NOT INITIAL.
  191.       p_return = g_clicked_row.        " Simulamos la selección por hotspot
  192.     ELSE.
  193.       p_return = g_selections->get_selected_rows( ).
  194.     ENDIF.
  195.  
  196.   ENDMETHOD.
  197.  
  198. ENDCLASS .
  199.  
  200. ****END-OF-SELECTION.
  201. ****
  202. *****--[ Para el ejemplo
  203. ****  SELECT * FROM t005t UP TO 500 ROWS INTO TABLE @DATA(t_bp) WHERE spras = @sy-langu.
  204. ****
  205. ****  DATA(nl) = NEW zini_cl_falv( ).
  206. ****
  207. ****  nl->alv_new( CHANGING p_table = t_bp ).
  208. *****--[ Esta en dos metodos, por si queremos toquetear por en medio columnas y demas
  209. **** nl->set_hotspot( i_name = 'EXPEDIENTE' ).
  210. ****  nl->set_column( i_name = 'LANDX50' i_tit_l = 'Soy un título bien largo' i_tit_m = 'Y yo medio' ).
  211. ****  DATA(l_seleccionados) = nl->alv_show( ).
  212. *****  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 ) ).
  213. ****
  214. *****  BREAK-POINT. "<-- A Efectos de test

SAP ABAP Programación Class ALV

Última modificación de la página el 21 August 2026 a las 06h41
Powered by PmWiki