В предыдущей статье мы рассмотрели SCDO — лог для Z* таблицы было рассмотрено создание логера для отслеживания изменений. Для этого был создан специальный ФМ, который и сохраняет изменения. Однако при ведении через сгенерированные ракурсы ведения он не вызывается. Добавим его туда. Для этого мы будем использовать события в ракурсах.
Добавим в ракурс ведения ZTEST_PAU логирование при добавлении записи.
Для этого в транзакции SE11 зайдем в генератор ведения таблиц и в меню Среда->Модификация->События
В открывшемся окошке, выберем событие или события при которых мы хотим выполнить наш код. Введем название подпрограммы и нажмем кнопку "редактор".
Событий существует очень много под самые разные случаи. Более подробно о событиях - Extended Table Maintenance Events
Нас интересует событие 01 и подпрограмму мы назовем z_01.
Система предложит нам создать новый Include для нашей подпрограммы. Соглашаемся.
Далее описываем нашу подпрограмму:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
*----------------------------------------------------------------------* ***INCLUDE LZTEST_PAUF04. *----------------------------------------------------------------------* FORM z_01. TYPES: BEGIN OF lty_s_line. INCLUDE STRUCTURE ztest_pau. "В случае наличия текстовой таблицы, вставляем сюда ее структуру INCLUDE STRUCTURE vimtbflags. TYPES: END OF lty_s_line. FIELD-SYMBOLS: <ls_line> TYPE lty_s_line. DATA ls_new_line TYPE ztest_pau. DATA ls_old_line TYPE ztest_pau. DATA lv_cdobjectv TYPE cdobjectv VALUE '1'. DATA lt_cdtxt TYPE TABLE OF cdtxt. " Данные об изменении записей хранятся во внутренней таблице total " VIM_ACTION - поле с операцией LOOP AT total ASSIGNING FIELD-SYMBOL(<ls_table>). ASSIGN <ls_table> TO <ls_line> CASTING. "Пишем в лог при вставке CHECK <ls_line>-VIM_ACTION = 'N'. MOVE-CORRESPONDING <ls_line> TO ls_new_line. "Внимание. Данный ФМ существует только для моей таблицы. У вас будет свой CALL FUNCTION 'ZTEST_PAU_WRITE_DOCUMENT' EXPORTING objectid = lv_cdobjectv tcode = sy-tcode utime = sy-uzeit udate = sy-datum username = sy-uname n_ztest_pau_data = ls_new_line o_ztest_pau_data = ls_old_line upd_zmm_req_data = 'I' TABLES icdtxt_ztest_pau_data = lt_cdtxt. ENDLOOP. ENDFORM. |
Выходим обратно и Сохраняем.
Готово. Наша подпрограмма сработает при ведении ракурса в SM30