1. REPORT  znadar_auditoria_notas.
  2.  
  3. TABLES: cwbnthead,
  4.         cwbntcust,
  5.         cwbntmsg,
  6.         CMP_VBFS_EXT,
  7.         cwbntstxt.
  8.  
  9. TYPES: BEGIN OF ty_notes,
  10.          numm       TYPE cwbntnumm,
  11.          versno     TYPE cwbntvers,
  12.          ntstatus   TYPE cwbntstat,
  13.          prstatus   TYPE cwbprstat,
  14.          cwbuser    TYPE uname ,
  15.          langu      TYPE sylangu,
  16.          uname      TYPE syuname,
  17.          fecha      type sy-datum,
  18.          hora       type sy-uzeit,
  19.          stext      TYPE cwbntstext,
  20.          msg        TYPE bapi_msg,
  21.        END OF ty_notes.
  22.  
  23. SELECT-OPTIONS: s_num  FOR cwbntcust-numm,
  24.                 s_nt   FOR cwbntcust-ntstatus,
  25.                 s_pr   FOR cwbntcust-prstatus,
  26.                 s_user FOR cwbntcust-cwbuser,
  27.                 s_msg  for CMP_VBFS_EXT-message LOWER CASE.
  28.  
  29. DATA: t_cust TYPE STANDARD TABLE OF ty_notes,
  30.       l_cust_01 TYPE ty_notes,
  31.       l_cust_02 TYPE ty_notes,
  32.       t_cust_final TYPE STANDARD TABLE OF ty_notes.
  33.  
  34. class lcl_event_handler definition.
  35.  
  36.  PUBLIC SECTION.
  37. **  METHODS: on_double_click for event double_click of cl_gui_alv_grid
  38. **             IMPORTING es_row_no e_column.
  39. METHODS:
  40.       on_DOUBLE_CLICK
  41.         FOR EVENT DOUBLE_CLICK OF cl_salv_events_table
  42.           IMPORTING
  43.             row
  44.             column  .
  45.  
  46.  
  47. ENDCLASS.
  48.  
  49. class lcl_event_handler IMPLEMENTATION.
  50.  
  51.  METHOD on_double_click.
  52.     BREAK-POINT.
  53.     read table t_cust into l_cust_01 INDEX row.
  54.     check sy-subrc = 0.
  55. data: ls_note type BCWBN_NOTE.
  56.     MOVE-CORRESPONDING l_cust_01 to ls_note-key.
  57.     CALL FUNCTION 'SCWB_NA_SCREEN'
  58.       CHANGING
  59.         cs_note              = ls_note
  60.      EXCEPTIONS
  61.        ERROR                = 1
  62.        OTHERS               = 2.
  63.  ENDMETHOD.
  64. endclass.
  65.  
  66.  
  67. INITIALIZATION.
  68.   s_pr-sign   = 'E'.
  69.   s_pr-option = 'EQ'.
  70.   s_pr-low    = 'O'.
  71.   APPEND s_pr.
  72.   s_pr-low    = 'V'.
  73.   APPEND s_pr.
  74.  
  75.   s_nt-sign   = 'E'.
  76.   s_nt-option = 'EQ'.
  77.   s_nt-low    = 'R'.
  78.   APPEND s_nt.
  79.  
  80. END-OF-SELECTION.
  81.  
  82.   SELECT * FROM  cwbntcust AS a
  83.     INNER JOIN cwbnthead AS b
  84.     ON b~numm = a~numm
  85.     INNER JOIN cwbntstxt AS c
  86.     ON c~numm = a~numm AND
  87.        c~versno = b~versno
  88.      INTO CORRESPONDING FIELDS OF TABLE t_cust
  89.          WHERE  a~numm      IN s_num
  90.          AND    a~ntstatus  IN s_nt
  91.          AND    a~prstatus  IN s_pr
  92.          AND    a~cwbuser   IN s_user.
  93.   SORT t_cust BY numm ASCENDING
  94.                  versno DESCENDING.
  95.   DELETE ADJACENT DUPLICATES FROM t_cust.
  96.  
  97. *--[ Eliminamos versiones obsoletas
  98.   LOOP AT t_cust INTO l_cust_01.
  99.  
  100.     READ TABLE t_cust_final INTO l_cust_02
  101.                            WITH KEY numm   = l_cust_01-numm
  102.                                      versno = l_cust_01-versno
  103.                                      langu  = l_cust_01-langu.
  104.     IF sy-subrc EQ 0.
  105.       CONTINUE.
  106.     ELSE.
  107.       CLEAR sy-pagno.
  108.       LOOP AT t_cust_final INTO l_cust_02 WHERE numm = l_cust_01-numm.
  109.         IF l_cust_02-versno <= l_cust_01-versno.
  110.           sy-pagno = 1.
  111.         ENDIF.
  112.       ENDLOOP.
  113.       IF sy-pagno = 1 OR sy-subrc NE 0.
  114.         APPEND l_cust_01 TO t_cust_final.
  115.       ENDIF.
  116.     ENDIF.
  117.   ENDLOOP.
  118.   t_cust[] = t_cust_final[].
  119. *--[ Eliminamos idiomas obsoletos.
  120.   DATA: del(1).
  121.   LOOP AT t_cust INTO l_cust_01.
  122.     CLEAR del.
  123.     sy-pagno = sy-tabix.
  124.     CASE l_cust_01-langu.
  125.       WHEN 'S' OR 'c'.
  126.       WHEN 'D'.
  127.         READ TABLE t_cust INTO l_cust_02
  128.                   WITH KEY numm   = l_cust_01-numm
  129.                            versno = l_cust_01-versno
  130.                            langu  = 'E'.
  131.         IF sy-subrc EQ 0.
  132.           del = 'X'.
  133.         ENDIF.
  134.       WHEN 'E'.
  135.         READ TABLE t_cust INTO l_cust_02
  136.                   WITH KEY numm   = l_cust_01-numm
  137.                            versno = l_cust_01-versno
  138.                            langu  = 'S'.
  139.         IF sy-subrc EQ 0.
  140.           del = 'X'.
  141.         ENDIF.
  142.       WHEN 'J' OR 'C' OR 'Z1'.
  143.         READ TABLE t_cust INTO l_cust_02
  144.    WITH KEY numm   = l_cust_01-numm
  145.             versno = l_cust_01-versno
  146.             langu  = 'E'.
  147.         IF sy-subrc EQ 0.
  148.           del = 'X'.
  149.         ENDIF.
  150.  
  151.     ENDCASE.
  152.     IF NOT del IS INITIAL.
  153.       DELETE t_cust INDEX sy-pagno.
  154.     ELSE.
  155.       DATA: l_cwbntmsg TYPE cwbntmsg.
  156.       clear: l_cwbntmsg, sy-lisel.
  157.       SELECT counter sysid msgid msgty msgno msgv1
  158.                     msgv2 msgv3 msgv4 uname tstamp
  159.          FROM  cwbntmsg
  160.         UP TO 1 ROWS
  161.          INTO CORRESPONDING FIELDS OF l_cwbntmsg
  162.              WHERE  numm     = l_cust_01-numm
  163.              ORDER BY counter DESCENDING.
  164. *          MOVE-CORRESPONDING l_cwbntmsg to l_cust_01.
  165.  
  166.         l_cust_01-uname  = l_cwbntmsg-uname.
  167.         sy-lisel = l_cwbntmsg-tstamp.
  168.         CONDENSE sy-lisel NO-GAPS.
  169.         l_cust_01-fecha = sy-lisel+0(8).
  170.         l_cust_01-hora  = sy-lisel+8(6).
  171.  
  172.         CALL FUNCTION 'MESSAGE_TEXT_BUILD'
  173.           EXPORTING
  174.             msgid               = l_cwbntmsg-msgid
  175.             msgnr               = l_cwbntmsg-msgno
  176.             msgv1               = l_cwbntmsg-msgv1
  177.             msgv2               = l_cwbntmsg-msgv2
  178.             msgv3               = l_cwbntmsg-msgv3
  179.             msgv4               = l_cwbntmsg-msgv4
  180.           IMPORTING
  181.             message_text_output = l_cust_01-msg.
  182.         CONDENSE l_cust_01-msg.
  183.         if l_cust_01-msg in s_msg.
  184.          else.
  185.            delete t_cust INDEX sy-pagno .
  186.            continue.
  187.         endif.
  188.         MODIFY t_cust INDEX sy-pagno FROM l_cust_01.
  189.       ENDSELECT.
  190.     ENDIF.
  191.   ENDLOOP.
  192.   sort t_cust by fecha DESCENDING
  193.                  hora DESCENDING
  194.                  numm DESCENDING.
  195.  
  196.   DATA lo_alv               TYPE REF TO cl_salv_table.
  197.   DATA lex_message          TYPE REF TO cx_salv_msg.
  198.   DATA lo_layout_settings   TYPE REF TO cl_salv_layout.
  199.   DATA lo_layout_key        TYPE        salv_s_layout_key.
  200.   DATA lo_columns           TYPE REF TO cl_salv_columns_table.
  201.   DATA lo_column            TYPE REF TO cl_salv_column.
  202.   DATA lex_not_found        TYPE REF TO cx_salv_not_found.
  203.   DATA lo_functions         TYPE REF TO cl_salv_functions_list.
  204.   DATA lo_display_settings  TYPE REF TO cl_salv_display_settings.
  205.  
  206.   data: gr_events type ref to lcl_event_handler.
  207.   data: lr_events type ref to cl_salv_events_table.
  208.  
  209.   TRY.
  210.       cl_salv_table=>factory(
  211.         IMPORTING
  212.           r_salv_table = lo_alv
  213.         CHANGING
  214.           t_table      = t_cust ).
  215.  
  216.     CATCH cx_salv_msg INTO lex_message.
  217.  
  218.   ENDTRY.
  219.  
  220.   lo_layout_settings   = lo_alv->get_layout( ).
  221.   lo_layout_key-report = sy-repid.
  222.   lo_layout_settings->set_key( lo_layout_key ).
  223.   lo_layout_settings->set_save_restriction( if_salv_c_layout=>restrict_none ).
  224.  
  225.   lo_functions = lo_alv->get_functions( ).
  226.   lo_functions->set_all( ).
  227.  
  228.   lo_columns = lo_alv->get_columns( ).
  229.   lo_columns->set_optimize( ).
  230.  
  231.   lo_display_settings = lo_alv->get_display_settings( ).
  232.   lo_display_settings->set_striped_pattern( if_salv_c_bool_sap=>true ).
  233.  
  234.   lo_display_settings->set_list_header( 'OSS SNOTEs' ).
  235.  
  236.    lr_events = lo_alv->get_event( ).
  237.   create object gr_events.
  238.   set handler gr_events->on_double_click for lr_events.
  239.   lo_alv->display( ).