Введение в «Checkpoint Group»
Понятие и реализация «Сheckpoint Group» изначально появились в SAP Web Application Server (SAP WebAS) 6.20 и целиком относятся к области контроля правильности и возможности отслеживания переменных. При грамотном применении, технология облегчает работу по отладке и повышает качество ABAP кода.Данные проверки являются переносимыми между системами, с помощью транспортов. Управляется с помощью транзакции SAAB.
Checkpoints можно определить как для оператора BREAK-POINTS так и с помощью оператора ASSERT.
Для отображения данных в журнале группы также возможно использовать оператор LOG-POINT.
Рассмотрим оператор ASSERT
SAP описывает следующий синтаксис для данного оператора:
ASSERT [[ID group [SUBKEY subkey]] [FIELDS field1 field2 table1 table2...] CONDITION] log_exp.
ASSERT является расширенной копией оператора BREAK-POINT. Оператор может использоваться в коде, поставляемым в продуктивную системы, без какого либо влияния на код. Вызывается только в случае активации Checkpoint group. Для оператора предоставляется расширенный список действий.
Checkpoint groups могут быть определены и активированы в транзакции SAAB. Созданный ID используется для определения операторов ASSERT и BREAK-POINT.
Ниже показана транзакция SAAB на этапе создания group ID.
После нажатия кнопки создать переходим на экран с основными параметрами Checkpoint Group.
Существует 3 варианта активации групп:
- Personal Activation;
- User Level activation;
- Server Level Activation.
В случае Personal Activation, группа активируется только для текущего пользователя. User Level — для указанных пользователей, Server Level — для указанных серверов
Пример определения пользователей:
Пример определения серверов:
Для управления checkgroups возможно определение для каждого из операторов:
BREAK-POINT определяются как активные или неактивные. Неактивные будут игнорироваться. В случае если BREAK-POINT активированы, то при достижении данного оператора будет вызван отладчик.
Синтаксис оператора BREAK-POINT:
BREAK-POINT { [ID groupID] | [log text] }. Ex. BREAK-POINT ID YH_check.
В случае если опустить параметр ID, точка будет вызываться безусловно (постоянный статус активно). Текст ‘log text’ будет отображаться в log.
В случае работы фонового процесса, программа не прерывается на breakpoint. Если в программе будет вызван breakpoint, то в системный протокол (log) будет внесена запись «Breakpoint reached» с указанием имени программы и местоположением breakpoint. Если breakpoint не активен, то они игнорируются.
Далее рассмотрим оператор ASSERT
Существует три основных варианта использования оператора:
- Inactive: оператор не отрабатывает
- Log: протоколирование при использовании
- Abort: возникает прерывание программы (runtime error ASSERTION_FAILED)
В случае фонового процесса возможны два варианта исполнения:
- Log: происходит протоколирование события
- Abort: происходит прерывание программы и соответствующая запись вносится в log
Принципы использования ASSERT:
- Не используйте ASSERT вместо exceptions.
- Используйте ASSERT только в пользовательском коде
- При вызове ASSERT создаются log записи до runtime error.
Пример программы использующий LOG-POINT и ASSERT:
REPORT yh1316_test_checkgrp.. ** Parameters Declarations PARAMETERS: p_carrid LIKE sflight-carrid. *data : max type i. *Types Declarations of sflight TYPES : BEGIN OF type_s_sflight, carrid TYPE sflight-carrid, connid TYPE sflight-connid, fldate TYPE sflight-fldate, price TYPE sflight-price, max TYPE i, END OF type_s_sflight. *Field String Declarations for sflight DATA: fs_sflight TYPE type_s_sflight. *Internal table for Sflight Data DATA : t_sflight LIKE STANDARD TABLE OF fs_sflight. DATA yh1316_subkey TYPE char200. IF p_carrid IS INITIAL. SELECT carrid connid fldate price FROM sflight INTO fs_sflight. WRITE: / fs_sflight-carrid, fs_sflight-connid, fs_sflight-fldate, fs_sflight-price. APPEND fs_sflight TO t_sflight. ASSERT ID yh1316_check SUBKEY 'YH1316_parameter_if_initial' FIELDS p_carrid t_sflight fs_sflight-carrid fs_sflight-connid fs_sflight-fldate fs_sflight-price condition p_carrid eq 'LH' . ENDSELECT. ASSERT ID yh1316_check SUBKEY 'YH1316_1' FIELDS p_carrid t_sflight CONDITION p_carrid EQ 'LH' . EXIT. ELSE. ASSERT ID yh1316_check SUBKEY 'YH1316_2' FIELDS p_carrid t_sflight CONDITION p_carrid EQ ’LH’. SELECT carrid connid fldate MAX( price ) AS max INTO CORRESPONDING FIELDS OF fs_sflight FROM sflight WHERE carrid EQ p_carrid GROUP BY carrid connid fldate ORDER BY carrid max DESCENDING. IF sy-dbcnt < 4. APPEND fs_sflight TO t_sflight. LOG-POINT ID yh1316_check SUBKEY 'LOG_POINT' FIELDS p_carrid t_sflight fs_sflight-connid fs_sflight-fldate fs_sflight-max. WRITE: / fs_sflight-carrid, fs_sflight-connid, fs_sflight-fldate, fs_sflight-max. ENDIF. ENDSELECT. ENDIF.
Для управления Checkgroup возможно создание вариантов. Варианты создаются как локально, так и под конкретного пользователя.
Ниже приведён пример пользовательского варианта:
При создании варианта можно выбирать различные типы объектов для которых активируются checkpoints.
- Checkpoint Group
- Program
- Class
- Function Group
Для каждого Object type определяются индивидуальных параметров для Breakpoint, Logpoint и Assert. Опции соответствуют перечисленным ранее для экрана создания.
После создания варианта перейдём обратно в checkgroup. Убедитесь что вариант активирован.
Как видно выше, создаются как локальные, так и глобальные варианты.
Запустим программу код которой был предоставлен выше.
Если условие Assert не выполняется — создаётся запись в log. Данный log просматривается в транзакции SAAB для определённой Check Group.
Log также воздаётся для оператора LOG-POINT. Для этого оператора также можно определить параметр SUBKEY. Данный ключ служит для дополнительной сортировки по определённым флагам (SUBKEY).
Просмотр Log возможен в двух представлениях:
- Group/Subkey/Program/Procedure
- Group/Program/Procedure/Subkey
Ниже представлен один из вариантов отображения:
В log возможно провалиться в конечные строки дерева, где будут отображены расширенные данные.
Если в параметрах Assert были указаны переменные/таблицы, то они могут быть выведены на просмотр. Например для таблиц можно просмотреть всех хранящиеся в ней записи.
В отладчике возможен просмотр текущей Checkgroup
От автора перевода:
Первый пост посвященный данной теме можно прочитать по ссылке.
ссылка на оригинал статьи http://habrahabr.ru/post/218783/
Добавить комментарий