Создаём объект документа изменений и выполняем запись истории изменения. Кратко.
Предпосылки
Необходимо установить галку «Документ изменений» в элементах данных тех полей, для которых необходимо вести запись изменений.
Создание объекта документа изменений
Предположим, есть таблица 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.
Комментариев нет:
Отправить комментарий