Из темы You are not allowed to view links.
Register or
Login был поднят вопрос как можно вклиниться в стандартные программы SAP, ну методов много, а с версии ECC 6.0 появился просто с одной стороны, замечательный механизм точек расширения, а с другой,
если руки кривые, то это самый простой способ поломать систему, причем если руки "очень кривые", то этим способом ее можно разнести в дребезги и пополам. А теперь поехали и как еще говорят, все что вы попробуете сделать в своей системе по данному описанию, останется на вашей совести, без каких либо претензий ко мне Enhancement Spot, если на пальцах то это новый механизм экзитов в системе, фактически система предоставляет две точки входа, после входа в любую стандартную подпрограмму и перед выходом из этой подпрограммы. Пример расширения берем из предложенной темы. Суть в том, что хочется вызвать программу транзакции MB5B например через SUBMIT и после вызова получить данные программы себе в отчет. В своем случае, я запустил MB5B как в примере с таким вот простым вариантом, рисунок MB5B.png. Суть в том, чтобы под отладчиком найти точку/подпрограмму, где идет вызов ALV-таблицы которая показывает результат выборки. Почему именно эта подпрограмма, ну так скорее всего раз программа дошла до этого места, то все данные уже корректно выбраны и подготовлены для показа. В данном случае это инклуд RM07MLBD_FORM_02 подпрограмма LISTAUSGABE1, если там поставить точку останова, то видно что приехали по месту вроде как правильно.
Теперь идем в SE38, в этот инклудик и там выбираем по меню "Обработка" - "Операции расширения" - "Показать предполагаемые опции расширения", рисунок RM07MLBD_FORM_02.png, после чего фактически в каждой подпрограмме будут выделены точки входа, а значит можно что-то туда дописать своего. Выбираем по меню "Программа" - "Расширить" или на рисунке жмем соответствующую кнопку на панели инструментов, после чего снова нужно попросить показать точки расширения и должно получиться что-то из рисунка RM07MLBD_FORM_02-ES2.PNG... затем становимся на нужную там точку в начале программы (почему в начале расскажу ниже), и правой кнопкой мыши по контекстному меню "Enhancement Implemantation" - "Создать расширение", как на рисунке RM07MLBD_FORM_02-ES3.PNG ниже. Затем в появившемся окне выбора расширения жмете кнопку "Описание" и в появившемся окне ES1.png, жмем кнопку создать свое расширение (в чужие клиниться не есть хороший метод) рисунок ES2.png, обратите внимание, что так как это расширение у нас первое, то мы создаем так же и группу точек расширений YMY_MB5B - собственное имя и жмет еще раз рядом кнопку создать, потом вводим описание и система спросит пакет и запрос, после чего возвращаемся в экран точек расширений, жмем там ОК, и попадаем в основное окно, в котором уже появилась запись для наших точек ES3.png, выбираем нашу созданную запись и точка создана, в коде появилась запись куда мы можем вносить свой код, рисунок ES4.png
Что можно написать в этом месте. Ну мы знаем что результат выбора находится в таблице
G_T_BELEGE1, которая выводится в ALV-таблице, значит нам нужно написать код который передаст эту таблицу в память, которая останется доступной после отработки отчета, так же тут наверное будет правильным сделать выхода из подпрограммы, так как дергать ALV смысла нет, но чтобы не нарушить отчет выход должен быть по какому-то из параметров, я предлагаю сделать имя варианта например с именем /MYBATH, на экране это будет поле выбора "Вариант просмотра", переменная P_VARI и фокус в том, что так как наше расширение работает в контексте работы программы то мы имеем нормальный доступ ко всем глобальным переменным программы, поэтому в своей точке можем написать что-то типа такого кода:
*$*$-Start: (36 )-------------------------------------------------------------------------------$*$*
ENHANCEMENT 17 YMY_MB5B_EXT. "active version
* Передача параметров для внешних вызовов
IF p_vari = '/MYBATH'.
break-point.
EXPORT G_T_BELEGE1 TO MEMORY ID 'MYBATH'.
EXIT.
ENDIF.
ENDENHANCEMENT.
Т.е. передали в память данные таблицы, затем вышли из подпрограммы без вызова ALV-таблицы. Отчет завершиться, а в своей программе делаем IMPORT FROM MEMORY и получаем результат. Собственно поэтому мы сделали точку расширения в начале отчета, чтобы перехватить вызов отрисовки результата, так как в данном случае это будет лишним. Само собой код нужно активировать, после чего рядом с именем расширения будет добавлена фраза -
active version.
В общем где-то так... и работает все!
07.07.2010 PS: Добавлен файл Enhancement Spot.pdf, в котором собрана вся ветка без флуда...25.09.2010 PS: Удален файл Enhancement Spot.pdf25.09.2010 PS: Добавлен файл Enhancement Spot 2.pdf, с более расширенным описанием работы с точками расширений на основании последних замечаний и примеров