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





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