Большинство языков программирования высокого уровня позволяют определять несколько функций с одинаковыми названиями в одной области. Язык ABAP такую возможность нам не предоставляет. Однако, ее можно имитировать используя Generic Types и RTTS.
Сразу скажу что не важно что мы собираемся перегрузить: метод класса или процедуру, технология будет одна и та же.
Пример
Допустим, мы хотим написать процедуру show_messages, отображающую список сообщений в модальном окне. Структура таблицы сообщений зависит от решаемой задачи: если необходимо отобразить сообщения, сформировавшиеся в результате выполнения пакетного ввода, то используется структура bdcmsgcoll; для логирования действий может использоваться структура mesg или сторонняя Z* структура и т.п..
Для отображения сообщений будет удобно всегда использовать show_messages не зависимо от типа таблицы. Пример реализации перегрузки ниже.
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 |
*&---------------------------------------------------------------------* *& Form show_messages *&---------------------------------------------------------------------* * Вывод таблицы сообщений в модальном окне *----------------------------------------------------------------------* FORM show_messages TABLES it_table. CASE cl_abap_tabledescr=>describe_by_data( it_table ). WHEN cl_abap_tabledescr=>describe_by_name( 'MESG' ). PERFORM show_messages_mesg TABLES it_table. WHEN cl_abap_tabledescr=>describe_by_name( 'BDCMSGCOLL' ). PERFORM show_messages_bdcmsgcoll TABLES it_table. ... WHEN OTHERS . ENDCASE. ENDFORM. " show_messages *&---------------------------------------------------------------------* *& Form show_messages_mesg *&---------------------------------------------------------------------* FORM show_messages_mesg TABLES it_table STRUCTURE mesg. ... ENDFORM. " show_messages_mesg *&---------------------------------------------------------------------* *& Form show_messages_bdcmsgcoll *&---------------------------------------------------------------------* FORM show_messages_bdcmsgcoll TABLES it_table STRUCTURE bdcmsgcoll. ... ENDFORM. " show_messages_bdcmsgcoll |
Заключение
Таким образом, в процедуру мы передаем произвольный тип таблицы, в теле процедуры этот тип определяем, затем передаем управление соответствующей процедуре.
Присоединиться к обсуждению...