Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
guilherme_frisoni
Contributor

Sometimes we need to insert a change log when updating standard tables.

Here I'll show how to easy insert this change log.

In this example, we will insert a log for VBKD table, from VAXX transactions.

In sales order, VERKBELEG object is the one used.

  " Local Vars

  DATA: lc_objectid TYPE cdhdr-objectid, " Change Log Object

        ls_vbkd_old TYPE vbkd,           " Workarea before update

        ls_vbkd_new TYPE vbkd.           " Workarea after update

  " Load current values

  SELECT *

    FROM vbkd

    INTO ls_vbkd_old

    UP TO 1 ROWS.


  ls_vbkd_new = ls_vbkd_old.

  " Change ls_vbkd_new fields here

  " Set object id to update VERKBELEG object

  lc_objectid = ls_vbkd_old-vbeln.

  " Call update functions

  CALL FUNCTION 'CHANGEDOCUMENT_OPEN'

    EXPORTING

      objectclass      = 'VERKBELEG'

      objectid         = lc_objectid

    EXCEPTIONS

      sequence_invalid = 1

      OTHERS           = 2.

  CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'

    EXPORTING

      tablename              = 'VBKD'      " Table to update, could be anyone in VERKBELEG object

      workarea_new           = ls_vbkd_new " New values

      workarea_old           = ls_vbkd_old " Old values

    EXCEPTIONS

      nametab_error          = 1

      open_missing           = 2

      position_insert_failed = 3

      OTHERS                 = 4.

  CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'

    EXPORTING

      date_of_change         = sy-datum

      objectclass            = 'VERKBELEG'

      objectid               = lc_objectid

      tcode                  = 'ZTRANSACTION'  " Set your own transaction

      time_of_change         = sy-uzeit

      username               = sy-uname

    EXCEPTIONS

      header_insert_failed   = 1

      no_position_inserted   = 2

      object_invalid         = 3

      open_missing           = 4

      position_insert_failed = 5

      OTHERS                 = 6.

It's Done.