Меню

Новые инструменты отладки в системе SAP ERP. Практические рекомендации

|

В данной статье я расскажу о некоторых новых инструментах отладки, которые предлагает система ERP, приведу некоторые демонстрационные примеры и дам рекомендации по применению оных.

Оглавление

Вступление

1. Программные точки прерывания

1.1. Подготовка. (SET\GET PARAMETER SAP_BS_FND_DEBUG)

1.2. Метод BREAK

1.3. Параметр IV_APPL метода CL_DEBUG=>BREAK

1.4. Отложенные точки прерывания

1.4.1. Активные отложенные точки

1.4.2. Неактивные отложенные точки (использование метода ACTIVATE_BREAK)

1.5. А вдруг дамп?

1.6. Особенности, ограничения

1.7. Краткое резюме

2. Бесконечный цикл

2.1. Для чего?

2.2. Управление бесконечными циклами

2.3. Создание «бесконечного цикла» в программе

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. Чтобы создать простую динамическую точку прерывания достаточно вызвать статический метод без параметров:

  1. _DEBUG=>BREAK( ). “Простая безусловная точка прерывания

Такая точка будет срабатывать только в тех случаях, если у пользователя параметр SAP_BS_FND_DEBUG = ‘X’.

2. Немного более сложный (и более жизненный) случай – точка прерывания с ID:

  1. _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

Александр, с какой версии появилась функциональность "бесконечных циклов"?
С версиями компонента SAP_ABA 701 SP15 класса CL_BCS_BREAKLOOP не наблюдается. Как и ФМ монитора.
Вроде бы инструмент выглядит архаичнее Активируемых контрольных точек (транз. SAAB), а вроде бы отсутствует в системе...

Точную версию назвать не могу.
 
Оба класса точно существуют в версии SAP_ABA 731 SP9 .

Комментарий от  

Антон Сорокин

  |  08 февраля 2018, 15:46

Про CL_DEBUG интересно, спасибо.

Комментарий от  

Антон Сорокин

  |  08 февраля 2018, 15:49

>>Самый популярный (а может и единственный?) способ: сделать «бесконечный» цикл, затем «провалиться»
 
Тут было бы уместно упомянуть ФМ K_PLAN_WAIT_FOR_DEBUGGING. По сути тоже бесконечный цикл, но всё же..

Комментарий от  

Александр Грибов

  |  08 февраля 2018, 21:30

Про CL_DEBUG интересно, спасибо.

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