この記事を読むメリット
- SAPのアドオン設計者が知っておくべき、最低限のABAPを用いた開発知識を習得することができます。
アドオン設計を担当することになったんだけど、そもそもABAPで何ができるのかあまり知らないわ…。
ABAPにはさまざまな機能がありますが、ABAPでのアドオン開発知識が乏しいとアドオン設計するにも実現可能性が分からないまま設計を行ってしまい精度の低い設計になってしまいがちです。
ここではアドオン設計者が知っておくべき最低限のABAP知識をABAPプログラムを用いずに解説します!
この記事のポイント
アドオンプログラムで達成可能なこと
アドオンプログラムの目的は様々ですが、アドオンプログラムで達成できることとして大きく分けて以下のような事項が挙げられます。
アドオンプログラムは手動実行・JOB実行(バックグラウンドでの実行)をすることができます。
アドオンテーブル更新
アドオンテーブルレコードの登録・更新・削除が可能で、ABAPプログラムでSQLを用いてテーブル更新を行います。
様々な用途が考えられますが、移行用にcsvをアップロードして一括登録することが可能です。
他システムへの連携
SAPに登録されているデータを取得・整形し、他システムへの連携ファイルを出力するような機能を作成することもできます。
マスタの更新や伝票の作成
マスタの更新や伝票の作成を行うことが可能です。
標準テーブルのレコードはアドオンテーブルと違い、直接変更しないことが推奨されいるためSQLでの更新は行いません。
バッチインプットと呼ばれるプログラム内でトランザクションを実行する方法や、BAPIと呼ばれる汎用モジュールを用いた方法でマスタ更新や伝票の作成を行います。
一覧データの出力
取得したデータや計算結果などを一覧で表示することが可能です。
表示形式としてはALV(Excelのようなセル形式)や帳票のような形式で表示させることや、JOB実行(バックグラウンドで実行)して帳票をスプールに出力することも可能です。
ALVのイメージ
帳票のイメージ
別プログラムの呼び出し
処理した結果を用いて他のプログラムを呼び出すということが可能です。
標準機能の途中で書ける”穴”にコーディング
EXITやBAdIといった機能を用いれば、標準機能の途中でプログラムを書くことが可能な”穴”にコードを記述することができます。
例えば伝票作成時の”穴”にある項目の値を編集するようなロジックを記述できたりします。
プログラム設計する際に知っておくこと
処理の順序
基本的にABAPプログラムでは、主に以下の処理の順序で処理を記述します。
- 初期処理(イベントブロック:INITIALIZATION)
プログラム起動時に走る処理。選択画面の初期設定などで使われることが多いです。
- 選択画面(イベントブロックではなく、最初に変数定義で記載するのが一般的)
選択画面の項目を定義。
- 選択画面チェック(イベントブロック:AT SELECTION-SCREEN)
選択画面で入力し実行した際に値のチェックをする処理。
- 主処理(イベントブロック:START-OF-SELECTION)
メインとなる処理。
- 結果画面(イベントブロック:START-OF-SELECTIONもしくはEND-OF-SELECTION)
処理が終わった際にユーザが見える画面。ALVの画面・帳票といったものから、処理したログを出力します。
省略も可能ですが基本的に処理結果はログとして出力する必要があるのが一般的なので、どういった内容を出力するかは重要です。
システム項目
標準で準備されているシステム項目を用いることができます。
例えばユーザIDやシステム日付などの固定値や、プログラム内で処理した結果が反映される項目などが準備されています。詳しくは以下を参照ください!
あわせて読みたい
【SAP ABAP】システムテーブルSYST項目(SY-SUBRCなど)まとめ
この記事を読むメリット よく使うSYST項目(SY-xxx)について知ることができます。 ABAPの開発をしているとよくSY-xxxをよく見かけるのですが何を示しているものなんです…
メッセージ
SAPではメッセージを登録させておくことができ、共通メッセージをそれぞれの機能から呼び出すことが可能です。
メッセージはT-CODE:SE91にて管理されています。
機能毎に表現がバラバラにならないようチームメンバーと擦り合わせて設定することが必要となります。
選択画面定義
選択画面では処理する条件などを選択項目として定義することができます。
選択項目は単一選択と範囲選択の定義が可能となります。
以下は単一選択と範囲選択の定義の表示例です。
内部テーブルの処理
ABAPプログラムでは一般的なDBテーブル同様、複数の項目を持った横並びのレコードを複数行持つデータ持つことができ、それを内部テーブルと呼びます。
内部テーブルのイメージ
内部テーブルに対して以下のような処理をすることができます。
並び替え処理
内部テーブルを、ある項目で昇順もしくは降順にすることができます。
繰り返し処理
内部テーブルを1行ずつ読み込み、処理をすることができます。
読み込む際に条件を指定することも可能です。例えば、上図の内部テーブルの例だと数量が11以上のレコードのみ読み込んでいくと2,4行目のみが順番に読み込まれます。
読み込み処理
内部テーブルから特定のレコードを読み込むことで、特定のレコードに対して処理をすることができます。内部テーブルからの読み込みパターンは以下の2つです。
行数の取得
内部テーブルの行数を読み込むことができます。
内部テーブルデータの追加・更新・削除
内部テーブルのレコードを更新することができます。更新パターンは主に以下の2つです。
- 繰り返し処理の中で順番にレコードを読み込み項目を更新
- 条件指定をして一括で内部テーブルレコードの項目を更新
RANGEテーブル
RANGEテーブルを用いることで意図したテーブルのレコードを取得したり、意図したデータを条件指定して処理をすることができます。
RANGEテーブルについては別記事を準備予定じゃ!
繰り返し処理(内部テーブル不要)
繰り返し処理は内部テーブルを用いなくとも利用可能です。
どういう条件を満たした場合に繰り返し処理を終了するかも指定する必要があります。
条件分岐
「この項目の値が〇〇の時に××の処理をする」といった条件分岐をすることができます。
汎用モジュール
機能をまたいで共通の処理が必要になることがあります。
そんな時は汎用モジュールを作成し、共通部品として利用することが可能です。
汎用モジュールはどういう仕様(IMPORT/EXPORTパラメータや処理の内容)にすればよいか、チームとしっかり調整することが必要です。
アドオンテーブルレコードの登録・更新・削除
ABAPプログラムの中でSQLを用いてアドオンテーブルのレコードを登録・更新・削除をすることができます。
更新できなかった場合にどういったログを残すのかも設計の範疇です。
マスタ更新や伝票作成
標準のマスタの更新や伝票の作成をすることができます。
標準のテーブルは直接SQLで更新することは推奨されていないため、バッチインプットやBAPIを使用する必要があります。
実行が終わった際にエラーが発生したレコードのリカバリ方法をどうするかが設計のポイントとなります。
バッチインプット
SAPのトランザクションコードを直接実行して登録していくような動作をABAPプログラムで再現して実行することでマスタ更新や伝票の作成をすることができます。
デメリットとしてはBAPIより処理速度が遅いことや、バージョンアップをした際にプログラム名や項目名が変わる可能性もあるので注意。(バージョンアップする際は要テスト)
BAPI
BAPIとは標準で準備されている汎用モジュールの一種で、標準データの取得や更新をすることができます。BAPIは汎用モジュールなのでT-CODE:SE37で確認することができ、汎用モジュール名は”BAPI_”から始まります。
ちなみに、BAPIにはデータ更新だけではなくデータ取得するだけのものも準備されています。
ボタン配置と固有の処理
処理実行の画面上でボタンを配置し、そのボタンが押下されたら他の処理を実施するということも可能です。
例えば、
選択画面で条件指定→ALVで一覧を表示→ALVで選択したレコードに対して処理を実施
といったことも可能となります。
最後に
ABAPでできることのイメージが湧きました!
まだ自信は無いですが、いくつか機能を設計すれば慣れそうな気がします!
よりABAPのことを知りたければ、以下を参照するのじゃ。
今後もABAPのノウハウを更新していくぞい!
あわせて読みたい
SAP ABAPまとめ
ここではABAPのアレコレをまとめていくのじゃ! 【ABAPの基本】 【ABAP7.4以降の新構文】 【便利ツールプログラム】 【その他ノウハウ】 ABAP関連のまとめは以上じゃ!