REPORT zini_01.
CLASS zini_cl_falv DEFINITION. " FAST ALV
PUBLIC SECTION.
CONSTANTS: c_version TYPE string VALUE 'v01.05'.
*--[ Coordenadas XY
TYPES: BEGIN OF ty_pop,
start_x TYPE i,
start_y TYPE i,
end_x TYPE i,
end_y TYPE i,
END OF ty_pop.
DATA: popup TYPE ty_pop.
*--[ Datos Globales para toquetear en publico
DATA: g_alv TYPE REF TO cl_salv_table,
g_functions TYPE REF TO cl_salv_functions_list,
g_columns TYPE REF TO cl_salv_columns_table,
g_selections TYPE REF TO cl_salv_selections,
G_grid TYPE REF TO cl_salv_form_layout_grid,
g_layout TYPE REF TO cl_salv_layout,
g_content TYPE REF TO cl_salv_form_element,
g_display TYPE REF TO cl_salv_display_settings,
G_layout_logo TYPE REF TO cl_salv_form_layout_logo.
*--[ Metodos
METHODS: alv_new CHANGING p_table TYPE ANY TABLE,
set_column IMPORTING i_name TYPE string
i_tit_l TYPE string optional
i_tit_m TYPE string OPTIONAL
i_tit_s TYPE string OPTIONAL,
set_titulo IMPORTING i_data type any,
alv_show IMPORTING p_popup TYPE xfeld OPTIONAL
p_popup_xy TYPE ty_pop OPTIONAL
RETURNING VALUE(p_return) TYPE salv_t_row.
ENDCLASS.
CLASS zini_cl_falv IMPLEMENTATION.
method set_titulo.
g_display->set_list_header( CONV LVC_TITLE( i_data ) ).
endmethod.
METHOD set_column.
TRY.
DATA(l_col) = g_columns->get_column( columnname = CONV lvc_fname( i_name ) ). "
CATCH cx_root.
EXIT.
ENDTRY.
*--[ Por Defecto
l_col->set_long_text( CONV scrtext_l( to_upper( i_NAME ) ) ).
l_col->set_medium_text( CONV scrtext_m( to_upper( i_NAME ) ) ).
l_col->set_short_text( CONV scrtext_s( to_upper( i_NAME ) ) ).
IF i_tit_l IS NOT INITIAL and i_tit_l is SUPPLIED.
l_col->set_long_text( CONV scrtext_l( i_TIT_L ) ).
ENDIF.
IF i_tit_M IS NOT INITIAL and i_tit_m is SUPPLIED.
l_col->set_medium_text( CONV scrtext_m( i_TIT_M ) ).
ENDIF.
IF i_tit_S IS NOT INITIAL and i_tit_s is SUPPLIED.
l_col->set_short_text( CONV scrtext_s( i_TIT_S ) ).
ENDIF.
ENDMETHOD.
METHOD alv_new.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = g_alv
CHANGING
t_table = p_table ).
CATCH cx_salv_msg.
EXIT. "#EC NO_HANDLER
ENDTRY.
g_functions = g_alv->get_functions( ).
g_columns = g_alv->get_columns( ).
g_selections = g_alv->get_selections( ).
g_layout = g_alv->get_layout( ).
g_display = g_alv->get_display_settings( ).
g_grid = NEW cl_salv_form_layout_grid( ).
g_layout_logo = NEW cl_salv_form_layout_logo( ).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ T�tulo y pantalla superior
* G_GRID->create_label( row = 1 column = 1 text = 'T�tulo' tooltip = 'ToolTIp' ).
* G_GRID->create_label( row = 2 column = 1 text = 'SubT�tulo' tooltip = 'ToolTIp' ).
* G_layout_logo->set_left_content( G_GRID ).
* G_CONTENT = G_layout_logo.
* G_ALV->set_top_of_list( G_CONTENT ).
g_functions->set_all( abap_true ).
g_columns->set_optimize( abap_true ).
*--[ Zebra
G_display->set_striped_pattern( cl_salv_display_settings=>true ).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Columnas
TRY.
DATA(l_col) = g_columns->get_column( columnname = 'MANDT' ). " Bye Bye Bye
l_col->set_visible( value = if_salv_c_bool_sap=>false ).
CATCH cx_root.
CLEAR sy-subrc.
ENDTRY.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Disposiciones
* G_LAYOUT->set_key( VALUE = VALUE #( REPORT = sy-repid ) ).
* G_LAYOUT->set_save_restriction( if_salv_c_layout=>restrict_none ).
* G_LAYOUT->set_default( abap_true ).
g_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
popup = VALUE #( start_x = 1 start_y = 1 end_x = 180 end_y = 20 ). "<-- Default
ENDMETHOD.
METHOD alv_show.
*--[ Preparamos el popup
IF p_popup = abap_true.
IF p_popup_xy IS NOT INITIAL.
popup = p_popup_xy.
ENDIF.
g_alv->set_screen_popup( start_column = popup-start_x "1
end_column = popup-end_x "180
start_line = popup-start_y "1
end_line = popup-end_y ). "20
ENDIF.
*--[ Mostramos el ALV
g_alv->display( ).
p_return = g_selections->get_selected_rows( ).
ENDMETHOD.
ENDCLASS .
****END-OF-SELECTION.
****
*****--[ Para el ejemplo
**** SELECT * FROM t005t UP TO 500 ROWS INTO TABLE @DATA(t_bp) WHERE spras = @sy-langu.
****
**** DATA(nl) = NEW zini_cl_falv( ).
****
**** nl->alv_new( CHANGING p_table = t_bp ).
*****--[ Esta en dos metodos, por si queremos toquetear por en medio columnas y demas
**** nl->set_column( i_name = 'LANDX50' i_tit_l = 'Soy un tÃtulo bien largo' i_tit_m = 'Y yo medio' ).
**** DATA(l_seleccionados) = nl->alv_show( ).
***** 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 ) ).
****
***** BREAK-POINT. "<-- A Efectos de test