* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ include ZXXXXXXX_CLS.
CLASS zMAIN_msg DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF ty_msg,
text TYPE char100sm,
msgid TYPE symsgid,
msgty TYPE symsgty,
msgno TYPE symsgno,
msgv1 TYPE symsgv,
msgv2 TYPE symsgv,
msgv3 TYPE symsgv,
msgv4 TYPE symsgv,
END OF ty_msg.
DATA: t_msg TYPE STANDARD TABLE OF ty_msg.
METHODS: msg_add_sys IMPORTING iv_msgid TYPE symsgid
iv_msgno TYPE symsgno
iv_msgty TYPE symsgty
iv_msgv1 TYPE symsgv OPTIONAL
iv_msgv2 TYPE symsgv OPTIONAL
iv_msgv3 TYPE symsgv OPTIONAL
iv_msgv4 TYPE symsgv OPTIONAL,
msg_add_txt IMPORTING iv_text TYPE string
iv_msgty TYPE symsgty,
msg_display IMPORTING iv_popup TYPE boolean,
msg_refresh,
msg_check_error RETURNING value(rv_result) TYPE boolean.
ENDCLASS. "ZCL_MSG DEFINITION
CLASS ZMAIN_msg IMPLEMENTATION.
METHOD msg_check_error.
DATA: l_msg TYPE ty_msg.
READ TABLE t_msg WITH KEY msgty = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
rv_result = 'X'.
ELSE.
rv_result = ' '.
ENDIF.
ENDMETHOD. "msg_check_error
METHOD msg_refresh.
REFRESH t_msg.
ENDMETHOD. "msg_refresh
METHOD msg_display.
TYPE-POOLS esp1.
DATA: lt_message_tab TYPE esp1_message_tab_type,
ls_message_tab TYPE LINE OF esp1_message_tab_type,
l_msg TYPE ty_msg,
l_lineno TYPE mesg-zeile.
CHECK t_msg[] IS NOT INITIAL.
l_lineno = LINES( t_msg ).
IF iv_popup = 'X' OR l_lineno > 1.
LOOP AT t_msg INTO l_msg.
IF l_msg-msgid IS INITIAL.
*--[ Si es sólo texto lo maquillamos
l_msg-msgid = '00'.
l_msg-msgno = '398'.
ENDIF.
MOVE-CORRESPONDING l_msg TO ls_message_tab.
l_lineno = l_lineno + 1.
ls_message_tab-lineno = l_lineno.
INSERT ls_message_tab INTO TABLE lt_message_tab.
ENDLOOP.
CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_message_tab.
ELSEIF iv_popup IS INITIAL OR l_lineno = 1.
READ TABLE t_msg INTO l_msg INDEX 1.
IF l_msg-msgid IS INITIAL.
*--[ Si es sólo texto lo maquillamos
l_msg-msgid = '00'.
l_msg-msgno = '398'.
ENDIF.
MESSAGE ID l_msg-msgid TYPE l_msg-msgty NUMBER l_msg-msgno WITH l_msg-msgv1 l_msg-msgv2 l_msg-msgv3 l_msg-msgv4.
ENDIF.
ENDMETHOD. "msg_display
METHOD msg_add_txt.
*--[ Sólo metemos texto sin importar código
DATA: l_msg TYPE ty_msg,
l_string TYPE string.
l_msg-msgv1 = l_string = l_msg-text = iv_text.
l_msg-msgty = iv_msgty.
SHIFT l_string LEFT BY 50 PLACES.
l_msg-msgv2 = l_string.
INSERT l_msg INTO TABLE t_msg.
ENDMETHOD. "msg_add_txt
METHOD msg_add_sys.
*--[ Metemos todo el mensaje completo
DATA: l_msg TYPE ty_msg.
l_msg-msgid = iv_msgid .
l_msg-msgno = iv_msgno .
l_msg-msgty = iv_msgty .
l_msg-msgv1 = iv_msgv1 .
l_msg-msgv2 = iv_msgv2 .
l_msg-msgv3 = iv_msgv3 .
l_msg-msgv4 = iv_msgv4 .
MESSAGE ID iv_msgid TYPE l_msg-msgty
NUMBER l_msg-msgno
INTO l_msg-text
WITH l_msg-msgv1
l_msg-msgv2.
INSERT l_msg INTO TABLE t_msg.
ENDMETHOD. "MSG_ADD
ENDCLASS.
CLASS zmain_alv_fast DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
alv_paint IMPORTING iV_popup TYPE any
CHANGING it_tab TYPE ANY TABLE.
ENDCLASS.
CLASS zmain_alv_fast IMPLEMENTATION.
METHOD alv_paint.
DATA go_alv TYPE REF TO cl_salv_table.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = go_alv
CHANGING
t_table = it_tab[] ).
CATCH cx_salv_msg.
ENDTRY.
* DATA: lr_functions TYPE REF TO cl_salv_functions_list.
DATA(lr_functions) = go_alv->get_functions( ).
lr_functions->set_all( 'X' ).
DATA(ob_salv_selections) = go_alv->get_selections( ).
ob_salv_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
go_alv->get_columns( )->set_optimize( ).
* DATA(lr_column) = go_alv->get_columns( )->get_column( columnname = 'FLG' ).
* lr_column->set_visible( value = if_salv_c_bool_sap=>false ).
* lr_column = go_alv->get_columns( )->get_column( columnname = 'ORDENADOR_P' ).
* lr_column->set_visible( value = if_salv_c_bool_sap=>false ).
DATA(gr_display) = go_alv->get_display_settings( ).
* gr_display->set_list_header( 'Seleccione firmantes' ).
IF NOT iV_popup IS INITIAL.
go_alv->set_screen_popup(
start_column = 5
end_column = 90
start_line = 5
end_line = 25 ).
ENDIF.
go_alv->display( ).
ENDMETHOD.
ENDCLASS.
CLASS zmain_report DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Estructurales
eve_initialization,
eve_start_of_selection,
eve_end_of_selection,
eve_selection_screen_out,
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Operacionales
data_load,
data_list,
data_save.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
PRIVATE SECTION.
CLASS-DATA:
my_sy TYPE syst,
g_error TYPE sy-subrc, "<-- Control de errores
g_alv_fast TYPE REF TO zmain_alv_fast,
G_MSG type REF TO ZMAIN_MSG.
ENDCLASS.
CLASS zmain_report IMPLEMENTATION.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Operacionales
METHOD data_load.
ENDMETHOD.
METHOD data_list.
ENDMETHOD.
METHOD data_save.
ENDMETHOD.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Estructurales
METHOD eve_end_of_selection.
ENDMETHOD.
METHOD eve_start_of_selection.
ENDMETHOD.
METHOD eve_selection_screen_out.
ENDMETHOD.
METHOD eve_initialization.
MOVE-CORRESPONDING syst TO my_sy.
CREATE OBJECT g_alv_fast.
create object G_MSG.
ENDMETHOD.
ENDCLASS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ include ZXXXXXXX_TOP.
DATA: g_main TYPE REF TO zmain_report.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ include ZXXXXXXX_EVE.
INITIALIZATION.
CREATE OBJECT g_main.
g_main->eve_initialization( ).
AT SELECTION-SCREEN OUTPUT.
g_main->eve_selection_screen_out( ).
START-OF-SELECTION.
g_main->eve_start_of_selection( ).
END-OF-SELECTION.
g_main->eve_end_of_selection( ).