Enhancement Spot (Практический пример создания)

Автор Uukrul, Березень 14, 2009, 04:32:53 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Uukrul

В общем похоже в свой программе надо предусмотреть сначала создание точек расширений, а потом уже из использовать.. ну мне пока так показалось (ну это что касается точек Explicit).


Uukrul

#27
Цитата: A. від Липень 30, 2010, 04:30:07 ПП
Похоже, это как-то связано с пакетами.
https://weblogs.sdn.sap.com/pub/wlg/3056
https://weblogs.sdn.sap.com/pub/wlg/3336
https://weblogs.sdn.sap.com/pub/wlg/3430
https://weblogs.sdn.sap.com/pub/wlg/3506
https://weblogs.sdn.sap.com/pub/wlg/3595
Да нет, я тут поковырял короче в свой программе создать вот именно эти Explicit точки не вопрос, в режиме редактирования стоим на строке кода и правой кнопкой мыши по меню: Расширения - Создать опцию и получаем что-то типа

ENHANCEMENT-SECTION Y_MY_AREA SPOTS Y_MY_SPOT_EX .
 IF dynbegin = 'X'.
 ENDIF.
END-ENHANCEMENT-SECTION.


Ну и еще по справке вот такая вот строка... т.е. это таки должно быть явное разрешение для вставки модификации, объявленное операторами ENHANCEMENT and ENDENHANCEMENT, т..е. если в программе нет явного разрешения на расширение кода в этом месте, то как бы и точки расширения нет, собственно говоря поэтому оно и называется "явная точка расширения", в отличии от не явной которая типа всегда есть в начале и конце подпрограммы или функционального модуля.
Цитата
You can assign source code plug-ins, defined between ENHANCEMENT and ENDENHANCEMENT in an ABAP program, to an enhancement option defined using ENHANCEMENT-POINT. These source code plug-ins are inserted into the code unchanged if the switch is in the relevant position.
Так что как бы разница между Explicit и Implicit ну если уж совсем на пальцах, то Implicit - есть всегда и не требует каких либо шагов для ее объявления, а вот Explicit точка должна быть явно определена в коде в требуемом месте, т.е. из моего примера

PERFORM call_1 CHANGING my_structure.
--- вставил точку расширения изменяющую my_structure ---
PERFROM call_2 USING my_structure.
PERFROM call_3.

чтобы вставить точку расширения между call_1 и call_2, в тексте должно было бы быть что-то типа так написано:

PERFORM call_1 CHANGING my_structure.
*  Явная точка расширения
   ENHANCEMENT-POINT XXX_ME_EX SPOTS XXX_MY_SPOT_EX .
PERFROM call_2 USING my_structure.
PERFROM call_3.

только тогда можно было бы вставлять свой код в промежутке вызова.

A.

#28
Похоже, что так оно и есть - если разработчик не предусмотрел, то и не будет. Спасибо за разъяснения.

P.S.
А было бы неплохо :) Смотришь на код - ну не нравится тебе конструкция вида
IF 1 = 0. MESSAGE E000(AA). ENDIF.
и ты её бах! в enhancement-section заключил и переписал потом в enhancement-point как надо.

:)

Skif

жаль что не даёт сделать IF в начальном enh, потом старое тело, endif в конечном enh, новое тело ;((

A.

После переноса в целевую систему приходится активировать объекты, в которые произведено внедрение. Иначе не отрабатывает. Даже в закрытом от изменений продуктиве это приходится проделывать.

Uukrul

Цитата: A. від Серпень 24, 2010, 09:56:14 ДП
После переноса в целевую систему приходится активировать объекты, в которые произведено внедрение.
Как-то странно это.. потому что эта технология используется в BADI и транспорты без проблем носят такие объекты, я переносил как сами BADI так и Enhancement Spot-ы и дополнительной активации делать в продуктиве не требовалось. Такая проблема у вас на одной системе или вы пробовали это делать на разных системах?

A.

Трехсистемный ландшафт. После переноса и в тест, и в продуктив надо активировать. При этом в разработке все активно. Активировать - нажимать на кнопку со спичкой.

Uukrul

Цитата: A. від Серпень 24, 2010, 11:14:10 ДП
Трехсистемный ландшафт. После переноса и в тест, и в продуктив надо активировать.
Ладно подождем еще кого-то, потому как по мне это не совсем нормальное поведение при транспорте расширений или у меня сейчас временная потеря памяти  ???

№1

Цитата: Uukrul  link=topic=546.msg7554#msg7554 date=1282643187
Ладно подождем еще кого-то, потому как по мне это не совсем нормальное поведение при транспорте расширений или у меня сейчас временная потеря памяти  ???
Я как участник процесса переноса ни разу с таким "капризом" системы не сталкивался
Мой блог

Uukrul

В первую тему сообщения добавлен файл Enhancement Spot 2.pdf, с более расширенным описанием работы с точками расширений на основании последних замечаний и примеров.

insaf121

Я тоже не сталкивался с тем что после переноса нужно активировать расширения. А никто не знает способ полегче для того чтобы посмотреть все эти енкхасменты для какой-нибудь задачи?
Я сейчас работаю абапером и консалдинг который внедрял сап в нашу контору очень увлекался этим способом :( И под частую сразу не поймешь есть что то на стандарте или нет.

Uukrul

Цитата: insaf121 від Липень 22, 2011, 10:00:30 ДП
Я тоже не сталкивался с тем что после переноса нужно активировать расширения. А никто не знает способ полегче для того чтобы посмотреть все эти енкхасменты для какой-нибудь задачи?
К сожалению нет... хотя как вариант если все разработки выполнялись одним пакетом, то просмотрев пакет, можно получить все активированные в нем расширения.

A.

#38
BAdI ORDER_COSTING_CK помечено только для использования в SAP. Есть ли пути все-таки задействовать её для себя? Ну кроме как подломать.

Uukrul

#39
Цитата: A. від Серпень 24, 2010, 09:56:14 ДП
После переноса в целевую систему приходится активировать объекты, в которые произведено внедрение. Иначе не отрабатывает. Даже в закрытом от изменений продуктиве это приходится проделывать.
Вот тут тоже возникла ситуация когда после переноса объекты активны, но код не отрабатывает. Пришлось заходить в код, где были внедрения и выполнять активацию. Система: EHP4 FOR SAP ERP 6.0 / NW7.01


Цитата: A. від Листопад 01, 2011, 03:29:35 ПП
BAdI ORDER_COSTING_CK помечено только для использования в SAP. Есть ли пути все-таки задействовать её для себя? Ну кроме как подломать.
Нет... надо искать другое расширение. Ну и ломать, не советую, как говорили в одном фильме - хлопотно это. Я тут с одной такой системой сейчас общаюсь, там тоже, в свое время, решили, что классный абапер, это проще чем найти хорошего консультанта.

Uukrul

Важное дополнение:

На небольшом эксурсе по поводу ENHANCEMENT, был задан вопрос чем отличаются декларации статических энхансментов от динамических энхансментов, ну т.е. если в коде вы встречаете следующие объявления:

Динамический: enhancement-point lmr1mfa0_01 spots es_saplmr1m.

или:

Статический: enhancement-point lmr1mfa0_01 spots es_saplmr1m static.

Само собой данные объявления применяются только при явных энхансментах - Explicit Enhancement Options.

Разница между этими объявлениями заключается в следующем.

Примечание: Я говорил, что техника Enhancement создана в первую очередь для возможности реализации бизнес-функций, а не для нас, простых пользователей системы.

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

PS: Это важный момент, если вы используете технику явных энхнасментов.

Uukrul

Заметил занятную вещь, когда вроде как и есть неявная точка расширения, но по факту использовать ее в принципе нельзя. И так как мы знаем, неявные точки расширения находятся на входе и выходе подпрограмм и функциональных модулей, а так же в конце записей структур. Есть такая себе структура:

types : begin of stype_totals_header,
          BWKEY              LIKE      MBEW-BWKEY,
          WERKS              LIKE      MSEG-WERKS,
          matnr              like      mbew-matnr,
          CHARG              LIKE      MSEG-CHARG,
          sobkz              like      mslb-sobkz,

          NAME1              like      T001W-NAME1,
          maktx              like      makt-maktx,
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(86) Typ STYPE_TOTALS_HEADER, Выход                                                                                                                           end of stype_totals_header.

В ней как видим есть неявная точка расширения. Пробуем добавить свой код:
Цитата
types : begin of stype_totals_header,
          BWKEY              LIKE      MBEW-BWKEY,
          WERKS              LIKE      MSEG-WERKS,
          matnr              like      mbew-matnr,
          CHARG              LIKE      MSEG-CHARG,
          sobkz              like      mslb-sobkz,

          NAME1              like      T001W-NAME1,
          maktx              like      makt-maktx,
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(86) Typ STYPE_TOTALS_HEADER, Выход                                                                                                                   S
*$*$-Start: 9999--------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  ZIMM_MB5B_REPORTS_01.    "inactive version
*
ENDENHANCEMENT.
*$*$-End:   9999--------------------------------------------------------------------------------$*$*
        end of stype_totals_header.
Получаем ошибки синтаксиса для выделенных красным строк. Что в принципе понятно, та как инструкция расширения после имени содержит точку, которая там не должна быть. В общем вот такая засада. Если бы структура была объявлена типа так:
Цитата]
types : begin of stype_totals_header,
          BWKEY              LIKE      MBEW-BWKEY,
          WERKS              LIKE      MSEG-WERKS,
          matnr              like      mbew-matnr,
          CHARG              LIKE      MSEG-CHARG,
          sobkz              like      mslb-sobkz,

          NAME1              like      T001W-NAME1,
          maktx              like      makt-maktx.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(86) Typ STYPE_TOTALS_HEADER, Выход                                                                                                                           types: end of stype_totals_header.
То проблем бы небыло ни у кого. Так что абаперы объявляете свои структуры правильно. , с ними не только вам работать возможно придется.