REPORT znadar_auditoria_notas.
TABLES: cwbnthead,
cwbntcust,
cwbntmsg,
CMP_VBFS_EXT,
cwbntstxt.
TYPES: BEGIN OF ty_notes,
numm TYPE cwbntnumm,
versno TYPE cwbntvers,
ntstatus TYPE cwbntstat,
prstatus TYPE cwbprstat,
cwbuser TYPE uname ,
langu TYPE sylangu,
uname TYPE syuname,
fecha type sy-datum,
hora type sy-uzeit,
stext TYPE cwbntstext,
msg TYPE bapi_msg,
END OF ty_notes.
SELECT-OPTIONS: s_num FOR cwbntcust-numm,
s_nt FOR cwbntcust-ntstatus,
s_pr FOR cwbntcust-prstatus,
s_user FOR cwbntcust-cwbuser,
s_msg for CMP_VBFS_EXT-message LOWER CASE.
DATA: t_cust TYPE STANDARD TABLE OF ty_notes,
l_cust_01 TYPE ty_notes,
l_cust_02 TYPE ty_notes,
t_cust_final TYPE STANDARD TABLE OF ty_notes.
class lcl_event_handler definition.
PUBLIC SECTION.
** METHODS: on_double_click for event double_click of cl_gui_alv_grid
** IMPORTING es_row_no e_column.
METHODS:
on_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF cl_salv_events_table
IMPORTING
row
column .
ENDCLASS.
class lcl_event_handler IMPLEMENTATION.
METHOD on_double_click.
BREAK-POINT.
read table t_cust into l_cust_01 INDEX row.
check sy-subrc = 0.
data: ls_note type BCWBN_NOTE.
MOVE-CORRESPONDING l_cust_01 to ls_note-key.
CALL FUNCTION 'SCWB_NA_SCREEN'
CHANGING
cs_note = ls_note
EXCEPTIONS
ERROR = 1
OTHERS = 2.
ENDMETHOD.
endclass.
INITIALIZATION.
s_pr-sign = 'E'.
s_pr-option = 'EQ'.
s_pr-low = 'O'.
APPEND s_pr.
s_pr-low = 'V'.
APPEND s_pr.
s_nt-sign = 'E'.
s_nt-option = 'EQ'.
s_nt-low = 'R'.
APPEND s_nt.
END-OF-SELECTION.
SELECT * FROM cwbntcust AS a
INNER JOIN cwbnthead AS b
ON b~numm = a~numm
INNER JOIN cwbntstxt AS c
ON c~numm = a~numm AND
c~versno = b~versno
INTO CORRESPONDING FIELDS OF TABLE t_cust
WHERE a~numm IN s_num
AND a~ntstatus IN s_nt
AND a~prstatus IN s_pr
AND a~cwbuser IN s_user.
SORT t_cust BY numm ASCENDING
versno DESCENDING.
DELETE ADJACENT DUPLICATES FROM t_cust.
*--[ Eliminamos versiones obsoletas
LOOP AT t_cust INTO l_cust_01.
READ TABLE t_cust_final INTO l_cust_02
WITH KEY numm = l_cust_01-numm
versno = l_cust_01-versno
langu = l_cust_01-langu.
IF sy-subrc EQ 0.
CONTINUE.
ELSE.
CLEAR sy-pagno.
LOOP AT t_cust_final INTO l_cust_02 WHERE numm = l_cust_01-numm.
IF l_cust_02-versno <= l_cust_01-versno.
sy-pagno = 1.
ENDIF.
ENDLOOP.
IF sy-pagno = 1 OR sy-subrc NE 0.
APPEND l_cust_01 TO t_cust_final.
ENDIF.
ENDIF.
ENDLOOP.
t_cust[] = t_cust_final[].
*--[ Eliminamos idiomas obsoletos.
DATA: del(1).
LOOP AT t_cust INTO l_cust_01.
CLEAR del.
sy-pagno = sy-tabix.
CASE l_cust_01-langu.
WHEN 'S' OR 'c'.
WHEN 'D'.
READ TABLE t_cust INTO l_cust_02
WITH KEY numm = l_cust_01-numm
versno = l_cust_01-versno
langu = 'E'.
IF sy-subrc EQ 0.
del = 'X'.
ENDIF.
WHEN 'E'.
READ TABLE t_cust INTO l_cust_02
WITH KEY numm = l_cust_01-numm
versno = l_cust_01-versno
langu = 'S'.
IF sy-subrc EQ 0.
del = 'X'.
ENDIF.
WHEN 'J' OR 'C' OR 'Z1'.
READ TABLE t_cust INTO l_cust_02
WITH KEY numm = l_cust_01-numm
versno = l_cust_01-versno
langu = 'E'.
IF sy-subrc EQ 0.
del = 'X'.
ENDIF.
ENDCASE.
IF NOT del IS INITIAL.
DELETE t_cust INDEX sy-pagno.
ELSE.
DATA: l_cwbntmsg TYPE cwbntmsg.
clear: l_cwbntmsg, sy-lisel.
SELECT counter sysid msgid msgty msgno msgv1
msgv2 msgv3 msgv4 uname tstamp
FROM cwbntmsg
UP TO 1 ROWS
INTO CORRESPONDING FIELDS OF l_cwbntmsg
WHERE numm = l_cust_01-numm
ORDER BY counter DESCENDING.
* MOVE-CORRESPONDING l_cwbntmsg to l_cust_01.
l_cust_01-uname = l_cwbntmsg-uname.
sy-lisel = l_cwbntmsg-tstamp.
CONDENSE sy-lisel NO-GAPS.
l_cust_01-fecha = sy-lisel+0(8).
l_cust_01-hora = sy-lisel+8(6).
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = l_cwbntmsg-msgid
msgnr = l_cwbntmsg-msgno
msgv1 = l_cwbntmsg-msgv1
msgv2 = l_cwbntmsg-msgv2
msgv3 = l_cwbntmsg-msgv3
msgv4 = l_cwbntmsg-msgv4
IMPORTING
message_text_output = l_cust_01-msg.
CONDENSE l_cust_01-msg.
if l_cust_01-msg in s_msg.
else.
delete t_cust INDEX sy-pagno .
continue.
endif.
MODIFY t_cust INDEX sy-pagno FROM l_cust_01.
ENDSELECT.
ENDIF.
ENDLOOP.
sort t_cust by fecha DESCENDING
hora DESCENDING
numm DESCENDING.
DATA lo_alv TYPE REF TO cl_salv_table.
DATA lex_message TYPE REF TO cx_salv_msg.
DATA lo_layout_settings TYPE REF TO cl_salv_layout.
DATA lo_layout_key TYPE salv_s_layout_key.
DATA lo_columns TYPE REF TO cl_salv_columns_table.
DATA lo_column TYPE REF TO cl_salv_column.
DATA lex_not_found TYPE REF TO cx_salv_not_found.
DATA lo_functions TYPE REF TO cl_salv_functions_list.
DATA lo_display_settings TYPE REF TO cl_salv_display_settings.
data: gr_events type ref to lcl_event_handler.
data: lr_events type ref to cl_salv_events_table.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = t_cust ).
CATCH cx_salv_msg INTO lex_message.
ENDTRY.
lo_layout_settings = lo_alv->get_layout( ).
lo_layout_key-report = sy-repid.
lo_layout_settings->set_key( lo_layout_key ).
lo_layout_settings->set_save_restriction( if_salv_c_layout=>restrict_none ).
lo_functions = lo_alv->get_functions( ).
lo_functions->set_all( ).
lo_columns = lo_alv->get_columns( ).
lo_columns->set_optimize( ).
lo_display_settings = lo_alv->get_display_settings( ).
lo_display_settings->set_striped_pattern( if_salv_c_bool_sap=>true ).
lo_display_settings->set_list_header( 'OSS SNOTEs' ).
lr_events = lo_alv->get_event( ).
create object gr_events.
set handler gr_events->on_double_click for lr_events.
lo_alv->display( ).