ODataが見つからないなら登録を|SAPのWeb API登録手順

ODataAPIが使えないときは登録しよう

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アクセスできるようになる。

比較項目BAPIOData API
プロトコルRFC(Remote Function Call)HTTP / HTTPS
呼び出し元ABAP、SAPクライアントツールブラウザ、Postman、外部システム全般
確認方法T-CD: SE37T-CD: /IWFND/MAINT_SERVICE
「存在」と「使える」の関係存在すれば基本的に使える登録・有効化が必要
管理の場所ABAPワークベンチSAP Gateway
認証SAP認証情報(RFC)BasicAuth / OAuth2.0 / SAML
BAPI vs OData API

この違いを理解しておくと、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_ADMINS/4HANAの新機能向けAPIに多い

OData APIを登録する手順

それでは、実際に API_PURCHASEORDER_PROCESS_SRV を登録する手順を追っていこう。

STEP
/IWFND/MAINT_SERVICE を起動する

SAP GUIのコマンドフィールドに /IWFND/MAINT_SERVICE と入力して実行する。

「Service Catalog Maintanance」画面が表示される。

画面には、現在このシステムに登録されているODataサービスの一覧が表示されている。ここに API_PURCHASEORDER_PROCESS_SRV が表示されていれば登録済みだ。表示されていなければ、これから登録作業を行う。

/IWFND/MAINT_SERVICE の初期画面
STEP
サービスを追加する

画面上部にある 「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」で構わない。

サービス追加画面

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

APIが登録された
STEP
登録されたことを確認する

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

サービスが登録された一覧画面
STEP
ICFノードを有効化する

サービスを追加しただけでは、まだHTTPアクセスは受け付けられない。ICF(Internet Communication Framework)ノードの有効化が必要だ。

サービス一覧の API_PURCHASEORDER_PROCESS_SRV の行を選択した状態で、画面左下の 「ICF ノード」 ボタンをクリックし、「有効化」を選択する。

「Status」列の信号が(アクティブ)になっていれば、登録は成功だ。

ICFノードの有効化完了

登録したら動くかチェック|/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 と入力して実行する。

GW_CLIENT の初期画面

サービスドキュメントを確認する

OData APIが正常に登録・有効化されているかを確認する最も簡単な方法は、サービスドキュメント($metadata) を取得することだ。

要求URL」フィールドに以下のURLを入力する。

/

HTTPメソッドは GET のまま、「実行」ボタンを押す。

HTTP応答」欄にXML形式のメタデータが返ってくれば、APIは正常に稼働している。

$metadataが正常に返却された画面

エンティティセットを呼び出してみる

動作確認の仕上げとして、実際にデータを取得してみよう。

購買発注のヘッダ情報を取得するリクエストは以下だ。

/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV/A_PurchaseOrder?$top=5

$top=5 は「最大5件取得」を意味するODataのシステムクエリオプションだ。BAPIの MAXROWS パラメータに近い発想と言えるかもしれない。

実行後、レスポンス欄にJSON(またはAtom/XML)形式の購買発注データが5件返ってくれば、APIは完全に利用可能な状態だ。

A_PurchaseOrderエンティティセットのレスポンス画面

エラーが出たときのチェックポイント

/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 を例に解説した。

要点をまとめよう。

登録の流れ
  1. /IWFND/MAINT_SERVICE を起動
  2. 「Add Service」からSystem Alias LOCAL を選択し「Get Services」
  3. API_PURCHASEORDER_PROCESS_SRV を検索・選択して追加
  4. ICFノードを有効化
  5. /IWFND/GW_CLIENT で $metadata および実データ取得を確認
BAPIとの最大の違い
  • BAPIは「存在すれば使える」。
  • ODataは「登録・有効化して初めて使える」。
環境ごとの作業

ODataのサービス登録・有効化は移送対象外のため、開発機・検証機・本番機の各環境で個別に実施する。
Go-Live手順書への明記を忘れないようにすべし。


ODataの検索方法やAPIの探し方については、以下の関連記事を参照してほしい。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次