2016
10.19
SAP ABAP ソースコード断片集

[SAP] よく使うABAPコード断片集(逆引き辞書)

SAP

708 Views

SAPのプログラミング言語、ABAPのコード断片集をまとめています。久しぶりに触れると「あれ、あのABAPの書き方なんだっけな?」となることも多いと思いますので、辞書代わりにご活用下さい(。・ω・。)

[SAP] よく使うABAPコード断片集(逆引き辞書)

構造定義

構造・テーブル型宣言 & 箱準備

まず構造を作成し、それをベースにテーブル構造を作成する。TYPESで準備したものはあくまで定義のため、実際にデータを格納するためには変数の箱を準備する必要があります(。・ω・。)

TYPES:
* 外部コマンドの出力結果構造の定義
  BEGIN OF g_typ_h_tbl_btcxpm,
    length    TYPE btcxpm-length,         "外部プログラム内のプロトコルメッセージ長
    message   TYPE btcxpm-message,    "外部プログラムからのログメッセージ
  END OF g_typ_h_tbl_btcxpm,
  g_typ_tbl_btcxpm TYPE TABLE OF g_typ_h_tbl_btcxpm.

DATA:
* 外部コマンドの出力結果格納変数(箱準備)
  g_h_tbl_btcxpm  TYPE g_typ_h_tbl_btcxpm,
  g_tbl_btcxpm      TYPE g_typ_tbl_btcxpm.

===
* テーブルデータから1行ずつ読み込む際の記載方法。INTOの後に続くものは、同じ構造から出力したものでないとエラーになる
  LOOP AT g_tbl_btcxpm INTO g_typ_h_tbl_btcxpm
    ~~~
  ENDLOOP.

※ちなみにデータ準備は、下記コードのみで宣言可能(テーブルを直接指定できる)
DATA:
  g_tbl_btcxpm type table of BTCXPM.  
動的構造定義(FIELD-SYMBOLS)

FIELD-SYMBOLSを利用すると、プログラム内で決定する構造等が動的に利用できるようになります(例えば、ユーザが入力した構造ベースでデータを作成する機能等)。実行時になるまでは構造化等のデータ型属性を持ちません。


* 内部テーブルのデータをテーブル型FSに格納する
LOOP AT l_tbl_data ASSIGNING <fs_line>.
  IF <fs_line> IS  ASSIGNED.
    APPEND <fs_line> TO <fs_tbl>.
  ENDIF.
ENDLOOP.
例外とセットでメッセージを出力する(SE91で登録するメッセージ)

RAISE命令を実行すると、プログラムは強制終了される。RAISE命令を付与しない場合は、メッセージタイプによって処理が続行されるかどうかが決まる

MESSAGE e[メッセージ番号]([メッセージクラス]) WITH [メッセージ変数1の値] [メッセージ変数2の値] [メッセージ変数3の値] [メッセージ変数4の値]
RAISING [例外名].

※エラーメッセージとして表示すると、その状態で処理が終了してしまう
 (下面描画が中途半端になる)
 それを避けるためには、メッセージをステータスSで出力し、見た目をエラーにする
 MESSAGE s[メッセージ番号]([メッセージクラス]) DISPLAY LIKE 'E'

汎用モジュールから返却される結果をそのまま出力する際は、下記の通りシステムIDを利用する

IF SY-SUBRC <> 0.
  MESSAGE ID     SY-MSGID
          TYPE   SY-MSGTY
          NUMBER SY-MSGNO
          WITH   SY-MSGV1
                 SY-MSGV2
                 SY-MSGV3
                 SY-MSGV4.
ENDIF.

内部テーブル

内部テーブルの先頭行にデータを追加

内部テーブルの先頭行にデータを追加する場合は、INSERT命令にINDEXを付与してデータを追加します。(APPENDでの追加はNG)

INSERT [追加対象の構造データ] INTO [内部テーブル] INDEX 1.

分岐・ループ処理

条件分岐
* CASE文(l_wk_samplecodeが1ならフラグを立てる)
CASE l_wk_samplecode.
  WHEN '1'.
    MOVE 'X' TO l_wk_flg.
  WHEN '2'.
    MOVE ''   TO l_wk_flg.
ENDCASE.

選択画面

選択画面の同じ行に複数のパラメータを含める
SELECTION-SCREEN BEGIN OF LINE.
  [この中でPRAMETERS宣言]
SELECTION-SCREEN END OF LINE.

注意:このオプションを使用すると、選択テキストは表示されない

https://help.sap.com/saphelp_nw70/helpdata/ja/9f/dba7e235c111d1829f0000e829fbfe/content.htm

SQLクエリ ABAPコード断片集

データ存在チェック(キー項目全て指定できる場合)
SELECT COUNT(*)
FROM    DD02L
WHERE TABNAME = [構造ID]

* 取得結果が0件の場合は処理を終了する
IF sy-subrc <> 0.
  [0件の場合の処理]
ENDIF.

文字列操作

文字列結合
* 文字列結合
CONCATENATE "文字列1"
                       "文字列2"
                       "文字列3"
              INTO l_wk_string
              SEPARATED BY space.
※各文字の間にスペースを入れる場合、SEPARATED BY spaceで挿入する

* 文字列分割(sample.csvのファイル名・拡張子を取得)
SPLIT 'sample.csv'
    AT '.'
 INTO l_wk_filename l_wk_fileextension.
文字列置換
* ピリオドを空白に変更する場合の例
REPLACE ALL OCCURRENCES OF '.' IN [置換対象の文字列] WITH ''.

* 符号(,)や左側の空白を削除する場合の例
WRITE l_wk_timestamp TO [置換対象の文字列]
                                           NO-GROUPING
                                           LEFT-JUSTIFIED.
文字列分割
SPLIT [分割対象の文字列]
   AT [区切り文字]
 INTO [分割後のデータ格納場所1] [分割後のデータ格納場所2].

いかがでしたでしょうか?その他よく使うコード断片集ございましたら、コメント欄でご教示頂けると大変嬉しいです!


 この記事を読んだ人は、以下の記事も読んでいます

 この記事を読んだ人は、稀に以下の記事も読んでいます

 人気記事らんきんぐ(。・ω・。)

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。