Новые инструменты отладки в системе SAP ERP. Практические рекомендации
В данной статье я расскажу о некоторых новых инструментах отладки, которые предлагает система ERP, приведу некоторые демонстрационные примеры и дам рекомендации по применению оных.
Оглавление
1. Программные точки прерывания
1.1. Подготовка. (SET\GET PARAMETER SAP_BS_FND_DEBUG)
1.3. Параметр IV_APPL метода CL_DEBUG=>BREAK
1.4. Отложенные точки прерывания
1.4.1. Активные отложенные точки
1.4.2. Неактивные отложенные точки (использование метода ACTIVATE_BREAK)
2.2. Управление бесконечными циклами
2.3. Создание «бесконечного цикла» в программе
Вступление
В данной статье я расскажу о некоторых новых инструментах отладки, которые предлагает система ERP, приведу некоторые демонстрационные примеры и дам рекомендации по применению оных.
Строго говоря, новыми инструменты можно назвать только условно – они появились не вчера и даже не в прошлом году, и всё же являются редко используемыми, вероятно от малой известности. Как мне кажется, внимания к себе они определённо заслуживают и потому я решил рассказать о них. Речь пойдёт о следующем инструментарии:
- Программные точки прерывания (класс CL_DEBUG);
- Бесконечный цикл (класс CL_BCS_BREAKLOOP);
- Отладочный SAP-ярлык.
Изложенный материал будет полезен программистам любого уровня подготовки.
1. Программные точки прерывания
Некоторое время назад SAP создал инструмент, позволяющий создавать программные точки прерывания. Этот инструмент – класс CL_DEBUG. Как и многое из того, что создаёт SAP, этот достаточно простой инструмент несколько специфичен и требует внимательного обращения.
Заранее условимся о терминологии: в нижеприведённом тексте используется понятие «ID точки прерывания» - это текстовый идентификатор точки прерывания. SAP в своей документации использует понятие Application. Использовать слово «Приложение» (или «Применение\Заявка\Заявление\Прошение\Просьба\Употребление\Применимость\Прикладывание\Прилежание\Старание\Рвение») в данном контексте мне кажется неправильным, поэтому - «ID точки прерывания».
1.1. Подготовка. (SET\GET PARAMETER SAP_BS_FND_DEBUG)
Чтобы пользователь мог работать с программными точками прерывания необходимо в параметрах пользователя (транзакция SU01D) присвоить SET\GET-параметр SAP_BS_FND_DEBUG .
Как заполнить этот параметр:
- можно указать ‘X’ – тогда для пользователя будут срабатывать все программные точки прерывания.
- можно указать ID точки прерывания, например ZDBG – будут срабатывать только точки прерывания, имеющие ID точки «ZDBG».
- можно указать несколько точек прерывания через пробел. Например, “ZDBG#INIT ZDBG#HDR ZDBG#POS ZBREAK#TST”.
- Есть ограничение: длина ID точки прерывания – максимум 10 символов.
Значение этого SET\GET-параметра SAP_BS_FND_DEBUG напрямую связано с параметром IV_APPL метода BREAK, поэтому некоторые особенности заполнения параметра указаны в разделе 1.2.1, обратите на это внимание.
1.2. Метод BREAK
Метод BREAK отвечает за программное прерывание в месте вызова. Фактически, это главный метод всего класса.
Параметры вызова
Метод имеет следующие параметры:
- IV_APPL - Application for Break-Point. ID точки прерывания.
- IV_UNAME – User Name. Имя пользователя, для которого может быть вызвано прерывание.
- IV_PARID – SET\GET Parameter ID. Имя SET\GET-параметра, который будет содержать имя активной точки прерывания.
- IV_RETURN_IF_NOT_INITIALISED – No evaluation if not initialized before. Особый параметр для работы с событием Load-of-program. В данной статье не раскрывается.
Примеры вызова
1. Чтобы создать простую динамическую точку прерывания достаточно вызвать статический метод без параметров:
- _DEBUG=>BREAK( ). “Простая безусловная точка прерывания
Такая точка будет срабатывать только в тех случаях, если у пользователя параметр SAP_BS_FND_DEBUG = ‘X’.
2. Немного более сложный (и более жизненный) случай – точка прерывания с ID:
- _DEBUG=>BREAK(‘ZTEST’) .
В этом случае прерывание сработает, если у пользователя есть параметр SAP_BS_FND_DEBUG = ‘ZTEST’.
3. Интересно работает параметр IV_USER. Рассмотрим на примере:
CL_DEBUG=>BREAK( IV_APPL = ‘ZTEST’
IV_USER = ‘PROGRAMMER1’).
Логика его такова: Допустим, я работаю под пользователем JUST_USER и вызываю программу с вышеуказанным кодом. Если у пользователя PROGRAMMER1 есть параметр SAP_BS_FND_DEBUG = ‘ZTEST’, то для пользователя JUST_USER точка прерывания сработает.
Сделано это для того, чтобы можно было использовать программные точки прерывания для RFC-вызовов, во время которых работа в удалённой системе идёт не от пользователя PROGRAMMER1, а от, например, типичного RFC-USER. Тогда, как было сказано выше, если у пользователя PROGRAMMER1 есть параметр SAP_BS_FND_DEBUG = ‘ZTEST’, то для пользователя RFC-USER точка прерывания сработает.
4. Иногда невозможно использовать SET\GET-параметр SAP_BS_FND_DEBUG . В таком случае можно использовать любой другой SET\GET-параметр. Имя этого параметра необходимо передать, используя параметр IV_PARID:
CL_DEBUG=>BREAK( IV_APPL = ‘ZTEST’
IV_PARID = ‘ZBREAK_PARAMETER’).
Обращаю внимание на то, что правила заполнения такого SET\GET-параметра (в данном случае ZBREAK_PARAMETER) идентичны правилам заполнения параметра SAP_BS_FND_DEBUG.
1.3. Параметр IV_APPL метода CL_DEBUG=>BREAK.
Рассмотрим чуть подробнее параметр IV_APPL. Строго говоря, это неуникальный ID точки прерывания. Как уже было сказано ранее:
- точка прерывания сработает только если значение IV_APPL соответствует значению параметра SAP_BS_FND_DEBUG;
- если использован параметр IV_PARID, то соответствует значению параметра, переданному через IV_PARID;
- длина значения параметра – максимум 10 символов.
ID точки прерывания является составным параметром. Согласно документации SAP, в общем виде он записывается в виде «Applicationgroup#Applicationpart».
Applicationgroup может использоваться как общая часть для группировки для нескольких точек прерывания.
Applicationpart – уникальная часть ID точки прерывания (в рамках группы).
При этом вызывать точки прерывания можно как по «Applicationgroup#Applicationpart», так и по «Applicationgroup».
Пример: предположим, в программе вызываются следующие динамические точки прерывания:
1. CL_DEBUG=>BREAK(‘ZDBG#INIT’)
2. CL_DEBUG=>BREAK(‘ZDBG#HEAD’)
3. CL_DEBUG=>BREAK(‘ZDBG#POS’)
4. CL_DEBUG=>BREAK(‘ZBREAK#PAR’)
Если SET\GET-параметр SAP_BS_FND_DEBUG =’X’, то сработают все точки.
Если SAP_BS_FND_DEBUG = ‘ZDBG#INIT’ , то сработает точка № 1.
Если SAP_BS_FND_DEBUG = ‘ZDBG’, то сработают точки №1,2,3.
Если SAP_BS_FND_DEBUG = ‘ZBREAK’, то сработает точка №4.
Если SAP_BS_FND_DEBUG = ‘ZBREAK#PARAMETER’, то тоже сработает точка №4(!): хотя ID точки прерывания и SAP_BS_FND_DEBUG не совпадают, но сравниваются только первые 10 символов. Тем не менее, пользоваться таким допущением не рекомендуется – при определённых условиях можно получить дамп.
1.4. Отложенные точки прерывания
С помощью класса CL_DEBUG можно делать отложенные активные и отложенные неактивные точки прерывания.
1.4.1. Активные отложенные точки
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 5
Комментарий от
Николай Кронский
| 06 февраля 2018, 16:16
С версиями компонента SAP_ABA 701 SP15 класса CL_BCS_BREAKLOOP не наблюдается. Как и ФМ монитора.
Вроде бы инструмент выглядит архаичнее Активируемых контрольных точек (транз. SAAB), а вроде бы отсутствует в системе...
Комментарий от
Александр Грибов
| 07 февраля 2018, 07:20
Николай Кронский 06 февраля 2018, 16:16
Александр, с какой версии появилась функциональность "бесконечных циклов"?
С версиями компонента SAP_ABA 701 SP15 класса CL_BCS_BREAKLOOP не наблюдается. Как и ФМ монитора.
Вроде бы инструмент выглядит архаичнее Активируемых контрольных точек (транз. SAAB), а вроде бы отсутствует в системе...
Оба класса точно существуют в версии SAP_ABA 731 SP9 .
Комментарий от
Антон Сорокин
| 08 февраля 2018, 15:46
Комментарий от
Антон Сорокин
| 08 февраля 2018, 15:49
Тут было бы уместно упомянуть ФМ K_PLAN_WAIT_FOR_DEBUGGING. По сути тоже бесконечный цикл, но всё же..
Комментарий от
Александр Грибов
| 08 февраля 2018, 21:30
Антон Сорокин 08 февраля 2018, 15:46
Про CL_DEBUG интересно, спасибо.