14 мая 2019

Отслеживание изменений в пользовательских таблицах

Создаём объект документа изменений и выполняем запись истории изменения. Кратко.


Предпосылки


Необходимо установить галку «Документ изменений» в элементах данных тех полей, для которых необходимо вести запись изменений.



Создание объекта документа изменений


Предположим, есть таблица ZTEST_TAB_01 со следующими полями: MANDT, ID, FIRSTNAME, LASTNAME, ADDRESS, CITY.

Объект документа изменений создаётся в транзакции SCDO. На первом экране нажать кнопку «Создать». 



Указать название, далее краткое описание, имя таблицы, для которой будет вестись запись.



Перейти в меню «Утилиты» – «Сгенерировать программу обновления».


Заполнить поля и нажать «Сгенерировать». Отобразится сводная информация. Нажать «Активировать». Будет сгенерирована группа функций.


Пример программы для записи документа изменений


Изменение существующей записи


  DATA:
    lv_objid          TYPE cdhdr-objectid,
    ls_test_tab_01_o  TYPE ztest_tab_01,
    ls_test_tab_01_n  TYPE ztest_tab_01,
    lt_cdtxt          TYPE TABLE OF cdtxt.

  CLEAR:
    ls_test_tab_01_o,
    ls_test_tab_01_n.
  
  lv_objid = 101.

  SELECT SINGLE *
    FROM ztest_tab_01
    INTO ls_test_tab_01_o
    WHERE id EQ 101.

  ls_test_tab_01_n = ls_test_tab_01_o.
  ls_test_tab_01_n-firstname = 'John'.

  CALL FUNCTION 'ZTEST_TAB_01_WRITE_DOCUMENT'
    EXPORTING
      objectid                      = lv_objid
      tcode                         = sy-tcode
      utime                         = sy-uzeit
      udate                         = sy-datum
      username                      = sy-uname
*     planned_change_number         = ' '
*     object_change_indicator       = 'U'
*     planned_or_real_changes       = ' '
      no_change_pointers            = ' '
*     upd_icdtxt_ztest_tab_01       = ' '
      n_ztest_tab_01                = ls_test_tab_01_n
      o_ztest_tab_01                = ls_test_tab_01_o
      upd_ztest_tab_01              = 'U'
    TABLES
      icdtxt_ztest_tab_01           = lt_cdtxt.

Добавление новой записи


  DATA:
    lv_objid          TYPE cdhdr-objectid,
    ls_test_tab_01_o  TYPE ztest_tab_01,
    ls_test_tab_01_n  TYPE ztest_tab_01,
    lt_cdtxt          TYPE TABLE OF cdtxt.

  CLEAR:
    ls_test_tab_01_o,
    ls_test_tab_01_n.
  
  lv_objid = 101.

  ls_test_tab_01_n-id = 101.
  ls_test_tab_01_n-firstname = 'Peter'.
  ls_test_tab_01_n-lastname = 'McDonald'.

  CALL FUNCTION 'ZTEST_TAB_01_WRITE_DOCUMENT'
    EXPORTING
      objectid                      = lv_objid
      tcode                         = sy-tcode
      utime                         = sy-uzeit
      udate                         = sy-datum
      username                      = sy-uname
*     planned_change_number         = ' '
      object_change_indicator       = 'I'
*     planned_or_real_changes       = ' '
      no_change_pointers            = ' '
*     upd_icdtxt_ztest_tab_01       = ' '
      n_ztest_tab_01                = ls_test_tab_01_n
      o_ztest_tab_01                = ls_test_tab_01_o
      upd_ztest_tab_01              = 'I'
    TABLES
      icdtxt_ztest_tab_01           = lt_cdtxt.

Удаление записи


  DATA:
    lv_objid          TYPE cdhdr-objectid,
    ls_test_tab_01_o  TYPE ztest_tab_01,
    ls_test_tab_01_n  TYPE ztest_tab_01,
    lt_cdtxt          TYPE TABLE OF cdtxt.

  CLEAR:
    ls_test_tab_01_o,
    ls_test_tab_01_n.

  lv_objid = 101.

  SELECT SINGLE *
    FROM ztest_tab_01
    INTO ls_test_tab_01_o
    WHERE id EQ 101.

  CALL FUNCTION 'ZTEST_TAB_01_WRITE_DOCUMENT'
    EXPORTING
      objectid                      = lv_objid
      tcode                         = sy-tcode
      utime                         = sy-uzeit
      udate                         = sy-datum
      username                      = sy-uname
*     planned_change_number         = ' '
      object_change_indicator       = 'D'
*     planned_or_real_changes       = ' '
      no_change_pointers            = ' '
*     upd_icdtxt_ztest_tab_01       = ' '
      n_ztest_tab_01                = ls_test_tab_01_n
      o_ztest_tab_01                = ls_test_tab_01_o
      upd_ztest_tab_01              = 'D'
    TABLES
      icdtxt_ztest_tab_01           = lt_cdtxt.

Для чтения изменений из таблиц CDHDR и CDPOS используются ФМы CHANGEDOCUMENT_READ_HEADERS и CHANGEDOCUMENT_READ_POSITIONS.


Комментариев нет:

Отправить комментарий