Текущее время: Чт, июл 31 2025, 17:18

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 09:29 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
Есть ФМ "SUSR_USER_MAINT_WITH_DIALOG". Он вызывается при запуске транзакции SU01. Задача - запустить его и передать ему те значения переменных, которые не описаны как входные, но описаны как внутренние. Возможно ли такое? То есть, в основной программе сэмулировать работу отладчика: остановить выполнение вызываемого ФМ на строчке такой-то, поменять значения таблиц и продолжить выполнение дальше. Это нужно для вызова экрана ФМ с уже заполненными данными. Можно конечно просто повырезать нужные куски кода этого ФМ, но их много, а хотелось бы сделать код более компактным.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 09:34 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
Code:
field-symbols: <is> type any,
               <it> type any table.

assign ('(PROG_NAME)PARAMETR_NAME') to <is>.
assign ('(PROG_NAME)TABLE_NAME[]') to <it>.

:)

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 09:37 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
east написал:
Code:
field-symbols: <is> type any,
               <it> type any table.

assign ('(PROG_NAME)PARAMETR_NAME') to <is>.
assign ('(PROG_NAME)TABLE_NAME[]') to <it>.

:)


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

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 09:50 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
Это должно быть наверное что-то в виде вызова в фоне отладки с запуском ФМ в новой сессии. Предварительно в основной программе с помощью специального ФМ задать точку останова отладчика в нужном ФМ. Наверное это задача слишком трудоемкая..


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 10:00 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
Пардон, был невнимателен .. сплю мало :( Единственный возможный выход, который вижу я - расширение. :)

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 10:04 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Если цель не вызвать отладчик, а именно определить внутренние переменные в группе функций SUU0 (к которой принадлежит указанный ФМ), то можно попробовать следующие варианты:

1. Вызвать какую-нибудь любую процедуру из указанной группы функций, тогда все переменные области данной ГФ будут инициализированы и их можно будет присваивать через ASSIGN

пример:

Code:
PERFORM clear_all_buffers(SAPLSUU0) USING 'X'.
...
" Далее выполняем ASSIGN, как написано в одном из предыдущих постов
...
" Далее вызываем сам ФМ


2. Правда, можно предположить, что ФМ после вызова проинициализирует все переменные и они все равно будут пустыми. Тогда первый способ не подойдет.
В этом случае можно поискать какие-нибудь user-exit-ы или badi, вызывающиеся внутри данного ФМ (внутри транзакции su01), и в них с помощью передачи через MEMORY заполнить нужные значения.

3. В новой версии можно воспользоваться enhancement-ами, их можно воткнуть в любой ФМ или FORM в начале и в конце (часто в коде уже заблаговременно созданы ENHANCEMENT-POINTs тогда вообще супер), и опять же через память передать нужные значения и заполнить нужные данные.

4. Совсем кривой - скопировать группу функций и накривить все что хочется )) Крайне не рекомендуется, но такое тоже иногда приходится если задача очень обязательная и по-другому не получается


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 10:09 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
4й способ врядли покатит с su01... либо все равно будет использоваться расширение, либо zsu01 как альтернатива...что на мой взгляд жесть)))) все-таки основная запись юзера :D
ну и 3й вар. тож не прокатит, скорее всего, как и описано...

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 12:48 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
raaleksandr написал:
Если цель не вызвать отладчик, а именно определить внутренние переменные в группе функций SUU0 (к которой принадлежит указанный ФМ), то можно попробовать следующие варианты:

1. Вызвать какую-нибудь любую процедуру из указанной группы функций, тогда все переменные области данной ГФ будут инициализированы и их можно будет присваивать через ASSIGN

пример:

Code:
PERFORM clear_all_buffers(SAPLSUU0) USING 'X'.
...
" Далее выполняем ASSIGN, как написано в одном из предыдущих постов
...
" Далее вызываем сам ФМ


2. Правда, можно предположить, что ФМ после вызова проинициализирует все переменные и они все равно будут пустыми. Тогда первый способ не подойдет.
В этом случае можно поискать какие-нибудь user-exit-ы или badi, вызывающиеся внутри данного ФМ (внутри транзакции su01), и в них с помощью передачи через MEMORY заполнить нужные значения.

3. В новой версии можно воспользоваться enhancement-ами, их можно воткнуть в любой ФМ или FORM в начале и в конце (часто в коде уже заблаговременно созданы ENHANCEMENT-POINTs тогда вообще супер), и опять же через память передать нужные значения и заполнить нужные данные.

4. Совсем кривой - скопировать группу функций и накривить все что хочется )) Крайне не рекомендуется, но такое тоже иногда приходится если задача очень обязательная и по-другому не получается


3-й способ не прошел.. Сообщение - Object FUGR SUU0 is part of the central basis and therefore cannot be enhanced.
2-й способ тоже.. нету там user-exit-ов или badi.
Сейчас пробую 1-й.. но что-то пока не получается..


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 12:56 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
Интересно можно ли так? Найти ФМ внутри данного ФМ в который можно добавить enhancement. В этот enhansement вставить код, который через assign(исх ФМ, переменная) заполнит нужные мне переменные. Хотя там вроде в основном вызов ФМ своей функц. группы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 13:08 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
Damir написал(а):
Интересно можно ли так? Найти ФМ внутри данного ФМ в который можно добавить enhancement. В этот enhansement вставить код, который через assign(исх ФМ, переменная) заполнит нужные мне переменные. Хотя там вроде в основном вызов ФМ своей функц. группы.

Implizit Enhanceemnt тоже можно пробовать. Такой же вид расширения как и все остальные, практически ))

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 13:26 
Специалист
Специалист

Зарегистрирован:
Пт, фев 16 2007, 09:49
Сообщения: 157
Нашел ФМ ADDR_DEQUEUE пакета SZA2.
В самом начале ФМ нажал кнопку "Добавить расширение". Система запросила название и описание. Ввел их, затем система просит ключ доступа на расширение..
Введите ключ
для объекта R3TR ENHO E1
SAP-версия 700
----
Ключ доступа ???
Инсталляция 0120024701
Так и должно что-ли быть? :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 13:39 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Зря мучаетесь объект этот системный для таких ENHANCEMENT не возможен

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Пт, июл 17 2009, 14:16 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
Можно получиить ключик доступа на модификацию объекта, как вариант)) Вопрос тоько в том на сколько Вы дорожите SAP-овской поддержкой :)

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Сб, июл 18 2009, 20:08 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, окт 31 2008, 15:58
Сообщения: 70
Здравствуйте.

Расширение в функции ADDR_DEQUEUE выполняется легко и непринужденно через

enhacement framework, поэтому я не совсем понимаю, откуда взялся запрос ключа на модификацию объекта.

Я проверил все на системе. Все получилось без проблем.

Цитата:
Зря мучаетесь объект этот системный для таких ENHANCEMENT не возможен


Это в корне неверное рассуждение. Можно менять все, начиная от интерфейса ФМ, заканчивая вставкой кода и управлением активации enhacement проекта.

С Уважением, Абрамов Виктор.

_________________
С Уважением, Абрамов Виктор.
The devil is in the detail.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вызов ФМ с заполнением внутренних переменных, не описанных как входные параметры.
СообщениеДобавлено: Вс, июл 19 2009, 15:23 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Извините, был не прав, действительно создаётся
видимо ENHANCEMENT невозможен если СтатусПрог = "S", а не Приложение

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

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB