Текущее время: Сб, апр 20 2024, 06:23

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Передача исключений в ФМ
СообщениеДобавлено: Пн, сен 26 2016, 11:00 
Ассистент
Ассистент

Зарегистрирован:
Вт, сен 13 2016, 20:18
Сообщения: 49
Здравствуйте,
написал ФМ, основная его работа - формирование параметров для саповских ФМ и последовательное их выполнение.
Каждый ФМ кидает от 5 до 15 исключений, обрабатывать которые я в своей функции не хочу, но хочу передать тому, кто вызовет мою функцию.
Пока что сделал так:
Code:
FUNCTION ZMY_FUNCTION.
*" IMPORTING
*"   param type text20
*" EXCEPTONS
*"   STEP1_ERROR
*"   STEP2_ERROR
*"   STEP3_ERROR

CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
    CHANGING
      sapworkdir            = temp_dir
    EXCEPTIONS
      get_sapworkdir_failed = 1
      cntl_error            = 2
      error_no_gui          = 3
      not_supported_by_gui  = 4
      OTHERS                = 5.
  IF sy-subrc <> 0.
    RAISE STEP1_ERROR.
  ENDIF.

  CALL FUNCTION SAP_FUNCTION1
      EXPORTING
         param = ...
      EXCEPTIONS
             ERROR1 = 1
             ERROR2 = 2
             ERROR3 = 3
             ERROR4 = 4
             OTHERS = 5.
  IF sy-subrc <> 0.
    RAISE STEP2_ERROR.
  ENDIF.
"""......
 

Как лучше всего в плане дизайна передавать данные об ошибках?
пока вижу два варианта:
      1)Перечислить все возможные ошибки в блоке исключений, и каждый блок if sy-subrc<>0 развернуть в CASE и там кидать через RAISE
      2)Добавить экспортируемый параметр для кода ошибки, и в него кидать Sy-subrc от каждого фм при ошибке

Ну или оставить как есть, сообщаяя просто, какой ФМ выдал ошибку?


Последний раз редактировалось GeneralLao Пн, сен 26 2016, 15:56, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Передача исключений в ФМ
СообщениеДобавлено: Пн, сен 26 2016, 15:55 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Имхо, выбор решения зависит от того, что собирается делать с ошибкой тот, кто вызовет Вашу функцию, т.е. что ему нужно:
1) просто признак ошибки - достаточно бросить [в общем-то произвольный] код ошибки
2) ФМ, вернувший ошибку и код ошибки - информация содержится в таблицах fupararef и funct
3) готовое максимально полное описание ошибки - тогда нужно анализировать все возможные ошибки и возвращать в удобной для "клиента" форме


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача исключений в ФМ
СообщениеДобавлено: Пн, сен 26 2016, 16:15 
Ассистент
Ассистент

Зарегистрирован:
Вт, сен 13 2016, 20:18
Сообщения: 49
LAT написал(а):
Имхо, выбор решения зависит от того, что собирается делать с ошибкой тот, кто вызовет Вашу функцию, т.е. что ему нужно:
1) просто признак ошибки - достаточно бросить [в общем-то произвольный] код ошибки

Я пока так и поступил, если фм дает ошибку, передаю дальше - не сработал такой-то ФМ
LAT написал(а):
2) ФМ, вернувший ошибку и код ошибки - информация содержится в таблицах fupararef и funct

Как-то мудрёно, ФМ не настолько сложный, чтобы такую абстракцию городить.

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

в принципе можно обернуть коды ошибок в класс исключений, чтобы выше те кто используют фм могли его в TRY CTCH обернуть


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Передача исключений в ФМ  Тема решена
СообщениеДобавлено: Пн, сен 26 2016, 16:30 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
GeneralLao написал(а):
...
В принципе хотелось бы как в JAVA - возникло исключение, и оно поднимается по колл-стеку, пока его кто-нибудь не поймает.

в принципе можно обернуть коды ошибок в класс исключений, чтобы выше те кто используют фм могли его в TRY CTCH обернуть

Для этого хорошо подходит класс исключений CX_NO_CHECK, точнее созданные от него потомки. Главная особенность, что для вызова в Raise не нужно объявлять его в списке событий, и если в коде, вызвавшим ваш ФМ не будет обработки Try-EndTry, то дамп не выпадет, а управление передастся дальше по стеку.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Передача исключений в ФМ
СообщениеДобавлено: Пн, сен 26 2016, 16:58 
Ассистент
Ассистент

Зарегистрирован:
Вт, сен 13 2016, 20:18
Сообщения: 49
Parazit написал:
GeneralLao написал(а):
...
В принципе хотелось бы как в JAVA - возникло исключение, и оно поднимается по колл-стеку, пока его кто-нибудь не поймает.

в принципе можно обернуть коды ошибок в класс исключений, чтобы выше те кто используют фм могли его в TRY CTCH обернуть

Для этого хорошо подходит класс исключений CX_NO_CHECK, точнее созданные от него потомки. Главная особенность, что для вызова в Raise не нужно объявлять его в списке событий, и если в коде, вызвавшим ваш ФМ не будет обработки Try-EndTry, то дамп не выпадет, а управление передастся дальше по стеку.

Спасибо, пожалуй унаследуюсь от него, в нем укажу имя фм, комментарий и его SUBRC


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

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


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

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


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

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