Requirement
Pada saat user mengubah data menggunakan table maintenance dengan Tcode SM30, perlu disimpan waktu dan user yang melakukan perubahan sebagai log data. Log data ini tidak diinput secara manual oleh user via SM30, tetapi secara otomatis akan tersimpan pada saat user menyimpan data via SM30.

Solution
1.Tambahkan field berikut di table.


2.Create table maintenance generator sepeti biasa.
3.Modify overview screen pada table maintenance generator. Pada layout screen, delete kolom untuk field ERDAT, ERZET, ERNAM, AEDAT, AEZET, dan AENAM. Dengan demikian, keeenam kolom ini tidak akan tampil via SM30, dan user tidak bisa mengubah isi field ini dengan SM30.

Screen layout before modified

Screen layout after modified (remove log field)

4.Create event pada table maintenance generator.


5.Create rutine dengan event 01 (Before saving data in the database).


6.Copy syntax berikut pada new include yang telah di-create.

                            *----------------------------------------------------------------------*              ***INCLUDE LZFAFIDT0035F01 .              *----------------------------------------------------------------------*              FORMf_logdata.LOOP              ATtotal.IF<action>=              'N'              OR<action>=              'U'              .              "when create or changePERFORMf_build_dataCHANGING<vim_total_struc>.MODIFYtotal.ENDIF              .ENDLOOP              .              ENDFORM              .              "f_logdata              *&---------------------------------------------------------------------*              *&      Form  f_build_data              *&---------------------------------------------------------------------*              FORMf_build_dataCHANGINGfc_data.DATAld_dataTYPE              REF              TO              data              .FIELD-SYMBOLS              :<ls_data>TYPE              ANY              ,              <ls_value>TYPE              ANY              .CREATE              DATAld_dataLIKEfc_data.ASSIGNld_data->*TO<ls_data>.MOVE-CORRESPONDINGfc_dataTO<ls_data>.ASSIGN              COMPONENT              'ERDAT'              OF              STRUCTURE<ls_data>TO<ls_value>.IF<ls_value>IS              ASSIGNED              AND<ls_value>IS              INITIAL              .              <ls_value>=sy-datum.ENDIF              .ASSIGN              COMPONENT              'ERZET'              OF              STRUCTURE<ls_data>TO<ls_value>.IF<ls_value>IS              ASSIGNED              AND              (<ls_value>IS              INITIAL              or<ls_value>=              ''              )              .              <ls_value>=sy-uzeit.ENDIF              .ASSIGN              COMPONENT              'ERNAM'              OF              STRUCTURE<ls_data>TO<ls_value>.IF<ls_value>IS              ASSIGNED              AND<ls_value>IS              INITIAL              .              <ls_value>=sy-uname.ENDIF              .ASSIGN              COMPONENT              'AEDAT'              OF              STRUCTURE<ls_data>TO<ls_value>.IF<ls_value>IS              ASSIGNED              .              <ls_value>=sy-datum.ENDIF              .ASSIGN              COMPONENT              'AEZET'              OF              STRUCTURE<ls_data>TO<ls_value>.IF<ls_value>IS              ASSIGNED              .              <ls_value>=sy-uzeit.ENDIF              .ASSIGN              COMPONENT              'AENAM'              OF              STRUCTURE<ls_data>TO<ls_value>.IF<ls_value>IS              ASSIGNED              .              <ls_value>=sy-uname.ENDIF              .MOVE<ls_data>TOfc_data.              ENDFORM              .              "f_set_data            

Atau copy syntax berikut:

              *----------------------------------------------------------------------*              FORMf_logdata.              FIELD-SYMBOLS<value>TYPE              ANY              .              LOOP              ATtotal.              CHECK<vim_total_struc>IS              ASSIGNED              .              IF<action>=              'N'              .              "createASSIGN              COMPONENT              'ERDAT'                            OF              STRUCTURE<vim_total_struc>TO<value>.              IFsy-subrc=              0              .              <value>=sy-datum.ENDIF              .ASSIGN              COMPONENT              'ERNAM'                            OF              STRUCTURE<vim_total_struc>TO<value>.              IFsy-subrc=              0              .              <value>=sy-uname.              ENDIF              .ELSEIF<action>=              'U'              .              "change              ASSIGN              COMPONENT              'AEDAT'              OF              STRUCTURE<vim_total_struc>TO<value>.              IFsy-subrc=              0              .              <value>              =sy-datum.              ENDIF              .              ASSIGN              COMPONENT              'AENAM'              OF              STRUCTURE<vim_total_struc>TO<value>.              IFsy-subrc=              0              .              <value>              =sy-uname.              ENDIF              .              ENDIF              .              MODIFYtotal.              ENDLOOP              . ENDFORM.                *----------------------------------------------------------------------*                          

Testing

Insert data using SM30

See log using SE16

Related posts