2020/06/04 今日の積み上げ
SAP研修4日目
◇IF文(ABAP編):
例)
PARAMETERS : T_VAR TYPE I.
IF T_VAR = 100.
WRITE : 'OK'.
ELSEIF T_VAR = 1000.
WRITE : 'OUT'.
ELSE.
WRITE : T_VAR.
ENDIF.
変数を定義した上で、入力された変数が一致するかの条件式を書いた。
基本的な書き方は他の言語と同じだが、
・ABAPの場合()や{}は使用しないので注意が必要
・条件比較する際も「==」ではなく、「=」が使われるため気をつける。(IFの中は論理式と認識されている)
・IFの終わりは「ENDIF」をかく。
◇CASE文(ABAP編):
例)
PARAMETERS : T_VAR TYPE I.
CASE T_VAR .
WHEN 10.
WRITE 'AAA'.
WHEN 100.
WRITE 'BBB'.
WHEN 1000.
WRITE 'CCC'.
WHEN OTHERS.
WRITE T_VAR.
ENDCASE.
⓵CASEの後に比較対象の変数を記載する。
⓶WHENを使って比較する。
⓷必ずENDCASEで閉じる。
◇DO文(ABAP編):
例)
PARAMETERS : T_VAR TYPE I.
DO T_VAR TIMES.
WRITE SY-INDEX.
ENDDO.
入力された回数分処理が繰り返される。
SY-INDEXはSAPで用意されているもので、ループ回数を参照できる。実行結果は、1.2.3.4......と入力した数まで表示される。
DOの横の”ループ回数 TIMES”は省略することもできるが、その場合無限ループに入ってしまうため、DOのなかでEXITを記載し抜け出す処理を書く必要がある。
◇WHILE文(ABAP編):
例)
WHILE SY-INDEX < 4.
WRITE : SY-INDEX.
ENDWHILE.
DOと同じ繰り返し処理。
SY_INDEXでループ回数を参照しているため、3回同じ処理が繰り返される。DO同様EXITを使って抜け出すこともできる。
◇LOOP文(ABAP編):
LOOP文は内部テーブルを上から一行ずつ読み込むループである。
読み込んだデータは構造(作業領域)へ順次格納される。
例)
TYPES :
BEGIN OF TYP_DATA1,
KEY1(5) TYPE C,
KEY2(5) TYPE C,
NUM(5) TYPE C,
END OF TYP_DATA1.
DATA :
GT_DATA1 TYPE STANDARD TABLE OF TYP_DATA1.
GST_DATA1 LIKE LINE OF GT_DATA1.
GST_DATA1-KEY1 = 'AAA'.
GST_DATA1-KEY2 = 'ZZZ'.
GST_DATA-NUM = '111'.
APPEND GST_DATA1 TO GT_DATA1.
GST_DATA1-KEY1 = 'BBB'.
GST_DATA1-KEY2 = 'YYY'.
GST_DATA-NUM = '222'.
APPEND GST_DATA1 TO GT_DATA1.
GST_DATA1-KEY1 = 'CCC'.
GST_DATA1-KEY2 = 'XXX'.
GST_DATA-NUM = '333'.
APPEND GST_DATA1 TO GT_DATA1.
LOOP AT GT_DATA1 INTO GST_DATA1.
WRITE : /
GST_DATA1-KEY1,
GST_DATA1-KEY2,
GST_DATA-NUM.
ENDLOOP.
◇メッセージ出力:
トランザクションコード「se91」でメッセージクラスを参照できる。
例)3通りの書き方がある。
MESSAGE S011.
MESSAGE S011(ZPR_MSGCL).
MESSAGE ID 'ZPR_MSGCL' TYPE 'S' NUMBER 011.
一行目の書き方の場合、最初のREPORT命の行に追記処理が必要。
例)
REPORT ZPR_NAME01.
⇨REPORT ZPR_NAME01 MESSAGE-ID ZPR_MSGCL.
◇メッセージタイプ:
A:強制終了(ポップアップメッセージが出力される)
※処理はメッセージ命令で終了する。
E:エラー(画面右下に赤字で出力される)
※処理はメッセージ命令で終了する。
I:情報メッセージ(ポップアップメッセージが出力される)
※ポップアップの「続行」を押すと処理が続行される。
S:ステータスメッセージ(画面右下にメッセージが出力される)
※処理は自動で続行される。
W:警告(画面右下にメッセージが出力される)
※処理はメッセージ命令で終了する。
X:強制終了(ショートダンプ画面としてメッセージが出力される)
※処理はメッセージ命令で終了する。
◇メッセージ変数:
トランザクションコード「se91」を使ってメッセージ照会画面に行く。
メッセージテキスト欄に「&1」を入力することによりソースの方で変数を入れることができる。
例)
メッセージテキスト欄に
「&1テーブルの登録に失敗しました。」で登録する。
ソースの方で、
MESSAGE S010(ZPR_MSGCL) WITH 'テスト'.
と記述することで、結果を
”テストテーブルの登録に失敗しました。”と表示される。
※&2.&3と追記で書くことにより、いくらでも変数を追加できる。
◇メッセージ変数格納:
ソースに以下を追記する。
MESSAGE S010(ZPR_MSGCL) WITH 'テスト' INTO G_MESG.
それによりG_MESGにメッセージが格納され、
WRITE G_MESG.
でメッセージが左下ではなく、結果画面の方に出力できる。
※代わりにエラーメッセージとしては出力されない。
◇ラジオボタンの作成:
例)(SELECTION記述はなくても問題ない)
SELECTION-SCREEN BEGIN OG BLOCK BLK1 WITH FRAME TITLE TEXT-S01.
PARAMETERS :
P_RAD1 RADIOBUTTON GROUP GRP1 DEFAULT 'X',
P_RAD2 RADIOBUTTON GROUP GRP1.
SELECTION-SCREEN END OF BLOCK BLK1.
表示画面には…
🔘P_RAD1
⚪️P_RAD2
と表示される。デフォルトの記述により、最初はP_RAD1にチェックがつくが、P_RAD2を押せばP_RAD1は解除される。
ラジオボタンは片方しか選択できない。
◇選択画面制御:
例)
SELECTION-SCREEN BEGIN OG BLOCK BLK1 WITH FRAME TITLE TEXT-S01.
PARAMETERS :
P_DATA1(5) TYPE C MODIF ID M01,
P_DATA2(5) TYPE C MODIF ID M02,
P_DATA3(5) TYPE C MODIF ID M03,
P_RAD1 RADIOBUTTON GROUP GRP1 DEFAULT 'X' USER-COMMAND RAD,
P_RAD2 RADIOBUTTON GROUP GRP1.
P_RAD3 RADIOBUTTON GROUP GRP1.
SELECTION-SCREEN END OF BLOCK BLK1.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CASE SCREEN-GROUP1.
WHEN 'M01'
IF P_RAD1 = 'X'.
SCREEN-INPUT = 1.
ELSE.
SCREEN-INPUT = 0.
ENDIF.
WHEN 'M02'
IF P_RAD1 = 'X'.
SCREEN-REQUIRED = 2.
ELSE.
SCREEN-INPUT = 0.
ENDIF.
WHEN 'M03'
IF P_RAD1 = 'X'.
SCREEN-INPUT = 1.
ELSE.
SCREEN-INPUT = 0.
ENDIF.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
補足)
・MODIF IDにより項目をグループ化することが可能
・MODIF IDを使うと、キーはSCREEN-GROUP1に割り当てられる。
・MODIFY SCREENで画面の更新を行う
・USER-COMMANDでラジオボタンを選択した際に画面を更新することが可能
・USER_COMMANDの後の変数RADは任意のもの
◇画面制御変数:
SCREEN-INPUT
0の場合:入力不可状態
1の場合:入力可能状態
SCREEN-REQUIRED
0の場合:入力不可状態
1の場合:必須入力の状態
2の場合:必須入力の表示だが必須入力でない状態
SCREEN-ACTIVE
0の場合:非表示状態
◇バージョン管理:
ユーティリティからバージョンを生成すればゲームのセーブデータのように管理できる。
以上。
この記事が気に入ったらサポートをしてみませんか?