SAPфорум.RU
https://sapboard.ru/forum/

ENHANCEMENT
https://sapboard.ru/forum/viewtopic.php?f=13&t=92671
Страница 1 из 1

Автор:  hugo788 [ Пн, мар 21 2016, 07:18 ]
Заголовок сообщения:  ENHANCEMENT

Здравствуйте!

Никогда не внедрялся в расширения. Подскажите пож-та как можно реализовать такую задачу.
Есть две точки входа в саповскую форму, где могу вписать код(в самое начало и в самый конец). Задача - использовать те же переменные что в этой форме, но свою логику.
Пишу perform в первой точке, form во второй - нельзя, макрос нельзя. Писать ванчале всю логику(потом exit допустим) - не могу использовать переменные, т.к. они ниже.
Какие еще могут быть варианты?


Code:
FORM extended_objects_check     USING ps_request    TYPE trwbo_request
                                      pv_dialog     TYPE trboolean
                                      iv_without_objects_check
                                                    TYPE trboolean
                                      IV_CALLED_BY_ADT TYPE  TRBOOLEAN.
"здесь дают вставить свой код
"здесь дают вставить свой код

"стандарт
CONSTANTS: lc_attribute_sapcorr LIKE e070a-attribute VALUE 'SAPCORR'.

  DATA:
        lv_error_type           TYPE trwbo_charflag,
        lv_answer               TYPE c
...... прочее описание переменных
...... логика

"стандарт

"-здесь дают вставить свой код
"-здесь дают вставить свой код

ENDFORM.


Автор:  Удав [ Пн, мар 21 2016, 08:24 ]
Заголовок сообщения:  Re: ENHANCEMENT

Если логика своя, то зачем чужие переменные? :?

Автор:  hugo788 [ Пн, мар 21 2016, 08:38 ]
Заголовок сообщения:  Re: ENHANCEMENT

Логика частично своя, большую часть кода нужно будет использовать того что в стандарте.
Создавая дублирующие переменные, почему то результат оказался не тот... Там еще переходы в стандарты...
Можно конечно разобраться, но интересует все таки вопрос, как можно перейти из одного ENHANCEMENT в другой в даном случае.

Автор:  Kengur [ Пн, мар 21 2016, 09:40 ]
Заголовок сообщения:  Re: ENHANCEMENT  Тема решена

Вначале энх чтобы подменить входные параметры. В конце чтобы подменить результат. Никаких "переходов" тут нет. Код выполняется обычным образом. Выкидываете результат стандарта в помойку и вычисляете свой заново.

Автор:  hugo788 [ Вт, мар 22 2016, 12:31 ]
Заголовок сообщения:  Re: ENHANCEMENT

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

Автор:  Kengur [ Вт, мар 22 2016, 13:00 ]
Заголовок сообщения:  Re: ENHANCEMENT

Ну наверно можно если сделать вначале вставку и потом return.

Автор:  LKU [ Вт, мар 22 2016, 13:35 ]
Заголовок сообщения:  Re: ENHANCEMENT

Вариант 1. В первом энхансменте (в начале кода) пишете ваш код и в конце exit.
Вариант 2. В первом энхансменте пишите if 1 = 2. Во втором (в конце кода) пишите else.

Таким образом, можно выключить стандартный код и написать вместо него что-то свое.

Если стандартного кода много, а нужно поменять несколько строчек, то такой подход ВРЕДНЫЙ.

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

Автор:  hugo788 [ Вт, мар 22 2016, 13:55 ]
Заголовок сообщения:  Re: ENHANCEMENT

LKU написал:
Вариант 2. В первом энхансменте пишите if 1 = 2. Во втором (в конце кода) пишите else.


Хм...попробовал такой вариант -
"В кодировке для нестатического расширения, а также в нестатическом
ENHANCEMENT-SECTION необходимо завершить конструкторы контроля (IF,
CASE и т.д.)."

Автор:  LKU [ Вт, мар 22 2016, 14:05 ]
Заголовок сообщения:  Re: ENHANCEMENT

Точно видел такую реализацию.
Или версия не та, или надо одновременно активировать код первого и второго энхансмента.

Автор:  Nick_Papkov [ Ср, мар 23 2016, 01:08 ]
Заголовок сообщения:  Re: ENHANCEMENT

hugo788 написал(а):
Понятно, т.е. если я хочу чтобы выполнился в начале ENHANCEMENT, потом в конце ENHANCEMENT, то без прогона стандартного кода в середине я все равно не обойдусь.

А если попробовать такой вариант. Создаем класс с тремя статическими методами. Один отвечает за установление/сброс индикатора, второй выполняет проверку состояния данного индикатора, третий вызывает нужную вам форму с передачей ей необходимых параметров (их берем из входных данных метода, а сам вызов формы делаем через PERFORM <имя формы> IN PROGRAM <имя программы>). А дальше реализуем оба enhancements в таком варианте. В первом (тот, что в начале формы) проверяем индикатор. Если установлен, то переходим к выполнению стандартного кода, если нет, то устанавливаем индикатор через соответствующий метод нашего класса и вызываем второй метод для повторного вызова формы, после чего сбрасываем индикатор и выходим из формы. Во втором (тот, что в конце формы) проверяем индикатор. Если установлен, то пишем свою логику и корректируем выходные параметры формы, если нет, то выходим из формы.

Автор:  qwerty [ Чт, фев 15 2018, 00:42 ]
Заголовок сообщения:  Re: ENHANCEMENT

hugo788 написал(а):
LKU написал:
Вариант 2. В первом энхансменте пишите if 1 = 2. Во втором (в конце кода) пишите else.


Хм...попробовал такой вариант -
"В кодировке для нестатического расширения, а также в нестатическом
ENHANCEMENT-SECTION необходимо завершить конструкторы контроля (IF,
CASE и т.д.)."


При внедрении расширения выводилось окно в котором нужно было указать какого вида расширение "Безусловное" или "Условное". Для предложенной выше конструкции нужно выбирать "Безусловное" - т.е. вида static.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/