Регистрация обновлений базы данных SAP с документами изменений CDHDR

Существует таблица Z, которую необходимо часто обновлять. Эти обновления необходимо отслеживать, и теперь отслеживание реализовано с помощью функциональности документов изменений SAP.

Все работает нормально, записи в CDHDR создаются, но теперь *********_WRITE_DOCUMENT FM вызывается по сложной логике, т.к. обновления БД производятся с помощью инструкции:

MODIFY dbtab FROM itab.

Куда нужно поместить вызов *********_WRITE_DOCUMENT, чтобы отслеживать каждый раз, когда изменяется MODIFY itab? Как можно упростить эту процедуру? Как охватить все обновления БД


person Suncatcher    schedule 25.07.2012    source источник


Ответы (1)


Краткий ответ: это не сработает.

Длинный ответ: если вы не хотите этого добиться, вы должны сами получить информацию о том, что изменено и что вставлено. я бы сделал

выберите ... из ZTABLE в OLD_DATA_TAB для всех записей в ITAB, где ...

после этого переберите ITAB и проверьте, есть ли у вас соответствующий набор данных в вашем OLD_DATA_TAB и нужно ли его изменить.

С помощью этой информации вы можете создать входной параметр для *_WRITE_DOCUMENT, который вы вызываете после успешного изменения, но до фиксации.

person Hans Hohenfeld    schedule 25.07.2012
comment
Также хорошей идеей будет инкапсулировать весь материал load-save-revert-before_after_image-generate_change_document в класс и использовать его вместо того, чтобы засорять код операторами доступа к базе данных. Распределение операторов модификации базы данных по всему коду — это верный способ рано или поздно столкнуться с некоторыми неявными проблемами фиксации. - person vwegert; 26.07.2012
comment
@vwegert Не могу не согласиться :) - person Hans Hohenfeld; 26.07.2012
comment
Спасибо всем причастным лицам. Пусть будет) Вопрос закрыт. - person Suncatcher; 26.07.2012
comment
Ребята! Не могли бы вы дать мне пример кода такого класса, который должен инкапсулировать логику БД? Я не могу реализовать (спроектировать) его структуру и концепцию. - person Suncatcher; 31.07.2012