ABAP① モジュール・クラス
目次
ABAPメニュー
ABAP
SAPのコーディングを行うツール兼エディター。
メニューによってはDB操作ツール等も可能。
SE10 -移送管理
SE11 -ディクショナリ:DB登録
SE24 -クラスビルダ
SE16 -データブラウザ:DB照会
SE37 -汎用モジュールビルダ:汎用モジュール開発用
SE38 -ABAPエディタ:レポートプログラム開発用
SE80 -オブジェクトビルダ:画面作成含む開発全般
/n~ セッション削除の上、メニューを開く
/o~ セッション維持のまま、別メニューを開く
・SE38(実行可能プログラム)
実行可能プログラム=レポートプログラム
・基本
REPORT プログラム名.
DATA name TYPE string.
name = ‘Mr.!’
WRITE ‘Hello World’.
*命令を続ける場合は「:」、「,」が必要。
WRITE: ‘Hello World’, name.
・パラメーター
REPORT プログラム名.
PARAMETERS prmText(20). *(1)入力画面が表示される。
INITIALIZATION.
prmText = ‘初期値’. *(2)↑に初期値が設定される。
START-OF-SELECTION.
WRITE prmText. *(3)↑(2)の値が表示される。
・サブルーチン
↑例3の続きで…
*(1)↓サブルーチン(TESTROUTINEを呼び出し)
PERFORM TESTROUTINE.
*(1)↓サブルーチン(TESTROUTINEを呼び出し)
PERFORM TESTROUTINE.
*(2)サブルーチンを定義
FORM TESTROUTINE
USING PRM1
CHANGING PRM2.
~
WRITE:/ PRM1, PRM2.
ENDFORM. ” TESTROUTINE
・実行可能プログラムの呼び出し
SUBMIT プログラム名.
SUBMIT プログラム名 WITH 引数
SUBMIT プログラム名 WITH 引数 VIA SELECTION-SCREEN.
*呼び出したプログラムの処理が終わると、呼び出し元に処理が戻る。
*AND RETURNがない場合、先が終わると元も終わる。
SUBMIT プログラム名 ~ AND RETURN.
・SE37 -汎用モジュールビルダ
・汎用モジュール呼び出し
REPORT プログラム名.
DATA prmText TYPE C.
*(3)登録済みの汎用モジュールを呼び出す
CALL FUNCTION ‘モジュール名’
*EXPORTINGは汎用モジュールに対して。
汎用モジュールから見るとIMPORT
EXPORTING
PRMTEXT = prmText
*(ここが納得いかないが)
汎用モジュールにおけるEXPORTの値(RTNTEXT)をIMPORTし、prmTextにセット。
IMPORT
RTNTEXT = prmText
EXCEPTIONS
ERROR = 1
OTHERS = 1
.
*↑ここでまとめてピリオド
*(4)↑(3)でエラーが発生した時の処理
IF SY-SUBRC <> 0.
MESSAGE ID ‘SABAPDCU’ TYPE ‘E’ NUMBER 888
WITH ‘エラーが発生しました。’.
ENDIF
*(5)↑(3)の値が表示される。
WRITE prmText.
・汎用モジュール(基本)
・IMPORT
パラメータ名、型定義、関連型、デフォルト値、内容説明 を設定。
PRMTEXT TYPE STRING DEFAULT ‘初期値’
・EXPORT
パラメータ名、型定義、関連型、内容説明 を設定。
RTNTEXT TYPE STRING
・例外
例外(名称)、メッセージ
EX 例外が発生しました。
・ソースコード
FUNCTION モジュール名.
IF PRMTEXT <> SPACE.
*文字列連結。RTNTEXT = ‘(‘ & PRMTEXT & ‘)’
CONCATENATE ‘(‘ PRMTEXT ‘)’ INTO RTNTEXT.
ELSE.
RAISE EX. *例外で定義した例外名称
ENDIF.
ENDFUNCTION.
※この汎用モジュールを実行するとEXPORT値(RTNTEXT)が表示される。
パラメータを”にすると例外が発生するので「例外が発生しました。」と表示される。
・汎用モジュール(戻り値:テーブル)
パラメータ名、型定義、関連型・・・を設定。
RTNTABLE LIKE 定義済み構造体(テーブル型)
*↑ディクショナリで構造体を作っておく。
*ここではSCARRテーブルのフィールド1~3を持つ構造体とする。
・ソースコード
FUNCTION モジュール名.
DATA:
MyTable LIKE TABLE OF SCARR,
MyRow LIKE SCARR.
SELECT
フィールド1
フィールド1
フィールド3
INTO TABLE MyTable
FROM SCARR.
LOOP AT MyTable INTO MyRow.
*返り値(テーブル型変数)に行を追加
APPEND MyRow TO RTNTABLE.
ENDLOOP.
ENDFUNCTION.
※この汎用モジュールを実行すると返り値(RTNTABLE)が得られる。
汎用モジュールを呼び出したプログラムからRTNTABLEを利用可能。
SELECT結果が0件の場合はRTNTABLE.Rows.Count=0等、0件のテーブルが返される。
・SE24 -クラスビルダ
・クラス
ローカルクラス(外部プログラムから参照不可)
グローバルクラス(外部~参照可)
*インスタンス化
DATA: インスタンス名 TYPE REF TO クラス名.
CREATE OBJECT インスタンス名.
*属性(プロパティ)操作
インスタンス名->属性名 = ~.
*メソッド呼び出し
CALL METHOD インスタンス名->メソッド名
EXPORTING
引数 = ~
RECEIVING
戻り値 = ~
.
*メソッド呼び出し省略形
インスタンス名->メソッド名
(
EXPORTING
引数 = ~
RECEIVING
戻り値 = ~
).
*更に省略
~ = インスタンス名->メソッド名(~)
*エラークラスを利用した例外処理
TRY.
* CX_ROOTクラスのインスタンスを作成
DATA: e TYPE REF TO CX_ROOT.
DATA: i TYPE I.
DATA: t TYPE.
i = ‘a’.
CATCH CX_SY_CONVERSION_NO_NUMBER INTO e.
*数値エラー用例外処理
t = e->get_text( ).
WRITE:/ e->kernel_errid, t.
※「CONVERT_NO_NUMBER 引数aを数値として解釈できません」と表示される
CATCH CX_ROOT INTO e.
*↑の例外処理に引っかからなかった時用。
~
ENDTRY.