terça-feira, 26 de novembro de 2013

Criando LOG de modificação para tabela transação SCDO

- Clicar em criar


- Apenas colocar a tabela e salvar
 

 - Colocar o cursor na tabela desejada e clicar em “Gerar prog.atualiz”.

- Colocar um grupo de função Z que não exista, (o grupo de função de acordo com o padrão da empresa).
- E clicar em “Gerar”..  vai aparecer um log apenas como simulação, para finalizar tem q apertar no botão salvar.

- Lembrar que em elementos de dados novos para gravar a modificação do campo tem que flegar o campo doc. Modificação conforme abaixo.
No meu caso eu quis exibir o log de modificação da visão de atualização na própria tela da SM30, nesse caso tem q implementar uma rotina nos eventos da visão de atualização. Além de implementar a inclusão do log no momento de salvar a alteração na tabela.
 
 - Abaixo o código para atualização do log antes de salvar.




FORM before_post_log.

  DATA: ls_cdhdr TYPE cdhdr.

  FIELD-SYMBOLS: <lfs_value>,
                 <lfs_field>.

  DATA: l_tabix TYPE sy-tabix,
        l_field TYPE c LENGTH 50.

  DATA: lt_comp TYPE TABLE OF rstrucinfo.

  DATA: ls_zmmt0002 TYPE zmmt0002,
        ls_zmmt0002_old TYPE zmmt0002,
        ls_comp TYPE rstrucinfo.

  SELECT fieldname
    INTO ls_comp-compname
    FROM dd03l
   WHERE tabname EQ 'ZMMT0002'.
    APPEND ls_comp TO lt_comp.
  ENDSELECT.

  ls_cdhdr-objectclas = 'ZMMT0002'.
  ls_cdhdr-username   = sy-uname.
  ls_cdhdr-udate      = sy-datum.
  ls_cdhdr-utime      = sy-uzeit.
  ls_cdhdr-tcode      = sy-tcode.

  LOOP AT total.

    l_tabix = sy-tabix.

    CHECK <action> <> space.

    IF <action> = 'N' OR <action> = 'U'.

      ASSIGN COMPONENT 'AEDAT' OF STRUCTURE <vim_total_struc> TO <lfs_value>.
      IF sy-subrc = 0.
        <lfs_value> = sy-datum.
      ENDIF.

      ASSIGN COMPONENT 'AENAM' OF STRUCTURE <vim_total_struc> TO <lfs_value>.
      IF sy-subrc = 0.
        <lfs_value> = sy-uname.
      ENDIF.

      MODIFY total INDEX l_tabix.

      LOOP AT lt_comp INTO ls_comp.

        CONCATENATE 'LS_ZMMT0002-' ls_comp-compname INTO l_field.
        ASSIGN (l_field) TO <lfs_field>.
        CHECK sy-subrc = 0.

        ASSIGN COMPONENT ls_comp-compname OF STRUCTURE <vim_total_struc> TO <lfs_value>.
        IF sy-subrc = 0.
          <lfs_field> = <lfs_value>.
        ENDIF.

      ENDLOOP.

      CONCATENATE sy-mandt ls_zmmt0002-mtart ls_zmmt0002-matnr ls_zmmt0002-werks
             INTO ls_cdhdr-objectid.

      IF <action> = 'U'.

        SELECT SINGLE *
          INTO ls_zmmt0002_old
          FROM zmmt0002
         WHERE mtart EQ ls_zmmt0002-mtart
           AND matnr EQ ls_zmmt0002-matnr
           AND werks EQ ls_zmmt0002-werks.

      ENDIF.

      PERFORM grava_modificacao USING ls_cdhdr
                                      'ZMMT0002'
                                      ls_zmmt0002_old
                                      ls_zmmt0002
                                      <action>.

    ENDIF.

  ENDLOOP.

ENDFORM.                    "before_post_log

*&---------------------------------------------------------------------*
*&      Form  GRAVA_MODIFICACAO
*&---------------------------------------------------------------------*
FORM grava_modificacao USING fs_cdhdr TYPE cdhdr
                             f_tabname
                             fs_data_old TYPE zmmt0002
                             fs_data_new TYPE zmmt0002
                             f_chg_ind.

  DATA: lt_cdtxt TYPE TABLE OF cdtxt.
  DATA: ls_cdtxt TYPE cdtxt.

  ls_cdtxt-teilobjid = fs_cdhdr-objectid.
  ls_cdtxt-textspr = sy-langu.
  ls_cdtxt-updkz   = f_chg_ind.
  APPEND  ls_cdtxt TO lt_cdtxt.

  CALL FUNCTION 'ZMMT0002_WRITE_DOCUMENT'
    EXPORTING
      objectid                      = fs_cdhdr-objectid
      tcode                         = fs_cdhdr-tcode
      utime                         = fs_cdhdr-utime
      udate                         = fs_cdhdr-udate
      username                      = fs_cdhdr-username
      n_zmmt0002                    = fs_data_new
      o_zmmt0002                    = fs_data_old
     UPD_ZMMT0002                  = f_chg_ind
    TABLES
      icdtxt_zmmt0002               = lt_cdtxt.


ENDFORM.                    " GRAVA_MODIFICACAO

*&---------------------------------------------------------------------*
*&      Module  Z_MOSTRA_LOG  INPUT
*&---------------------------------------------------------------------*
*       Mostra log
*----------------------------------------------------------------------*
MODULE z_mostra_log INPUT.

  IF function = 'ZLOG'.
    SUBMIT rsscd100 WITH objekt = 'ZMMT0002'
                    WITH objectid = ' '
                    WITH dat_bis = ' '
                    AND RETURN.
  ENDIF.

ENDMODULE.                 " Z_MOSTRA_LOG  INPUT

Nenhum comentário:

Postar um comentário