Создание QUERY
Для создания запроса, достаточно в контекстном меню выбрать пункт Create Query
Создадим запрос Select_all, который будет показывать всё содержимое ноды
Также создадим запрос по элементам SELECT_BY_ELEMENT. В этом случае следует указать структуру с полями, по которым можно выполнять выборку
Создание Validation
Для создания проверки также выберем соответствующий пункт контекстного меню
Как видно, есть два типа валидации – проверка консистентности и проверка действия. Проверка консистентности проверяет правильность введенных данных. Проверка действия проверяет, можно ли выполнить то или иное действие.
Прежде всего мы создадим consistency validation, которая проверит наличие бизнес-партнера и, что это организация.
И укажем, что данная проверка должна проверять ноду ROOT в момент изменения строки или непосредственно в момент события проверки
Теперь необходимо создать класс кликнув дважды по его имени. В результате будет создан класс с интерфейсом /BOBF/IF_FRW_VALIDATION. Сама проверка выполняется в методе EXECUTE
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 45 46 47 48 |
METHOD /bobf/if_frw_validation~execute. DATA: ls_msg TYPE symsg, lv_partner TYPE bu_partner VALUE IS INITIAL, lv_type TYPE bu_type, lt_root TYPE zts_t_root, lo_message TYPE REF TO /bobf/cl_frw_message. FIELD-SYMBOLS <ls_root> TYPE zts_s_root. " Создаем объект с сообщениями IF eo_message IS INITIAL. eo_message = /bobf/cl_frw_factory=>get_message( ). ENDIF. " Получить содержимое строки io_read->retrieve( EXPORTING iv_node = is_ctx-node_key it_key = it_key IMPORTING et_data = lt_root ). " Проверка допустимости значений LOOP AT lt_root ASSIGNING <ls_root>. CLEAR ls_msg. IF <ls_root>-partner IS NOT INITIAL. SELECT SINGLE partner, type FROM but000 INTO (@lv_partner, @lv_type) WHERE partner = @<ls_root>-partner. ENDIF. IF lv_partner IS INITIAL. ls_msg-msgid = 'ZTS_MSG'. " БП &1 не найден ls_msg-msgty = 'E'. ls_msg-msgno = '001'. ls_msg-msgv1 = <ls_root>-partner. ELSE. IF lv_type <> 2. ls_msg-msgid = 'ZTS_MSG'. " БП &1 не является организацией ls_msg-msgty = 'E'. ls_msg-msgno = '002'. ls_msg-msgv1 = <ls_root>-partner. ENDIF. ENDIF. IF ls_msg-msgty = 'E'. eo_message->add_message( EXPORTING is_msg = ls_msg iv_node = is_ctx-node_key iv_key = <ls_root>-key iv_attribute = 'PARTNER' ). APPEND <ls_root> TO et_failed_key. ENDIF. ENDLOOP. ENDMETHOD. |
Теперь в транзакции BOBT попробуем поработать с нашим бизнес-объектом.
Попробуем добавить записи в корневую ноду.
При попытке добавить клиента с не правильным бизнес-партнером будет появляться сообщение об ошибке
Проверим выборку данных.
SELECT_ALL просто показывает все записи. Более интересно посмотреть работу SELECT_BY_ELEMENT:
Появится окно с возможностью задать нужные параметры
Нажав на соответствующую кнопку Open можно указать более сложные параметры типа RANGE
В результате будут отображены только записи, удовлетворяющие условиям