Текущее время: Пн, июл 14 2025, 16:43

Часовой пояс: 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
Сообщения: 351
Имхо, выбор решения зависит от того, что собирается делать с ошибкой тот, кто вызовет Вашу функцию, т.е. что ему нужно:
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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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