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.

コメントを残す

メールアドレスが公開されることはありません。