免責事項
チェックポイントグループの概要
チェックポイントグループの概念と実装は、元々SAP Web Application Server(SAP WebAS)6.20に登場し、精度管理と変数を追跡する機能に完全に関連しています。 適切に使用することで、この技術はデバッグ作業を促進し、ABAPコードの品質を向上させます。 検証データは、トランスポートを使用するシステム間で移植可能です。 トランザクションSAABを使用して管理されます。
チェックポイントは、BREAK-POINTSステートメントとASSERTステートメントの両方に定義できます。
LOG-POINT演算子を使用して、グループログにデータを表示することもできます。
ASSERTステートメントを検討する
SAPでは、このステートメントの次の構文について説明しています。
ASSERT [[ID group [SUBKEY subkey]] [FIELDS field1 field2 table1 table2...] CONDITION] log_exp.
ASSERTは、BREAK-POINTステートメントの拡張コピーです。 オペレーターは、コードに影響を与えることなく、生産システムに提供されるコードで使用できます。 チェックポイントグループがアクティブになっている場合にのみ呼び出されます。 操作の拡張リストがオペレーターに提供されます。
チェックポイントグループは、SAABトランザクションで定義およびアクティブ化できます。 生成されたIDは、ASSERTおよびBREAK-POINTステートメントの定義に使用されます。
以下は、グループID作成フェーズ中のSAABトランザクションを示しています。
[作成]ボタンをクリックした後、チェックポイントグループの主なパラメーターの画面に移動します。
グループをアクティブにするための3つのオプションがあります。
- パーソナルアクティベーション
- ユーザーレベルのアクティブ化。
- サーバーレベルのアクティベーション。
パーソナルアクティベーションの場合、グループは現在のユーザーに対してのみアクティベートされます。 ユーザーレベル-指定されたユーザー、サーバーレベル-指定されたサーバー
ユーザー定義の例:
サーバー定義の例:
チェックグループを制御するために、演算子ごとに定義することができます:
ブレークポイントは、アクティブまたは非アクティブとして定義されます。 非アクティブは無視されます。 BREAK-POINTがアクティブになっている場合、このステートメントに到達すると、デバッガーが呼び出されます。
BREAK-POINTステートメントの構文は次のとおりです。
BREAK-POINT { [ID groupID] | [log text] }. Ex. BREAK-POINT ID YH_check.
IDパラメータを省略すると、ポイントは無条件に呼び出されます(一定のステータスはアクティブです)。 「ログテキスト」というテキストがログに表示されます。
バックグラウンドプロセスの場合、プログラムはブレークポイントで中断しません。 プログラムでブレークポイントが呼び出されると、プログラムの名前とブレークポイントの場所とともに、エントリ「Breakpoint到達」がシステムプロトコル(ログ)に入力されます。 ブレークポイントがアクティブでない場合、それらは無視されます。
次に、ASSERTステートメントを検討します。
演算子には主に3つの用途があります。
- 非アクティブ:ステートメントは機能しません
- ログ:使用時のログ
- 中止:プログラム割り込みが発生します(実行時エラーASSERTION_FAILED)
バックグラウンドプロセスの場合、2つのバージョンが可能です。
- ログ:イベントロギングが発生します
- 中止:プログラムが中断され、対応するエントリがログに入力されます
ASSERTを使用する原則:
- 例外の代わりにASSERTを使用しないでください。
- ASSERTは、カスタムコードでのみ使用してください。
- ASSERTが呼び出されると、ランタイムエラーの前にログエントリが生成されます。
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.
チェックグループを制御するために、オプションを作成できます。 バリアントは、ローカルと特定のユーザーの両方に対して作成されます。
以下は、カスタムオプションの例です。
バリアントを作成するときに、チェックポイントがアクティブになるさまざまなタイプのオブジェクトを選択できます。
- チェックポイントグループ
- プログラム
- クラス
- 機能グループ
各オブジェクトタイプについて、ブレークポイント、ログポイント、およびアサートの個々のパラメーターが定義されています。 オプションは、作成画面について前述したオプションに対応しています。
オプションを作成したら、チェックグループに戻ります。 オプションが有効になっていることを確認してください。
上記のように、ローカルバリアントとグローバルバリアントの両方が作成されます。
上記のコードが提供されたプログラムを実行します。
アサート条件が満たされない場合、ログエントリが作成されます。 このログは、特定のチェックグループのトランザクションSAABで表示されます。
ログは、LOG-POINTステートメントでも報われます。 このステートメントのSUBKEYパラメーターを定義することもできます。 このキーは、特定のフラグ(SUBKEY)による追加のソートに使用されます。
ログ表示は2つのビューで可能です。
- グループ/サブキー/プログラム/手順
- グループ/プログラム/手順/サブキー
以下は表示オプションの1つです。
ログでは、拡張データが表示されるツリーの最終行に分類される可能性があります。
Assertパラメーターで変数/テーブルが指定されている場合、それらを表示できます。 たとえば、テーブルの場合、そこに保存されているすべてのレコードを表示できます。
デバッガーで、現在のチェックグループを表示できます。
翻訳の著者から:
このトピックに関する最初の投稿はリンクで読むことができます。