Как определить дополнительную логику для OM инфо-типа?

Пояснение к вопросу

В одной из заметок я рассмотрел вопрос определения дополнительной логики для PA инфо-типа

См. заметку Как определить дополнительную логику для PA инфо-типа?

В этой же заметке я хочу рассмотреть возможность определения дополниельной логики для инфо-типов организационного менеджемента. Это может быть полезным, как и в случае с PA инфо-типами, например, для сокращения процента пользовательских ошибок при ведении мастер данных.

В качестве примера я предлагаю реализовать проверку на заполненность поля Object name инфо-типа 1000 - "Object" для объекта 91.

Решение вопроса

На этот этот раз на помощь приходит BAdI HRBAS00INFTY, доступ к которому можно получить, запустив транзакцию SE18

Создайте новое внедрение для этого BAdI, выбрав в меню Enhancement Implementation -> Create

Введите техническое наименование нового внедрения

Затем присвойте ему текстовое наименование

Для реализации проверки, про которую я написал выше, мне необходимо воспользоваться методом AFTER_INPUT. ABAP код может, приблизительно, следующим

METHOD if_ex_hrbas00infty~after_input.
 
    DATA: lt_1000  TYPE STANDARD TABLE OF p1000.
    FIELD-SYMBOLS: <fs_1000>   LIKE LINE OF lt_1000 .
 
 
    IF new_innnn-infty = '1000' AND new_innnn-otype = '91'.
 
      ASSIGN ('(MP100000)P1000') TO <fs_1000>.
 
      IF <fs_1000>-stext IS INITIAL.
        MESSAGE e003(zhr). "Please fill in "Object name" field!
      ENDIF.
 
    ENDIF.
 
  ENDMETHOD.

Активируйте метод и само внедрение. Для тестирования выполненных изменений можно воспользоваться транзакцией PP01

0:00
/0:14

Если стандартный вид сообщения об ошибке не устраивает, можно воспользоваться немного другой конструкцией. Точнее - всплывающим окном с такой же ошибкой. Для этого придется немного изменить код вывода сообщения об ошибке

METHOD if_ex_hrbas00infty~after_input.
 
    DATA: lt_1000  TYPE STANDARD TABLE OF p1000.
    FIELD-SYMBOLS: <fs_1000>   LIKE LINE OF lt_1000 .
 
 
    IF new_innnn-infty = '1000' AND new_innnn-otype = '91'.
 
      ASSIGN ('(MP100000)P1000') TO <fs_1000>.
 
      IF <fs_1000>-stext IS INITIAL.
        MESSAGE 'Please fill in "Object name" field!' TYPE 'A'. "Please fill in "Object name" field!
      ENDIF.
 
    ENDIF.
 
  ENDMETHOD.

Проверяем

0:00
/0:10