SAPシステムでOData APIを使おうとしたとき、「なぜかアクセスできない」「エラーになる」という経験はないだろうか。
BAPIなら T-CD: SE37 でさっと検索して確認できる。しかし OData APIは、そもそもシステムに「登録」されていなければ使えないという、BAPIにはない手順が一つある。
本記事では、SAP S/4HANAにOData APIを登録するためのトランザクションコード /IWFND/MAINT_SERVICE の使い方を、実際の画面キャプチャとともにわかりやすく解説する。
モチーフとなるAPIは、購買発注を処理する標準OData API: API_PURCHASEORDER_PROCESS_SRV だ。
ODataそのものの概念や、APIの検索方法については以下の記事で解説しているので、そちらを参照してほしい。

ODataが使えない原因は「サービス未登録」かもしれない
BAPIとODataの決定的な違い
BAPIに慣れ親しんでいる読者なら、目的のBAPIの確認・テストにSE37を活用するはずだ。
BAPIはSAP ABAPの汎用モジュールとして実装されており、システムにインストールされていれば SE37 で即座に確認・実行できる。「存在すれば使える」という、シンプルな仕組みだ。
一方、OData APIは異なる。
ODataはHTTPプロトコルを使ってSAPの外から呼び出すWeb APIである。そのため、SAP Gateway(ICF:Internet Communication Framework)を経由してHTTPリクエストを受け付ける仕組みを整える必要がある。
ここで必要になるのが、「ODataサービスの登録」というステップだ。
SAP S/4HANAには多数の標準OData APIが搭載されているが、それらは初期状態では必ずしも「使える状態」になっているわけではない。使いたいAPIを、Gatewayのサービスリストに明示的に登録し、ICFノードを有効化して初めて、外部からHTTPアクセスできるようになる。
| 比較項目 | BAPI | OData API |
|---|---|---|
| プロトコル | RFC(Remote Function Call) | HTTP / HTTPS |
| 呼び出し元 | ABAP、SAPクライアントツール | ブラウザ、Postman、外部システム全般 |
| 確認方法 | T-CD: SE37 | T-CD: /IWFND/MAINT_SERVICE |
| 「存在」と「使える」の関係 | 存在すれば基本的に使える | 登録・有効化が必要 |
| 管理の場所 | ABAPワークベンチ | SAP Gateway |
| 認証 | SAP認証情報(RFC) | BasicAuth / OAuth2.0 / SAML |
この違いを理解しておくと、OData利用時のトラブルの原因切り分けが格段にスムーズになる。
「存在しない」のか「登録されていない」のかを切り分ける
OData APIが使えないとき、原因は大きく2つに分類される。
- ① APIがシステムに存在しない
-
- SAPのバージョンやサポートパッケージが古い、またはアドオン未適用の場合
- T-CD:
/IWBEP/V4_ADMIN(V4の場合)または/IWFND/MAINT_SERVICEで検索して確認
- ② APIは存在するが、登録・有効化されていない
-
- 本記事のメインテーマ
/IWFND/MAINT_SERVICEでサービス追加・ICFノード有効化を行えば解決
今回扱う API_PURCHASEORDER_PROCESS_SRV は SAP S/4HANA の標準APIとして提供されているため、S/4HANAが導入済みであれば「存在」はしている。問題になるのは「登録されているかどうか」だ。
/IWFND/MAINT_SERVICE とは何か
SAP Gateway のサービス管理画面
/IWFND/MAINT_SERVICE(正式名称:Gateway Service Activation and Maintenance)は、OData V2サービスをSAP Gatewayに登録・管理するためのトランザクションである。
BAPIで言えば SE37 に相当するが、役割は「検索・実行」ではなく「有効化・管理」に特化している点が異なる。
このトランザクションで行える主な操作は以下の通りだ。
- ODataサービスのサービスリストへの追加(登録)
- ICFノードの有効化・無効化
- サービスの削除・保守
- ログ・エラーの確認
- /IWFND/GW_CLIENT からのテスト呼び出し
V2とV4で使うトランザクションが異なる
SAP ODataにはバージョン2(OData V2)とバージョン4(OData V4)が存在する。/IWFND/MAINT_SERVICE が対象とするのは OData V2 のサービスである。
OData V4を管理する場合は、別のトランザクション /IWBEP/V4_ADMIN を使用する。
API_PURCHASEORDER_PROCESS_SRV はOData V2として提供されているため、本記事では /IWFND/MAINT_SERVICE を使用する。
| バージョン | 管理T-CD | 備考 |
|---|---|---|
| OData V2 | /IWFND/MAINT_SERVICE | 本記事の対象 |
| OData V4 | /IWBEP/V4_ADMIN | S/4HANAの新機能向けAPIに多い |
OData APIを登録する手順
それでは、実際に API_PURCHASEORDER_PROCESS_SRV を登録する手順を追っていこう。
SAP GUIのコマンドフィールドに /IWFND/MAINT_SERVICE と入力して実行する。
「Service Catalog Maintanance」画面が表示される。
画面には、現在このシステムに登録されているODataサービスの一覧が表示されている。ここに API_PURCHASEORDER_PROCESS_SRV が表示されていれば登録済みだ。表示されていなければ、これから登録作業を行う。

画面上部にある 「Add Service(サービスを追加)」 ボタンを押す。

「選択済みサービスの追加」画面が表示される。
「システムエイリアス」と「技術サービス名」に値を入力し、[Enter]を押下。
- システムエイリアス
-
ODataサービスが実装されているバックエンドシステムを指定する。
通常は”LOCAL“を指定する。 - 技術サービス名
-
目的のAPI(この例は API_PURCHASEORDER_PROCESS_SRV )を入力する。

Embedded Gateway vs Hub Gateway
SAP Gateway は S/4HANA に組み込まれた「Embedded Gateway」構成と、独立したサーバーに設置する「Hub Gateway」構成がある。
・Embedded Gateway(一般的):System Alias = LOCAL
・Hub Gateway:System Alias = バックエンドのS/4HANAを指すRFC接続先
「サービス追加」画面が表示される。
「パッケージ割当」は、移送を行わないので「$TMP」で構わない。

入力したら「続行」ボタンを押下。

/IWFND/MAINT_SERVICE の初期画面に戻り、サービス一覧に API_PURCHASEORDER_PROCESS_SRV が表示されていることを確認する。

サービスを追加しただけでは、まだHTTPアクセスは受け付けられない。ICF(Internet Communication Framework)ノードの有効化が必要だ。
サービス一覧の API_PURCHASEORDER_PROCESS_SRV の行を選択した状態で、画面左下の 「ICF ノード」 ボタンをクリックし、「有効化」を選択する。
「Status」列の信号が緑(アクティブ)になっていれば、登録は成功だ。

登録したら動くかチェック|/IWFND/GW_CLIENT
登録・有効化が完了したら、実際にAPIが応答するかどうかを確認しよう。外部ツール(PostmanやcurlなどのRESTクライアント)を使ってもよいが、SAP GUI上で手軽に確認できるトランザクション /IWFND/GW_CLIENT を使うのが最もスピーディーだ。
/IWFND/GW_CLIENT は、BAPIで言えば SE37 の「テスト/実行」に相当する機能をOData向けに提供するツールである。HTTPリクエストをSAP GUI上から発行でき、レスポンスをその場で確認できる。
/IWFND/GW_CLIENT の起動
SAP GUIのコマンドフィールドに /n/IWFND/GW_CLIENT と入力して実行する。

サービスドキュメントを確認する
OData APIが正常に登録・有効化されているかを確認する最も簡単な方法は、サービスドキュメント($metadata) を取得することだ。
「要求URL」フィールドに以下のURLを入力する。
/
HTTPメソッドは GET のまま、「実行」ボタンを押す。
「HTTP応答」欄にXML形式のメタデータが返ってくれば、APIは正常に稼働している。

エンティティセットを呼び出してみる
動作確認の仕上げとして、実際にデータを取得してみよう。
購買発注のヘッダ情報を取得するリクエストは以下だ。
$top=5 は「最大5件取得」を意味するODataのシステムクエリオプションだ。BAPIの MAXROWS パラメータに近い発想と言えるかもしれない。
実行後、レスポンス欄にJSON(またはAtom/XML)形式の購買発注データが5件返ってくれば、APIは完全に利用可能な状態だ。

エラーが出たときのチェックポイント
/IWFND/GW_CLIENT でエラーが返ってきた場合は、以下を確認しよう。
| エラー内容 | 考えられる原因 | 対処 |
|---|---|---|
| HTTP 404 | サービス未登録、またはURLタイポ | /IWFND/MAINT_SERVICE で登録確認 |
| HTTP 403 | 権限不足 | SU53で不足権限を確認し、ロール追加 |
| HTTP 401 | 認証エラー | ユーザー・パスワードを確認 |
| ICFエラー | ICFノードが非アクティブ | SICFでノードを有効化 |
| データが0件 | 登録データが存在しない | 条件を変えて再確認($filterなど) |
登録はシステム環境ごとに必要
ここで一つ注意点を述べておきたい。
/IWFND/MAINT_SERVICE でのODataサービス登録は、移送(Transport)の対象外である。つまり、開発環境・品質保証環境・本番環境それぞれで、同じ手順を繰り返す必要がある。
APIは移送不要だが、環境ごとに設定が必要
BAPIはABAPオブジェクトとして移送できるが、ODataのサービス登録(ICFノードの有効化)は環境ごとの設定であり、移送の対象外だ。開発・品質保証・本番のそれぞれの環境で登録作業を行う必要がある。
BAPIに慣れた読者は「移送すれば本番に反映されるのでは?」と思うかもしれない。しかし、ODataのサービス登録はABAPオブジェクトではなくシステム設定(ICF設定)であるため、環境固有の設定として扱われる。
プロジェクトにおいては、本番Go-Live手順書にODataサービス登録作業を明示的に記載しておくことを強く推奨する。
現場でよく見かけるミスとして、「開発環境では動いていたのに、本番ではAPIが使えなかった」というケースの多くが、このサービス未登録に起因している。
まとめ|ODataが使えないときは /IWFND/MAINT_SERVICE
本記事では、SAP S/4HANAにOData APIを登録する手順を、API_PURCHASEORDER_PROCESS_SRV を例に解説した。
要点をまとめよう。
- 登録の流れ
-
/IWFND/MAINT_SERVICEを起動- 「Add Service」からSystem Alias
LOCALを選択し「Get Services」 API_PURCHASEORDER_PROCESS_SRVを検索・選択して追加- ICFノードを有効化
/IWFND/GW_CLIENTで$metadataおよび実データ取得を確認
- BAPIとの最大の違い
-
- BAPIは「存在すれば使える」。
- ODataは「登録・有効化して初めて使える」。
- 環境ごとの作業
-
ODataのサービス登録・有効化は移送対象外のため、開発機・検証機・本番機の各環境で個別に実施する。
Go-Live手順書への明記を忘れないようにすべし。
ODataの検索方法やAPIの探し方については、以下の関連記事を参照してほしい。



コメント