ABAP(Advanced Business Application Programming)は、SAPが自社の業務アプリケーションを開発するために作った言語です。1980年代に登場し、以来SAPシステムの実装言語であり続けています。
重要なのは、SAP標準の機能もすべてABAPで書かれているという点です。ユーザーはSE38やSE80から標準プログラムのソースコードを読むことができます。「この処理は内部で何をしているのか」を確認できることは、トラブルシューティングにおいて大きな武器になります。
ABAPが業務向けである意味
一般的なプログラミング言語では外部ライブラリに頼る機能が、ABAPには言語とランタイムに組み込まれています。
| 機能 | 内容 |
|---|---|
| Open SQL | DBの種類を意識せずにデータベースへアクセスできる |
| 内部テーブル | メモリ上の表形式データ構造が言語の基本型 |
| 画面(Dynpro) | 入力画面の定義と制御が標準機能 |
| 権限チェック | AUTHORITY-CHECK文で権限を検証できる |
| 多言語対応 | テキスト要素が言語別に管理される |
| 移送 | 開発物が自動的にトランスポートに記録される |
| ロック | ロックオブジェクトによる排他制御 |
追加開発の位置づけ
SAP導入では、標準機能で要件を満たせない部分を追加開発で補います。この追加開発は、性質によって分類されます。
| 略号 | 内容 | 例 |
|---|---|---|
| R(Report) | 帳票・レポート | 独自の集計表、法定帳票 |
| I(Interface) | 外部システム連携 | 銀行データ取込、EDI |
| C(Conversion) | データ移行 | 旧システムからのマスタ移行 |
| E(Enhancement) | 標準機能の拡張 | 入力チェックの追加 |
| F(Form) | 帳票フォーム | 請求書、発注書のレイアウト |
| W(Workflow) | 承認フロー | 購買承認、経費精算 |
標準を変更しない拡張の考え方
標準プログラムを直接書き換えること(モディフィケーション)は、原則として避けるべきです。SAPが提供するパッチや新バージョンを適用するたびに、変更が上書きされたり衝突したりするためです。
そのため、SAPは標準を変更せずに機能を追加するための仕組みを用意しています。
| 技術 | 世代 | 特徴 |
|---|---|---|
| ユーザーイグジット | 古い | SAPが用意した空のサブルーチンに実装 |
| カスタマーイグジット | 古い | CMODで有効化。機能グループ単位 |
| BAdI(クラシック) | 中間 | オブジェクト指向。複数実装が可能 |
| エンハンスメントフレームワーク | 新しい | ソースコードの任意箇所にフックを挿入 |
| 新BAdI | 新しい | エンハンスメントスポットに統合 |
ABAPの世代的変化
ABAPは長い歴史を持つ言語ですが、近年大きく進化しています。
- 手続き型ABAP:レポートとサブルーチン中心の古典的なスタイル
- ABAPオブジェクト(1999年〜):クラスとインタフェースによるオブジェクト指向
- ABAP 7.4以降:インライン宣言、コンストラクタ式、テーブル式など簡潔な記法
- ABAP Cloud(S/4HANA Cloud):公開APIのみを使う制限された開発モデル
プログラムの種類
| 種類 | 起動方法 | 用途 |
|---|---|---|
| 実行可能プログラム | SE38、Tコード | レポート、バッチ処理 |
| モジュールプール | Tコードのみ | 対話型の画面プログラム |
| 関数グループ | 呼び出し | 再利用可能な機能の集合 |
| クラスプール | 呼び出し | グローバルクラス |
| インクルード | 取り込み | ソースコードの分割 |
| インタフェースプール | 実装 | グローバルインタフェース |