Меню

Практическая работа с механизмами расширения системы (Enhancement)

|

В статье изложены принципы работы нового, начиная с версии 6.0, механизма расширения системы, с использованием точки расширения Enhancement. Также приведен пример создания расширения и несколько примеров практического использования расширений.


 

Точенюк Олег занимал должности консультанта по SAP ММ в различных компаниях, с 1997 года, занимался внедрением модулей FI-FM (контроль исполнения бюджета), Управления материальными потоками (ММ), Управление складом СУС (WMS), был консультантом по интеграции MM<->ТОРО, занимался разработками расширений системы на языке ABAP. Связаться со мной можно по адресу uukrul@hotmail.com

 

В статье изложены принципы работы нового, начиная с версии 6.0, механизма расширения системы, с использованием точки расширения Enhancement. Также приведен пример создания расширения и несколько примеров практического использования расширений.

Начиная с версии ECC 6.0 появился замечательный механизм расширения (Enhancement), однако, это и самый простой способ «поломать систему об колено так как никакого контроля за тем, что и как вы реализуете в точке расширения, система не осуществляет.

Автор предупреждает: то, что вы попробуете сделать в своей системе по данному описанию может стать вашей «головной болью». В таком случае, не пытайтесь «валить с больной головы на здоровую (то есть мою)»

Немного теории, сформулированной после прочтения статьи «Новая концепция расширений как метод совершенствования программ SAP без их модификации», автор Майкл Акер (Michael Acker), SAP Professional Journal 2008 год. Остановлюсь только на ключевых моментах. Тем, кого заинтересуют подробности, рекомендую прочтение оригинала статьи или посещения сайта http://help.sap.com.

Enhancement Spot, фигурально говоря, - новый механизм экзитов в системе, фактически, система предоставляет новую возможность расширения стандартной функциональности без получения ключей модификации на объекты системы. Так же гарантируется, что ни при каких обновлениях системы, сделанные вами расширения, не будут затерты, хотя при этом и не гарантируется, что они останутся работоспособными. На данный момент концепция расширений поддерживает следующие расширения объектов системы:

 

  • Расширение классов — возможно добавление новых не обязательных параметров в методы, добавление методов pre и post к существующему методу, которые вызываются перед вызовом самого метода, ну и доступно общее переопределение метода используя инструкцию overwrite.
  • Расширение функций — возможность добавления новых не обязательных параметров к функции. При этом, конечно же, нужно будет использовать следующую функциональность «расширение кода», так как добавленные вами параметры нужно же кому-то и как-то обрабатывать.
  • Расширение исходного кода — как возможность вставки своей логики в определенные позиции исходного кода, так и замещение части кода своей логикой работы. Собственно говоря, этот механизм кажется мне наиболее часто используемым на практике, поэтому примеры будут построены для демонстрации работы именно этого расширения.
  • Расширение web-экранов — позволяет добавлять новые элементы на экраны пользовательского интерфейса. С этим расширением я пока не сталкивался, но если кому-то это интересно и нужно, то идем на www.help.sap.com, так как имеются в виду web-экраны базирующиеся на парадигме контроллера ракурсов модели (Model View Controller, MVC).
  • Новые BADI — технология BADI внедрений была реализована, начиная с версии 4.6, однако, с появлением технологии расширений, принцип технической реализации BADI стал другой, т. е. с виду использование осталось фактически таким же, но разработчики SAP говорят, что новые BADI стали работать быстрее. В общем случае, если вы не разработчик приложения, в котором собираетесь использовать свои BADI, а только пользователь уже предоставленных механизмов BADI, то для вас изменения в технике реализации BADI не очень важны. Пример использования BADI будет приведен в отдельной статье.

 

Сами точки расширений бывают двух типов:

 

  • Implicit Enhancement Options (Неявная точка расширения): Это - точки вызова расширений в начале и конце блока кода: например, для существующей подпрограммы FORM xxx Implicit Enhancement это - расширение в начале подпрограммы и в конце подпрограммы.Такой тип расширения позволяет добавить дополнительный код к существующим стандартным модулям SAP. Для просмотра неявных точек входа следует в редакторе кода, например с помощью транзакции SE38, задать режим показа не явных точек. Точки будут показаны как на Рис.1. Как видим точки расширения выделены символом тильда (~). В общем случае, так как это модуль, состоящий из одной подпрограммы, доступны три неявные точки расширения. Первая точка вызывается сразу при входе в подпрограмму ERMITTLUNG_PERIODE, вторая при выходе из подпрограммы ERMITTLUNG_PERIODE, а третья позволяет добавить в целом свой код в модуль LMRMPF0S, например, при выходе из расширяемой подпрограммы вы можете сделать вызов своей подпрограммы, текст которой разместите после текста: endform.
  • Explicit Enhancement Options (Явная точка расширения): Это точки вызова, которые могут быть в любом месте кода, при этом такая точка может быть как расширением стандартного кода, так и заменой его, т.е. ваше расширение полностью заменит какой-то кусок кода системы, так же такие расширения используются для реализации фукнций Business Add-Ins. При этом явная точка расширения должна быть предусмотрена разработчиком приложения, который пишет код. Такая точка будет определена специальными операторами: ENHANCEMENT-POINT – точка вставки вашего кода для расширения логики и ENHANCEMENT-SECTION / END-ENHANCEMENT-SECTION – блок кода (операторные скобки), который может быть вами заменен. Пример показан ниже на Рис.2.

 

 
Рис. 1 IEO-1
 
Рис. 2 EEO-1

На этом, с теорией, думаю, можно остановится и перейти к примерам реализации. Будут приведены примеры, «близкие к жизни».

Пример 1. Возврат результата выполнения стандартного отчета в свою программу.

В функциональности ММ, для получения данных по запасам на произвольную дату в прошлых периодах, есть специальный отчет MB5B. Одному из разработчиков потребовалось получить список документов формирующих остатки, так же как это получает отчет MB5B. Как вариант, можно и самому по таблицам получить такие данные, посмотрев на логику работы отчета, но существует возможность готовым решение. Для этого нам нужно в своей программе, вызвать отчет, выполняющийся при вызове транзакции MB5B, например через SUBMIT с параметрами, а затем, после вызова получить данные выбранные отчетом в свою программу. Например, я запустил транзакцию MB5B, с таким вот простым вариантом, Рис.3.

 
Рис. 3 MB5B

Скорее всего, программа состоит из блока выбора данных, который в конечном итоге заполняет какую-то внутреннюю таблицу и затем блока, который выводит эту таблицу на экран. Путем работы с отладчиком и кодом отчета, довольно быстро можно найти нужное место, это инклуд RM07MLBD_FORM_02 подпрограмма: «Form LISTAUSGABE1»; теперь если поставить точку останова, то видно, что в данной подпрограмме доступна внутренняя таблица g_t_belege1, которая содержит необходимые данные, Рис.4.

 
Рис. 4 MB5B-A

Итак, нам надо получить данные этой таблицы в свою программу. Воспользуемся технологией IMPORT/EXPORT и новым предложением от SAP, называемым технология расширений. Идем в транзакцию SE38 и вызываем для просмотра этот инклуд. Затем выбираем по меню: "Обработка" – "Операции расширения" – "Показать предполагаемые опции расширения", Рис.5, после чего фактически в каждой подпрограмме будут выделены точки входа, а значит можно туда «вписать» свой код.

 
Рис. 5 RM07MLBD_FORM_02

Точки будут подсвечены следующим образом, как на Рис.6.

 
Рис. 6 RM07MLBD_FORM_02-ES1

Далее ставим курсор на выбранную точку расширения и выбираем по меню "Программа" – "Расширить" или как на рисунке жмем соответствующую кнопку на панели инструментов (выделено красным). Теперь снова попросим показать точки расширения и должно получиться что-то из Рис.7, т.е. у нас появилась возможность модификации кода программы.

 
Рис. 7 RM07MLBD_FORM_02-ES2

Затем становимся на нужную нам точку в начале подпрограммы LISTAUSGABE1 (почему в начале расскажу ниже), и правой кнопкой мыши по контекстному меню выбираем "Enhancement Implemantation" – "Создать расширение", как на Рис.8.

 

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти

Обсуждения Количество комментариев5

Комментарий от  

Andrey Bobkov

  |  29 июня 2013, 08:19

Много грамматических ошибок, неприятно читать.

Комментарий от  

Олег Точенюк

  |  30 июня 2013, 14:55

Много грамматических ошибок, неприятно читать.

Да кто ж вас заставлял то читать, не нужно было так мучиться. Классику читайте что ли. Кстати, если уж быть совсем по делу, то указали бы на множество грамматических ошибок, а то корректоры сайта наверное тоже ушли рыдать горькими слезами.

Комментарий от  

Мурат Бидов

  |  18 октября 2013, 10:44

Да кто ж вас заставлял то читать, не нужно было так мучиться. Классику читайте что ли. Кстати, если уж быть совсем по делу, то указали бы на множество грамматических ошибок, а то корректоры сайта наверное тоже ушли рыдать горькими слезами.

Спасибо за статью. Полезно и интересно было почитать.

Комментарий от  

Олег Точенюк

  |  04 ноября 2013, 15:32

На небольшом эксурсе по поводу ENHANCEMENT, был задан вопрос чем отличаются декларации статических энхансментов от динамических энхансментов, ну т.е. если в коде вы встречаете следующие объявления:
 
Динамический: enhancement-point lmr1mfa0_01 spots es_saplmr1m.
 
или:
 
Статический: enhancement-point lmr1mfa0_01 spots es_saplmr1m static.
 
Само собой данные объявления применяются только при явных энхансментах - Explicit Enhancement Options.
 
Разница между этими объявлениями заключается в следующем.
 
Примечание: Я говорил, что техника Enhancement создана в первую очередь для возможности реализации бизнес-функций, а не для нас, простых пользователей системы.
 
Так вот бизнес-функция может находиться в состоянии "активно" или "в ожидании" (деактивирована), просмотреть статусы бизнес функций можно в транзакции SFW5. Бизнес-функции представляют собой собственно говоря набор Enhancement-тов, т.е. точек расширений, который могут быть декларированы в коде существующих транзакций системы как статические или динамические. Так вот если Enhancement объявлен как статический, но сама бизнес-функция не активирована, вы можете создать реализацию такого энхансмента и система будет обрабатывать написанный вами код. Если же энхансмент объявлен как динамический и бизнес-фукнция не активирована, то выполнять реализацию кода в таком энхансменте бесполезно, так как вызваться ваш код не будет, пока вы не активируете соответствующую бизнес-функцию в которую включен данный энхансмент.
 
PS: Это важный момент, если вы используете технику явных энхнасментов.

Комментарий от  

Анна Новикова

  |  31 марта 2023, 06:52

Рисунки не отображаются