SAP ABAP: Crossing Checkpoint Charlie in a SAAB (перевод статьи c scn.sap.com)

Добрый день, уважаемые хаброжители!
Как ABAP-разработчику, мне хочется внести свой вклад в повышение качества пользовательских SAP-программ. С этой целью хочу опубликовать цикл переводов статей об интересных и главное полезных и не очень распространённых техниках из базы знаний SAP (SAP community network). Ключевые понятия достаточно тяжело переводить на русский язык, различные интерпретации создают путаницу, поэтому привожу их на английском языке.


От Автора:
Странное название статьи? Я связываю транзакцию SAAB и третью букву латинского алфавита (Charlie = C). В частности, в статье будут рассмотрены Logpoints. В ABAP Logpoints доступны с версии NW2004s.

Со времени внедрения данной техники в 2005 году, тема обсуждалась несколько раз на SCN, например:

Несмотря на все преимущества использования checkpoint group, технология по прежнему широко не используется в пользовательских ABAP разработках. Одна из возможных причин — отсутствие у разработчиков практики использования и осознания преимуществ технологии. Данная статья посвящена одному из возможных сценариев применения logpoints. Так-же рассмотрим пошаговый пример использования logpoints. Отдельно замечу что это не полноценное руководство по использованию checkpoint group. Для полноценного изучения темы рекомендую обратиться на help.sap.com. Пример ABAP программы также не претендует на эталон, данный код придуман для изучения конкретного примера.

1. Сценарий использования


Достаточно часто приходится сталкиваться с повторяющейся снова и снова проблемой. Например, в продуктивной системе возникает ошибка, которую не получается воспроизвести ни в тестовой, ни в системе разработки. Функциональный консультант кивает на разработчика, в свою очередь разработчик уверен, что проблема со стороны конфигурации системы (т.е. консультанта). Разработчик сравнивает код во всех системах и не находит ни каких разночтений. В тесте всё работает корректно и разработчик снова обращается к консультанту. Консультант в свою очередь проверяет конфигурации, и так-же не находит различий и считает что ошибка в ABAP коде. Круг замкнулся. Конечный же пользователь сильно переживает, что его проблема по прежнему не решена и требует срочно всё исправить. Разработчик решает рассмотреть проблему более глубоко. После изучения лога приложения он может локализовать место возникновения проблемы, но причина её появления по прежнему не ясна. Было бы очень полезно узнать, какими данными оперирует программа, чтобы сравнить с другой системой, но отладка в продуктиве, по множеству причин, оказывается невозможной.

2. Пример


Ниже представлен элементарный пример, который позволяет понять, насколько просто использовать logpoints. Ниже описано как объявить входные и выходные параметры произвольного метода для их протоколирования (внесения в Log). Рекомендую, для важных методов, заявлять протоколирование входящих и исходящих параметров. Разработчики, в свою очередь, могут объявлять произвольные переменные для протоколирования.

2.1 Программа

Следуя общей идее статьи был создан класс с методом BORDER_CONTROL. В методе объявлены входной и выходной параметры (таблицы). Структура таблиц содержит поля имя, описание, национальность, дату и произвольный флаг.

image

image

Для тестирования ниже представлена программа вызывающая метод обработки таблицы:

image

2.2 Настройка Checkpoint Group

Для возможности ведения Logpoint, необходимо создать и активировать Checkpoint Group.

image

Для параметра Logpoints поменяем состояние на Log

image

Также возможно определить конкретного пользователя для log. Опция доступна после нажатия кнопки User.

image

Нажмите image и введите имя пользователя.

image

Сохраните checkpoint group. При сохранении будет предложен диалог, где необходимо определить период активности группы. Настоятельная рекомендация активировать Log непосредственно перед и деактивировать сразу после отработки программы. Данная рекомендация возникает, т.к. таблицы в которых хранятся записи Log не обслуживаются автоматически и могут накапливать внушительные массивы данных.

image

После активации группы запустим тестовую программу. После отработки будет создан log (тр.SAAP->Checkpoint group->закладка Log)

image

Раскрыв дерево c log записями возможно просмотреть переменные/таблицы указанные для сохранения (FIELDS параметр для оператора LOG-POINT см.код метода). В данном примере в качестве параметров заданы входящая и исходящая таблица метода BORDER_CONTROL.

image

Можем увидеть записи входящей таблицы:
image

Исходящая таблица содержит обработанные записи с отмеченным флагом:
image

С помощью этой информации разработчик может получить массив данных с помощью которых локализовать и найти возможную проблему, либо воспроизвести ситуацию в другой системе для дальнейшей отладки. Временные затраты на дополнение своего кода Logpoint минимальны и автор питает надежду, что количество используемых checkpoint group в пользовательских разработках будет увеличиваться.

В этой статье автор описал один из примеров поясняющих пользу использования Logpoints. Существует большое количество других возможных применений не описанных в данной примере.

Если уже используете checkpoint groups, напишите, пожалуйста, в комментариях Ваш опыт использования.

Информацию о КПП Чарли (Checkpoint Charlie) можно узнать по ссылке.

Оригинал статьи можете найти по ссылке.
Поделиться публикацией

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

    0
    В продуктиве проблема как правило не с логикой, а с производительностью. Пару раз использовали, а так обычно отладчик «решает».
      0
      Согласен, если отладчик доступен, то мысль применения логов даже не возникает. В статье как раз упор на отсутствие прав на отладку в продуктивной системе. Хотя, будут ли права на SAAB, тоже вопрос.
      Лично у меня, в последнее время, с такими правами всё меньше проектов, порой даже в тест права дают «с боем».
      –2
      Кобол какой-то.
        0
        Хуже.
          –1
          Но платят хорошо.
          +1
          Синтаксис кобола и абапа очень схож.
          +1
          Отличная статья, спасибо!
          Побольше бы таких статей о небанальных вещах в SAP.
            0
            В 1с можно попросить пользователя записать его действия и отправить файл с записью разработчику, а он его у себя «воспроизведет» на копии и выяснит, в чем проблема: v8.1c.ru/overview/Term_000000816.htm
              0
              Вопрос уточнение, в запись сохраняются данные которые крутятся в самой программе или только параметры которые пользователь вводит на экране? Если только экранные данные, то подобная вещь есть и в сапе (так называемый batch input), правда он больше для пакетной загрузки предназначен. Для конечного пользователя конечно в 1с проще.
                0
                В данном режиме записываются все интерактивные действия пользователя, и потом их можно «проиграть» например для создания тест-кейсов для автоматизированного тестирования. Режим «версионирования», в котором можно откатиться к любому из предыдущих состояний прикладных объектов (элементов справочников и документов) реализован в так называемой «библиотеке стандартных подсистем» через сериализацию/десериализацию объектов в XML. Пакетная загрузка собственно также как правило идет через XML.
              0
              Код на хабре в виде скринов — жесть же?
              Ссылка на КПП «Чарли» содержит ошибочный символ.

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

              Самое читаемое