Значимое сообщение об ошибке для исключения SAPSQL_PARSE_ERROR

Я написал функцию на ABAP, которая вызывается через SAP pyrfc.

Если есть SAPSQL_PARSE_ERROR, вызывающий RFC (клиент, написанный на Python) получает бессмысленное сообщение об ошибке:

ABAPRuntimeError: RFC_ABAP_RUNTIME_FAILURE (rc = 3): key = SAPSQL_PARSE_ERROR, message = Beim Parsen einer Dynamischen Angabe trat ein Fehler auf. [MSG: class =, type =, number =, v1-4: = ;;;]

Через tcode st22 я могу посмотреть подробности. Чтобы ускорить передачу туда и обратно, я хотел бы улучшить сообщение об ошибке, которое отображается в клиенте python.

Я предполагаю, но не знаю, что нужно изменить функцию abap. Как получить ценный текст, который виден в st22?

Знаю, что вывод st22 очень длинный. Ценный текст находится на немецком языке sap gui в поле под названием «Fehleranalyse», что примерно означает «Устранение неполадок» или более буквальный «анализ ошибок».


person guettli    schedule 26.10.2018    source источник


Ответы (1)


SAPSQL_PARSE_ERROR предполагает, что ваша удаленная функция в какой-то момент отправляет неверный запрос OpenSQL в базу данных. Это должно привести к обрабатываемому исключению типа CX_SY_DYNAMIC_OSQL_SYNTAX.

Если это исключение не будет обнаружено, произойдет дамп. Транзакция ST22 - это инструмент анализа дампа, который позволяет вам их проверять.

Помещение TRY ... CATCH вокруг запроса OpenSQL должно позволить вам перехватить это исключение и проанализировать его атрибуты для получения более значимого сообщения. Затем вы можете создать собственное исключение, чтобы перенаправить вызывающему RFC что-то более полезное.

person Florian    schedule 26.10.2018
comment
И, в конце концов, если ваш функциональный модуль строит SQL-запрос из параметров, ему может потребоваться защита от SQL-инъекции, вызывая методы класса CL_ABAP_DYN_PRG, которые могут обнаруживать некоторые ошибки до того, как запрос будет построен и выполнен. - person Sandra Rossi; 26.10.2018