Event 01: Before saving the data in the database
Данное событие можно использовать для:
- самостоятельного заполнения скрытых или недоступных для пользователя полей,
- контроль введённых значений перед сохранением,
- логирования,
- доп. проверки полномочий и т.п.
Предположим у нас есть таблица следующего вида:
Создадим на её базе ракурс ведения:
Поля CHUSER и CHDATE у нас отмечены как R — доступные только для чтения.
Их заполнение будет автоматически выполняться при сохранении в БД.
Создадим для ракурса генератор ведения:
После чего создадим событие 01:
Перейдём к кодировке:
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 |
FORM fill_read_only_fields . DATA: lv_index LIKE sy-tabix. FIELD-SYMBOLS <lv_component> TYPE any. LOOP AT total. " Таблица со всеми данными в ракурсе IF <action> = aendern OR "Запись изменена <action> = neuer_eintrag. "Новая запись READ TABLE extract WITH KEY <vim_xtotal_key>. " Таблица с отображающимися " на экране в момент вызова события записями IF sy-subrc = 0. lv_index = sy-tabix. ELSE. CLEAR lv_index. ENDIF. ASSIGN COMPONENT 'CHUSER' OF STRUCTURE <vim_total_struc> TO <lv_component>. <lv_component> = sy-uname. ASSIGN COMPONENT 'CHDATE' OF STRUCTURE <vim_total_struc> TO <lv_component>. <lv_component> = sy-datum. MODIFY total. CHECK lv_index > 0. extract = total. MODIFY extract INDEX lv_index. ENDIF. ENDLOOP. ENDFORM. |
В результате сохранения поля будут заполняться нужными нам данными:
Контроль введённых значений перед сохранением
Сразу приведу кодировку:
1 2 3 4 5 6 7 8 |
FORM check_before_save. LOOP AT zsm_test_view_extract TRANSPORTING NO FIELDS WHERE url IS INITIAL AND action <> leer. "Не пустая строка MESSAGE 'Необходимо ввести URL' TYPE 'S' DISPLAY LIKE 'E'. vim_abort_saving = abap_true. ENDLOOP. ENDFORM. |
Где ИмяView_extract как и ИмяView_total — генерируются для каждого ракурса.
P.S. Реализацию этого и прочих событий в других ракурсах всегда можно подсмотреть в таблице TVIMF