同一プログラムのバージョン比較
・バージョンで比較を行う方法
SE38/SE80などでユーティリティ>バージョン>バージョン管理
と進み、比較したいバージョンを選択することでそのバージョン同士での
比較が可能だ。
(バージョンは移送取得時に自動生成されたり、ユーティリティ>バージョン>バージョン生成で自分で作成することも可能だ。)
異なるプログラムや異なる環境のソースコード比較
どちらもトランザクションコード:SE39で比較することが可能だ。
※異なる環境の比較はベーシス側で設定が必要
プラグマ
構文チェックをした際には様々なエラーや警告がでることがあり、
基本的にそれらは原因を解明して出力されないようにしないといけない。
プラグマはそういった警告などをあえて表示させないようにするもの。
全ての警告をプラグマで消せるわけではない
書き方は↓の通り(##WRITE_OK の部分がプラグマ)
##の後ろに何を入れたら消せるかは、
PGMIDを右クリック→チェック→拡張チェック
で全選択して実行、警告内容を確認するときに
プラグマで消せるものであれば##〇〇で消せる、というメッセージが出力される。
消せないものは非表示にできませんという内容のメッセージが出力される。
パフォーマンスチューニング
各種パフォーマンス確認トランザクション
・DB02 DB側のメモリ等さまざまな負荷の分析が可能
・ST12 トレース ここからPGM動かすと実行時間とか処理ごとの件数や
どの処理が重いかなどを確認可能
・S_MEMORY_INSPECTOR PGM実行後にメモリスナップショットを作成すると
メモリ使用量などを分析できる。
DB02で見れるメモリとは別物
☆パフォーマンスチューニングでよくやること
■以下のような書き方や命令を使用していないか確認
・SELECT *
・INTO CORRESPONDING
・MOVE CORRESPONDING
・LOOP中のLOOP
・LOOP中でのSELECT
■SELECT文で取得するデータが大きい場合、分割できないか試す
■INDEXを使用する
■SORT TABLE、HASHED TABLEに置き換えられないか確認
■BINARY SEARCHが使用できるか確認
■DB側メモリ使用量が多い場合、SELECT時にPACKEGE SIZEを指定する
■関連のSAP NOTEがないか確認
■取得元標準テーブルのサイズが大きすぎる場合、
必要データを事前に新規アドオンテーブルに登録してそっちから取得
など
システム変数
システム変数は「SY-」で始まる、SAP標準で用意されている変数。
プログラム中で書かなくても決められた値が各変数に自動で入るようになっている。
(例えば「SY-SUBRC」という変数は、処理が成功したときには「0」、失敗の場合は「0以外」というイメージで自動で格納される。
成功or失敗を確実に判定できるため、処理分岐の判定に使用したりする。)
よく使うシステム変数は以下のもの。
(全てのシステム変数はテーブル:SYSTに格納されている。)
SY-SUBRC | 戻り値 |
SY-TABIX | 現在の行の索引 |
SY-TFILL | 現在の行数 |
SY-INDEX | 現在のループパス |
SY-UNAME | ログインしてるユーザー名 |
SY-LANGU | ログインしてる言語 |
SY-DBCNT | 処理したテーブルの行数 |
SY-DATUM | サーバーの日付 |
SY-DATLO | ローカル日付 |
SY-UZEIT | サーバーの時刻 |
SY-TIMLO | ローカル時刻 |
SY-UCOMM | 機能コード |
SY-CPROG | 実行中のプログラムID |
SY-ULINE | 横線 |
SY-VLINE | 縦線 |
SY-ABCDE | アルファベット |
カスタムコントロールについて
・テキストを複数行入力できる入力フィールドとかを作ることができる
・スクリーンペインタの左側のボタンの下から2つ目の「カスタムコントロール」ボタンをクリック
・カスタムコントロールの名前などを設定(任意)
・DynproのPBOでCreate Object等でそれぞれコンテナやツールバーを設定することで使用可能
オフセット
ABAPでは開始位置と長さの指定を以下の方法で行うことができる。
変数名 +開始位置(長さ)
Ex.
ZD_TEST = ‘ABCDE’.
WRITE ZD_TEST +1(2).
上記の場合、WRITEで出力されるのは「BC」となる。
開始位置のイメージは以下の通り。
+0 +1 +2 +3 +4
A B C D E
上記例では「+1」としているため、「B」から始まる。
長さは(2)になっているため、開始位置含めて2文字を返すため、
「BC」となる。
変数内の文字列等の検索
■変数の中に特定の文字が入っているかを確認したい、という時には
「FIND」という命令を使うことで検索が可能だ。
・使用方法
FIND 検索したい値(その値が入ってるデータオブジェクト等もOK) IN 検索対象
長さや行数の検索
「長さ」や今LOOPの「何行目」を調べるときは次の命令で調べることが可能だ。
■長さ
・ STRLEN( 長さを調べたい変数名 ).
STARENの後ろの()の中は空白を前後1つずつ入れる点に注意
■行数
・LINES( 行数調べたい変数名 ).
STRENと同じで()の中は空白を前後に1つずつ入れる点に注意
・SY-DBCNT: 処理したテーブル行数
・SY-INDEX: 現在のループパス件数
・SY-TABIX: LOOPしたりしてる内部テーブルの現在の行のインデックス
・SY-TFILL: READしたりしてる内部テーブルの現在の行数
デバッグについて
デバッグはプログラムの動作などをデバッガを使用して確認したりすること
■デバッガの起動方法
・SE38/SE80等のPGM実行画面でトランザクションコードを入れる入力窓に
「/h」と入力、エンター押してからPGMを実行
・SE38/SE80等のABAPエディタでステップ数(行数)が表示されている部分を
クリックしブレークポイントを設定してから実行
■新デバッガと旧デバッガ
切り替えはデバッガ起動してから画面上の方のメニューから切り替え可能
■処理スキップ
スキップしたい処理より先のコードを選択した状態でShift+F12で
選択している部分までスキップすることが可能だ。
ファイルアップロード
ローカル(PC)にあるファイルをサーバーにアップロードしたい場合、
メソッド:cl_gui_frontend_services=>gui_upload
使用することで実現可能だ。
使い方は次の通り。
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = ファイルのパス(フルパス)
filetype = ファイルタイプ(ASCなど)
has_field_separator = タブ区切りONの場合はX,OFFの場合ブランク
CHANGING
data_tab = ファイルのデータを格納する内部テーブル
EXCEPTIONS
file_open_error = 1
file_read_error = 2
:
:
OTHERS = 19.
条件分岐
条件でロジックを分岐させたい場合、「IF」や「CASE」などの命令を使用する。
■IFの使い方
IF 条件式
条件式に一致するときのロジック
ELSEIF 別の条件式
条件式に一致するときのロジック
ELSE
条件に一致しないときのロジック
ENDIF
■CASEの使い方
CASE 条件にしたい変数とか
WHEN 条件の変数が何の値か
ロジック
WHEN 条件の変数が何の値か
ロジック
WHEN OTHERS
それ以外の場合のロジック
ENDCASE
READ TABLEでの条件について
READ TABLEの条件にNEなどは使用することができない。
特定の値以外を抽出したい場合はREAD TABLEをLOOP中で行ってLOOPの中で除外、内部テーブルに格納という方法をとることが多い。
コメント