Technical Articles
How to find an API on SAP S/4HANA OP (JA)
<<English version is here>>
1.はじめに
本ブログは、How to extend SAP S/4HANA with SAP Cloud Platformのブログシリーズの第2回として、SAP S/4HANA on-premiseのAPIを探すための方法について解説します。
- SAP Cloud Platformでの拡張開発概要
- SAP S/4HANAのAPIの探し方 <<<<HERE
- SAP S/4HANAのAPIの使い方
- APIが存在しない場合の対応
- SAP S/4HANAとのイベント連携
前回のブログにあるとおり、S/4HANAの拡張には、In-App拡張、Side-by-Side拡張の2種類の方式があります。Side by Side拡張の場合、Java、JavaScript(Node.js)、Python等で開発したアプリケーションをSAP Cloud Platform上で動かし、S/4HANAに対してはAPI(Application Programming Interface)経由で連携します。そのため、S/4HANAの中にどんなAPIが存在し、どのように使うのかを調べることが必要になってきます。
2.SAP S/4HANAのAPIの種類
現在主流となっているSAP S/4HANAのAPIはODataベースのものかSOAPベースのものになります。それぞれのAPIの特徴を一つ一つみていきましょう。
OData はRESTベースの標準プロトコルで、正式名称はOpen Data Protocolと言います。従来Microsoftがメインで推進していましたが、2014年にOASIS標準になりました。今現在のSAP S/4HANAのAPIは大部分がOData V2ベースです。RESTプロトコルなので、各OData APIのCRUD(Create, Read, Update, Delete)がHTTPのPOST,GET,PUT,DELETEに対応しています (一部ReadのみのAPIなどもあり)。最新のS/4HANA APIは大部分がODataで作られていることもあり、まずはODataのAPIを探すのが良いでしょう。
SOAPは2000年代に流行したWeb Serviceのプロトコルで、現在でも使われています。当時SOA(Service Oriented Architecture)の中核技術として重宝されたという経緯もあり、S/4HANAの中にもSOAPベースのAPIが多く存在しています。HTTPSをベースにしている点ではODataと同じですが、HTTP Bodyの中に、SOAP EnvelopeというXMLの器を持ち、その中にさらにコンテンツとなるXML(SOAP Body)を入れてあげる必要があります。WSDL(Web Service Description Language)というメタデータ定義の記述ファイルを利用してSOAP Clientを生成させて利用することが多いです。
今回ご紹介するSAP API Business Hubに存在しているAPIは大部分がODataかSOAPの形式で提供されています。
また、SAP R/3やSAP ECCの時代から長く使われているレガシーAPIとして位置付けられているものにBAPIとIDocがあります。これらはSAP API Business Hubには記載されておらず、各S/4HANAのシステム内やオンラインヘルプ等で確認することが必要になります。
BAPI(正式名称Business Application Programming Interface)はSAPの汎用モジュールと呼ばれる関数の形式で実装されているレガシーAPIです。外部からはRFC(Remote Function Call)と呼ばれるSAP独自プロトコルで呼び出すことが可能です。JavaからBAPIを呼び出したい場合、JCo(ジェイコと発音します。正式名称Java Connector)と呼ばれるWrapperライブラリを利用し、.Netからは.Net Connector(=NCoエヌコ)を利用することが可能です。BAPIは論理的にBusiness Object*(受注伝票、品目マスタ等、伝票やマスタなどS/4HANAで定義されているのオブジェクト) のメソッドとして定義されています。
* BIツールのBusinessObjectsとは無関係
IDocはIntermediate Documentの略で、日本語では中間文書と書かれている場合もあります。
もともとIDocは様々なEDIフォーマットに対応するための中間ファイルフォーマットを定義し、外部ミドルウェア等でIDocデータと取引先で利用されるフォーマットとの変換をすることでデータ交換を実現するという技術でした。そのため、今現在でもIDocは受発注のB2Bシナリオなどでよく使われています。IDocの技術は従来のファイルベースのものが徐々に拡張され、RFCやSOAP、素のHTTPなどで直接データの吐き出しや取り込みができるように進化しました。特にSAPシステム間でRFC接続しIDocデータを交換する技術はALE(Application Link Enabling)と呼ばれていました。もともと固定長のデータフォーマットを想定していたこともあり、データ構造にはすこしクセがあります。基本的にフォーマットのマッピングを必要とするため、SAP Process IntegrationやSAP Cloud Platform Integrationと一緒に使われることも多いです。
3.OData APIの検索
SAP API Business Hubにアクセスして情報を収集します。
SAP S/4HANAだけでなく、SAP Concur、SAP SuccessFactorsなどのLoBソリューションを含む各種アプリケーションのAPI情報はSAP API Business Hubに集約されてきています。
このサイトではAPIの検索、情報の確認、テスト等を行うことが可能です。
ただし、API Business Hubは基本的にはCloud Solutionをターゲットに開発されたので、On-Premiseシステム向けで利用できることは限定的です。
例として、SAP S/4HANA On-Premiseの受注伝票を登録するAPIを探したい場合を考えてみます。
まず、左側のSOLUTIONSにS/4HANA CloudとS/4HANAがあります。
Detailsタブをクリックすると以下のような画面が表示されます。
ここで以下のような文言が書かれていることからも分かる通り、残念ながら、2020年4月現在SAP S/4HANA(On-Premise)のAPI群はAPI Business Hubには記載されていません。
Note: SAP S/4HANA APIs are not currently on the SAP API Business Hub but will be available in an upcoming release.
今現在API for SAP S/4HANAというPDFファイルにはS/4HANA On-PremiseシステムのどこでAPIが確認できるかなど、概要のみの記載となっています。なお、SAP Labs JapanとしてSAP S/4HANA On-Premise用の情報を、S/4HANAバージョンの情報と共にAPI Business Hubに載せるように働きかけています。
ここでいうS/4HANA CloudとはS/4HANA Cloud ES (Essentials Edition=旧Multi-Tenant Edition)のことです。
https://blogs.sap.com/2019/08/22/sap-s4hana-cloud-and-on-premise-deployment-options/
リリースサイクルとしてSAP S/4HANA Cloud ESは四半期に1回ずつ新しいバージョンに更新されます。一方S/4HANA On-Premiseのソフトウェアをベースにしたソリューション(SAP S/4HANA Cloud EX*やHEC含む)は年に1回新しいバージョンが出てきます。
新しいAPIを含む、各種新機能は最初にS/4HANA Cloud ES側で更新され、その後S/4HANA On-Premiseの新リリースには同様の機能が反映されることが多いです。そのためS/4HANA Cloud側に新しくAPIが追加されると基本的には遅れてS/4HANA On-Premise側にも新リリースでAPIが追加されます。
このようにS/4HANA On-Premiseは年に1回新バージョンがでているので、1709では利用できなかったものが1809で使えるという場合があります。
*S/4HANA Cloud EX:S/4HANA Cloud Extended Editionのこと旧名称S/4HANA Cloud Single Tenant Edition(STE)
受注伝票の登録がしたいので、Sales Orderと入力して検索します。
多くのAPIの最後に(A2A)、 (B2B) 、(A2X)などサービスカテゴリが付いていることがわかります。
- A2A (Application to Application):企業内のシステムからシステムへデータを交換する
- B2B (Business to Business):企業間のシステムからシステムへデータを交換する
- A2X (Application to X user or Application to Cross Application):UI等経由でアプリケーションを利用してもらうためのAPI
https://wiki.scn.sap.com/wiki/display/HOME/Abbreviations+in+SOA
ODataのAPIをシステム間のデータ交換のために利用することも技術的には可能ですが、SOAPと比較してUIからの直接利用がしやすいため、A2Xのカテゴリがついている場合が多いです。なお、どのカテゴリもついていないAPIも多く存在します。
上記画面のタイルでSales Order (A2X)をクリックすると以下のような画面になります。
このAPI ReferencesタブではAPIの仕様を確認するととともにテストをすることができます。
本来はここのConfigure Environmentsを押すことで自社のシステムに接続してテストをすることもできるのですが、API Business Hubが基本的にクラウドソリューションを想定しているため、外のインターネットからHTTPでそのままアクセスできるような環境である必要があります。
On-Premiseシステムの場合基本的に企業内ネットワークでのみ利用可能だと思いますので、今回はSandbox環境をそのまま利用します。
Try outボタンを押します。
$topに3を入れて3件だけsandboxシステムからgetしてみます。
明細や取引先の情報も同時に照会するために、$expandにto_Itemとto_partnerを選択してExecuteを押します。
確かにHTTPリターンコード200(成功)で受注伝票の結果が3件返ってきました。
to_itemのところには明細情報も含まれています。
データとしては自分の想定する受注伝票のデータだったことが確認できました。
また、POSTがあるので、データの登録が可能なことがわかります。
DetailsタブではこのAPIの情報や文書にアクセスできます。
ここでURLや認証の情報、紐づくBusiness Objectの情報などが確認できます。
Business DocumentationをクリックするとS/4HANA Cloud (ES)の情報が表示されます。
いまのところS/4HANA On-Premiseの文書への直接リンクはないので、
API_SALES_ORDER_SRVという技術情報を使ってhelp.sap.comで検索してみましょう。
まず、S/4HANAというキーワードでOn-PremiseのS/4HANAを探します。
次のページで自分の調べたいバージョン(下図では1909)を選択し、技術名称のキーワード(下図ではAPI_SALES_ORDER_SRV)を入れます。
なお、同様のことをSAP S/4HANA 1709で行うと1709時点ではReadしかでてこないため、読み込みしかないできないことがわかります。
4.SOAP APIの検索
会計伝票の登録のAPIを探すケースを確認します。
API Business HubのS/4HANA CloudでJournal Entryというキーワードを使って検索します。
現在会計伝票登録のOData APIは存在せず、SOAPのAPIだけのようです。
同期(Synchronous)と非同期(Asynchronous)の2種類があるので今回は同期(Synchronous)のものをクリックします。
ここでWSDL(Web Service Description Language-SOAPメッセージのメタデータを定義するファイル)をダウンロードすることができます。
リンクしているhelpはS/4HANA Cloud (ES)のものなので、On-Premiseでも存在しているかチェックしてみます。
まず、S/4HANA On-PremiseのHelpに技術名称を入力して検索してみましたが残念ながらhelpは出てきませんでした。
次にありそうな名前+APIで検索するとなんらかでてきたので利用できそうです。
まずはこのようにあたりをつけるのが第一歩です。
5.実システムでODataやSOAPのテスト
本当にそのAPIが自分たちの要件を満たすかチェックするためには、実際のS/4HANAシステムに入って確認することも必要になります。
ODataの場合t-code /IWFND/MAINT_SERVICEで確認します。
該当のサービスがない場合は上部のAdd Serviceボタンから追加。
左下のCall Browserボタンから照会系だけであればブラウザで確認できます。
POST/PUT/PATCHなど更新系を試すにはSAP Gateway Clientを使うか、Postman等の外部ツールからテストをする必要があります。
こちらもテストツールで動きを確認できます。
6.BAPIやIDocの検索や確認
BAPIの確認
もしも更新系のODataが存在しない場合、該当するBAPIが存在しないかチェックすることも必要になる場合があります。
この場合、実際のシステムに入り、t-code BAPIからBAPI Explorerにアクセスできます。
BAPI ExplorerではBAPIはBusiness Objectに紐づく形で検索できます。
IDocの場合
ALEシナリオはOnline HelpのLibrary of ALE Business Processesで探したものにまとまっています。これは主にSAP ERP(SAP R/3)同志の連携シナリオ(マスタデータ配信など)の情報があります。
t-code WE60ではIDocタイプの型情報が確認できます。
他システムとのIDoc連携はSAP Cloud Platform Integrationのコンテンツにも含まれています。
7.さいごに
これまで見てきたように、SAP S/4HANA On-PremiseにはOData、SOAPのような比較的新しいAPIと、SAP R/3の時代から存在しているBAPIやIDocのようなAPIが並存しています。
SAP Cloud Platform上にUIやアプリケーションを構築してS/4HANAと連携したい場合は、まずOData APIがないか確認することがおすすめです。後続ブログでも説明予定ですが、OData APIはSAP Cloud SDKというライブラリから利用可能で、非常に使いやすいことや、JSONベースのRESTサービスなのでそのままUIからもサーバサイドロジックからも利用しやすいことなどがそのおすすめの理由です。
もしも標準のOData APIが存在しない場合、SAP S/4HANAの中でカスタムODataを開発することも考えられますが、その際もSAP標準オブジェクトを更新するためにはABAPからS/4HANA内部でBAPIを利用する必要があります。
一方SOAPのAPIは直接UIから利用するシナリオよりも、サーバサイドのアプリケーションから使われることが一般的です。WSDLからSOAP Client (Stub)を生成することが可能ですので、SAP Cloud Platform Cloud Foundryで動くアプリケーションをJava等で実装し、SAP S/4HANAシステムへSOAPメッセージを送信することができます。
IDocは当初EDI用に開発されたもので、非同期データ連携を目的としているので、SAP Cloud Platform Integration等と連携するのに利用されることが多いです。
SAP API Business HubにAPI関連の情報が集約してきていますが、On-Premiseシステムに関しては情報の更新が進んでいないのが現状です。そのため、今のところOnline Help等を併用して情報を収集することがもとめられますが、こちらに関しても、API Business Hubが更新されて、オンプレミスシステムに対応し次第こちらのブログもアップデートしていきます。今現在、ODataやSOAPはSAP S/4HANA Cloud (ES)の情報を確認し、そこからOn-Premiseで利用できるか確認するという方法が現実的な方法かと思います。
Hi Makoto,
As not everybody is fluent in Japanese, providing an English version would be a great idea.
どうもありがとうございました
+1 for an english version, please 🙂
+2
Dear Sugishita-san,
It seems that the API of SAP S / 4HANA (On-Premise) has been released.
https://api.sap.com/package/S4HANAOPAPI?section=Artifacts
Best regards,
Kenji Eimura
Right, I was thinking to update the one but was not able to find the time to work on it.
Thank you for the reminder.
助かりました。ありがとうございます。
いつも参考にさせていただいています。
現在、下記にアクセスするとSAP Bussiness Accelerator Hubが表示されます。
https://api.sap.com/
以前に検索出来ていたAPIを検索しても「Hey! We couldn't find any result matching your query.Would you like to tell us a little more about what you are looking for?」というメッセージが表示され、検索ができません。
何か操作が間違っているのでしょうか。