はじめに

弊社はSAPの拡張開発に多く携わっています。
SAP BTPと、SAPが提供するSaaS(SAP SuccessFactors)やERPであるSAP S/4 HANAを連携するシステム開発にも関わっています。
案件事例については弊社案件実績をご覧下さい。
SAP BTPと、SAP SuccessFactorsやSAP S/4 HANAを連携する際、WebAPIであるODataで通信をしています。
ODataという統一された規格を用いることで、データ連携が容易になるので、今後のSAPの拡張開発を行う上で欠かせない通信技術になります。
今回はSAP SuccessFactorsの拡張開発として、人事や総務の申請機能を開発した経験をもとにODataについて説明します。
これからODataを触る方や、SAPクラウドの連携について概要を知りたい方の参考になれば幸いです。
ODataとは?

ODataとは?
OData(Open Data Protocol)とは、Microsoft社が策定したREST APIの標準プロトコルです。
HTTPを使用してWEBサーバー等とブラウザ等でデータのやりとりをするための手順などを定めています。
REST(ful)APIとは、以下のRESTの4原則に従ったAPIのことです。
- Uniform Interface:統一インターフェース
- Addressability:アドレス可能性
- Connectability:接続性
- Stateless:ステートレス性
ODataの特徴
ODataには主に以下のような特徴があります。
- URIでデータのアドレスを表現できる
- HTTPメソッド(GET/POST/PUT/DELETEなど)でデータの操作ができる
- JSONまたはXML形式でレスポンスを返す
リクエストについて
ODataにアクセスする際は、以下のように対象のデータをURIで指定し、HTTPメソッドによって操作します。

上記URIを実行した場合、「EmpJobというEntityから、最初の20件分のデータを取得する」というリクエストになります。
query optionsについて
主に利用可能なquery optionsは以下です。
$metadata
GET https://sandbox.api.sap.com/successfactors/odata/v2/EmpJob/$metadata
ODataサービスの注釈(データ構造など)がXML形式で取得できます
$count
GET https://sandbox.api.sap.com/successfactors/odata/v2/EmpJob?$count
リクエストに一致するデータの総数を返します
$filter
GET https://sandbox.api.sap.com/successfactors/odata/v2/EmpJob?$filter=seqNumber eq 1
リクエスト条件を指定します
$select
GET https://sandbox.api.sap.com/successfactors/odata/v2/EmpJob?$select=userId,startDate
要求したプロパティ等のみを返すよう、明示的に指定します
$orderby
GET https://sandbox.api.sap.com/successfactors/odata/v2/EmpJob?$orderby=startDate desc
サービスから返されるアイテムの順序を指定します
$expand
GET https://sandbox.api.sap.com/successfactors/odata/v2/EmpJob?$expand=departmentNav
関連Entityを指定することで、インラインで表示されます
レスポンスについて
データ操作したレスポンスは以下のようにJSONまたはXML形式で返ってくるので、あらゆるプログラミング言語間でデータの受け渡しが簡単にできます。
JSON形式の場合、リクエストについてのURIを実行すると、以下のように返ってきます。
{
"d": {
"results": [
{
"__metadata": {
"uri": "https://sandbox.api.sap.com/successfactors/odata/v2/EmpJob(seqNumber=1L,startDate=datetime'2010-01-01T00:00:00',userId='VictorK')",
"type": "SFOData.EmpJob"
},
"seqNumber": "1",
"userId": "VictorK",
"startDate": "/Date(1262304000000)/",
"occupationalLevels": null,
"workscheduleCode": "NORM",
"fgtsOptant": false,
"commitmentIndicator": null,
"effectiveLatestChange": true,
"endDate": "/Date(253402214400000)/",
まとめ
ODataでのデータ操作はSQLで言うと、SELECT/UPDATE/INSERT/DELETEなどのSQL文をHTTPメソッドとURIで表現し、WebAPIでデータ操作を行います。
そのため、HTTPで通信できれば、バックエンドとフロントエンドの言語が異なっていても問題ありません。
ODataを利用することであらゆるプログラミング言語であっても、統一された規格によって汎用的なデータ操作が可能となります。
ODataを利用するメリット・デメリット
ODataという統一された規格を用いることで容易にデータ連携が可能となります。
特に、SAPプロダクトではODataインターフェースが扱いやすいです。
しかしその制約において、特にSAP SuccessFactorsの標準APIでは、以下のようなデメリットもあります。
メリット | デメリット |
---|---|
①SAP SuccessFactors側で標準APIとして 用意されている ②CAPでDBへのアクセスを用意にAPI化できる ③SAP UI5でODataを元に画面を容易に作成できる | ①レスポンスが遅い場合がある ②さまざまなEntityからデータを取得し、 1つの画面で表示する場合には向いていない |
メリット
メリット①
SAP SuccessFactorsでは標準機能としてAPIが用意されているためSAP BTPと連携する際、ODataで容易に通信が可能となります。
例えばユーザ情報を取得したい場合は、Userエンティティにアクセスするだけで関連情報を取得することができます。
メリット②
SAP BTP上でODataサービスを開発する場合には、SAPの提供するCAP(SAP Cloud Application Programming Model)というフレームワークが利用できます。
CAPを利用することでJavaやNode.jsでアプリケーションとしてODataサービスが作成できます。CAPアプリケーションではSAP BTP上のHANA DBとのデータ連携を容易に行うことができます。
メリット③
SAP UI5では例えばSmart Tableのようなコントローラの場合、ODataを指定すればそのメタデータと構成に基づいて、少ないコードで簡単に画面を作成することができます。
SAP UI5のSmart Tableであれば、entitySetプロパティにテーブル上に表示したいODataを指定することで簡単にテーブルを作成できます。
デメリット
デメリット①
ODataはアクセス時にservice root URL配下のすべてのEntityを取得するので、metadataのサイズが大きくなりレスポンスが遅くなる場合があります。
SAP SuccessFactorsの拡張開発時には、SAP SuccessFactorsの仕様に合わせた結果、多くのAPIを呼び出すことになりレスポンスが遅くなりました。
その際はアプリ内で使用するEntityのみを指定するようにして、レスポンス改善を図りましょう。
デメリット②
1つのEntityからデータを取得し、1つの画面で表示する場合にはODataは向いていますが
ODataにはSQLでいうJoinのような考えがないので、関係性をしっかり定義しないといけません。
そのためさまざまなEntityからデータを取得し、1つの画面で表示する場合にはあまり向いておりません。
そのような場合には、独自でAPIを作成した方が良いでしょう。
最後に
このようにOData規格を用いることで、あらゆるプログラミング言語間でのデータ連携が容易となります。
設計段階でレスポンスやデータ取得方法について検討しておくことで、SAPのアドオン開発(拡張開発)におけるメリットが大きいです。
弊社での実際の案件事例として、SAP BTP上のアドオン開発においてSAP SuccessFactorsのODataサービスを通じたデータ連携を行なっております。
最後まで閲覧いただき、ありがとうございました。
投稿者プロフィール

-
Webアプリケーションの開発を中心としたシステム開発を経験しています。
現在はSAPBTP・SAPFioriを用いた開発案件を中心として、特にフロント部分のプログラムと、API関連の作り込みに従事しております。