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

«Ра­сши­ре­ния системы (Enhancement Framework). Часть 1»
Юрий Слободчиков:
> так как последняя переменная в структуре содержит объявление, заканчивающееся запятой, а объявление расширения вклинивается в эту структуру, то мы получаем проблему, которую в принципе решить...
«Техники ра­сши­ре­ний ста­нда­ртной системы SAP. Обзор ситуации. По­льзо­ва­те­льские ра­сши­ре­ния»
Олег Точенюк:
Все в этом мире относительно и должно использоваться к месту. Я эту технику использовал всего один раз, так как других вариантов там особо нормальных небыло. Мне помогло, может еще кому поможет,...
«Техники ра­сши­ре­ний ста­нда­ртной системы SAP. Обзор ситуации. По­льзо­ва­те­льские ра­сши­ре­ния»
Олег Точенюк:
>>95% потребностей заказчика можно покрыть Это можно закрыть без ABAP стандартной функциональностью :-) что и будет с моей точки зрения правильным.   >>1) пользовательские...

Управление проектами расширений в системах. Техника CustomerExits пользовательские расширения

2053
4

Уважаемые коллеги!

Я продолжаю публикацию на портале SAPLand цикла статей «Техники расширений стандартной системы SAP».

Все статьи цикла приведены внизу публикации.

1. Поиск расширений

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

1.1. Вариант поиска 1

Использование транзакции просмотра существующих расширений: транзакция SMOD. Эта транзакция позволяет просмотреть содержимое компонента расширения, при этом она обеспечивает поиск самих расширений в привязке к функциональности.  Для поиска следует воспользоваться поиском компонентов для поля «Расширения», Рис.1.

Рис.1: SMOD-1

Если вы запускаете транзакцию впервые, то нажав кнопку поиска допустимых значений, вы получите поиск компонентов по информационной системе репозитория, Рис.2, это не очень удобно, если вы даже приблизительно не знаете, как называется компонент, однако сразу переключить поиск на вариант «Приложения SAP» не получится.

Рис.2: SMOD-2

Чтобы достичь цели, сначала выполните поиска по системе репозитория, нажав кнопку F4, (рисунок 2), и в открывшемся окне найденных значений выберите любой  компонент. Например, у меня в системе это, какой-то: /CEECV/RRO Material document item for goods receipt/issue slip. Затем зайдите в просмотр компонента, нажав кнопку , после этого вернитесь на первый экран и снова выберите F4 в поле «Расширение». Теперь система покажет вам окно личного списка значений, из которого вы уже можете выполнить поиск по приложениям SAP, Рис.3.

Рис.3: SMOD-3

Фактически будет выведено дерево компонентов системы, некий аналог транзакции SPRO, в этом дереве можно выполнить поиск необходимых расширений в привязке к функциональности системы, Рис.4. например, компонент, отвечающий за реализацию пользовательских данных в заявках на закупку, из функциональности управления материальными потоками.

Рис.4: SMOD-4

1.2. Вариант поиска 2

Разработчик может воспользоваться одной из Z-разработок, в интернете достаточно тех, которые позволяют найти компоненты расширений в привязке к транзакциям системы. Одним из недостатков варианта является то, что при поиске будут найдены только расширения первого уровня, т.е. если при создании объекта А, он порождает зависимые объекты B и C, то такие программы обычно ищут только расширения, доступные при создании объекта А.

1.3. Вариант поиска 3

Разработчик может использовать инструменты отладки программы. Для этого запускаем интересующую нас транзакцию, после чего переходим в режим отладки системы. Далее устанавливаем точку прерывания по условию, Рис.5.

Рис.5: SMOD-5

В открывшемся окне нужно задать обработку точек прерывания при выполнении оператора CALL CUSTOMER-FUNCTION, Рис.6.

Рис.6: SMOD-6

Теперь продолжим выполнение транзакции. Система будет останавливаться каждый раз, когда в тексте будет встречать вызов пользовательского расширения, причем это не зависит от того, активно оно или нет, Рис.7. Основная проблема при таком методе получения точки пользовательского расширения заключается в том, что вы получаете имя исходного текста, где находится точка, в данном случае это модуль: LBBPKU03, строка кода 79, однако не получаете имя компонента расширения которое нужно указать в транзакции ведения.

Рис.7: SMOD-7

Для получения имени компонента следует перейти в просмотр найденного кода, транзакция SE38, в которой нужно сделать двойной клик мышью на строке вызова пользовательского расширения, для перехода к реализации данной функции, Рис.8.

Рис.8: SMOD-8

Мы переходим в функциональный модуль, который вызывается, в данном контексте; для кода точки расширения 001, будет вызван функциональный модуль EXIT_SAPLBBPK_001, Рис.9.

Рис.9: SMOD-9

Теперь, когда мы знаем реальное имя функционального модуля, достаточно просто найти имя компонента, который нужно активировать чтобы данное расширение вызвалось системой. Для этого переходим в транзакцию просмотра содержимого таблиц (транзакция SE16), затем указываем имя таблицы MODSAP и далее в поле MEMBER, вводим имя нашего функционального модуля, Рис.10

Рис.10: SMOD-10

Далее выполняем вывод значений и получаем имя компонента, который включает в себя найденное нами расширение, Рис.11.

Рис.11: SMOD-11

2. Реализация расширения. Демонстрационный пример

Получив вышеописанным путём имя расширения, можно приступать к его реализации. Для активации расширений существует отдельная транзакция CMOD, которая служит для создания проектов расширений. Фактически, проект расширения - это объект, который включает в себя набор компонентов расширений, которые мы просматривали в транзакции SMOD или искали в стандартных программах системы. Обычно, в один проект, можно включить различные коды расширений объединённых решением общей задачи.

Внимание: Одно расширение, можно включить только в один проект, поэтому если у вас расширение уже используется, то нужно найти проект, в котором оно находится, далее убедиться, что проект активирован и это значит, что вам остается только добавить свой код реализации расширения. Удалять из чужого, и переносить расширения  в свой проект, наверное, не стоит.

2.1. Создание проекта

В качестве практического примера воспользуемся расширением, которое позволяет генерировать инвентарный номер для объектов основных средств. Разработчики SAP определили расширение, которое позволяет пользователю реализовать собственный алгоритм генерации инвентарного номера карточки. Для этого в системе существует расширение AISA0001Присвоение инвентарного номера, Рис.12

Рис.12: CMOD-1

Запускаем транзакцию CMOD, в появившемся окне вводим новое имя расширения на Z или Y, например, создаем расширение ZFIAA001. После ввода имени нажимаем кнопку "Создать", Рис.13.

Примечание: В принципе, имя проекта расширения может начинаться на любую букву, тут нет жесткого ограничения по области наименования пользовательских объектов, так как проекты расширений - это всегда только пользовательские объекты. Однако, лично мне привычнее, называть расширения, ориентируясь на стандартное соглашение по именам объектов SAP.

Рис.13: CMOD-2

Система перейдет к экрану ведения атрибутов расширения, Рис.14. На экране ведения атрибутов проекта расширения, требуется только ввести краткий текст, который описывает назначение создаваемого проекта. Затем нажимаем кнопку "Сохранить" вверху окна. Система запросит имя проекта и запрос, в который необходимо сохранять данные.

Рис.14: CMOD-3

После сохранения проекта необходимо перейти к экрану привязки компонентов расширений, на панели кнопок нажимаем кнопку .  Включаем в список нужный нам компонент AISA0001. Если компонент ещё не привязан ни к какому проекту расширения, то система выведет рядом с расширением краткий текст описания, Рис.15. В противном случае, будет выведено сообщение об ошибке, в котором будет указано имя проекта расширения в который уже включен компонент AISA0001.

Рис.15: CMOD-4

Сохраняем данные привязанных к проекту компонентов и переходим к экрану просмотра привязанных компонентов, для чего нажимаем кнопку , Рис.16. Так как проект не активирован, то светофоры, напротив расширений, будут красными. Это значит, что расширение не активно и даже если оно содержит код, система пропускает такие расширения. Это позволяет отключать расширения простой деактивацией проекта в ситуации, например, когда окажется, что текст пользовательского расширения содержит ошибку, которая генерирует ошибку времени выполнения, но требуется срочно провести документ.

Рис.16: CMOD-5

Если сейчас выполнить активацию расширения, то создаваемый код будет выполнятся, при этом если код будет в этот момент некорректным (например, вы его в данный момент активно изменяете), то другие пользователи, создающие карточки ОС, будут получать ошибку времени выполнения стандартной транзакции (системный дамп). Поэтому, когда вы пишете новый код или правите его, деактивируйте расширение, чтобы не мешать

Ограниченный доступ

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

Функциональная область: Информационные технологии / IT, Basis, ABAP
Ролевое назначение: SAP Консультант / Consultant
Комментарии:

Олег Точенюк (Рейтинг: 10202) 14:02, 19 марта 2016

Рис.9: SMOD-9 - Как-то не то что-то прицепили, на самом деле там должно быть такое:

Владимир Дейнеко (Рейтинг: 32) 11:25, 07 апреля 2016

Для того чтобы найти компонент совершенно не обязательно идти и смотреть данные в таблице MODSAP. Достаточно воспользоваться средством поиска, указанном на Рис.1. Нужно поставить галочку "ФМ пользователя" и в качестве Имени компонента указать сам функциональный модуль.
11:27, 07 апреля 2016

Владимир Дейнеко (Рейтинг: 32)

17:08, 08 апреля 2016

Олег Точенюк (Рейтинг: 10202)

Ну вот буду тоже знать.

Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП»