Пример класса для проверки – /SCWM/CL_DLV_ICC_H_REFDOC_INB.
Создаем новый класс, добавляем интерфейс /SCDL/IF_AF_ICC_FIELD_CHECK.
Заводим профиль, внутри указываем логическое имя поля и класс обработчик.
В моем случае проверка должна срабатывать для Z поля в структуре /SCDL/S_SP_A_HEAD_REFDOC (ссылочные документы в заголовке поставки).
Создаем реализацию метода /SCDL/IF_AF_ICC_FIELD_CHECK~CHECK
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 |
METHOD /scdl/if_af_icc_field_check~check. "Получаем Business Object Manager DATA(lo_bom) = /scdl/cl_bo_management=>get_instance( ). "Получаем Business Object по id документа DATA(lo_bo) = lo_bom->get_bo_by_id( iv_docid ). CHECK lo_bo IS BOUND. "Вытаскиваем заголовок DATA lo_header TYPE REF TO /scdl/cl_dl_header. lo_bo->get_header( EXPORTING iv_docid = iv_docid RECEIVING eo_header = lo_header ). CHECK lo_header IS BOUND. "Вытаскиваем ссылочные документы DATA(lt_refdoccat) = lo_header->/scdl/if_dl_refdoc_readonly~get_refdoc( ). "Проверяем условие, при котором должна возвращаться ошибка "write your code here... "Возвращаем ошибку IF eo_message IS NOT BOUND. CREATE OBJECT eo_message. ENDIF. DATA(ls_symsg) = VALUE symsg( ). MESSAGE e000(zmsg) INTO DATA(lv_dummy). ls_symsg-msgty = sy-msgty. ls_symsg-msgid = sy-msgid. ls_symsg-msgno = sy-msgno. ls_symsg-msgv1 = sy-msgv1. ls_symsg-msgv2 = sy-msgv2. eo_message->add_message( iv_msgcat = /scdl/cl_dm_message=>sc_msgty_error iv_doccat = lo_bo->get_doccat( ) iv_docid = lo_bo->get_docid( ) is_symsg = ls_symsg ). ENDMETHOD. |