【SAPUI5】OData(5) SAPでのODataサービスの作り方 開発編-1

##はじめに
今回は、SAPでの実際のODataサービスの作り方について紹介したいと思います。
残念ながら開発環境がないので、以下のページを参考にしながらステップをまとめます。
画像はすべて下記ページからの引用です。
[OData and SAP Netweaver Gateway. Part II. Create your first OData Service](http://www.sapyard.com/odata-and-sap-netweaver-gateway-part-ii-create-your-first-odata-service/)

※OData関連の投稿一覧は以下の記事をご参照ください。
[【SAPUI5】OData(1) ODataとは](https://qiita.com/tami/items/411a226d1ea6bb25b5f1)

##ステップ
1. SAP Gateway Service Builderでプロジェクトを作る
2. Entity Typeを定義する
3. ODataサービスを生成する
4. ODataサービスを有効化する
5. サービスをテストする

###1. SAP Gateway Service Builderでプロジェクトを作る
[SAP Netweaver Gatewayの導入パターン](https://qiita.com/tami/items/a87a6f67be928c78e4e8)によって、HubまたはバックエンドでODataサービスを開発します。
トランザクションコード：SEGWでSAP Gateway Service Builderを実行し、プロジェクトを登録します。
プロジェクト=ODataサービスの単位となります。
登録時点では、以下のように空のフォルダが作られています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/81df171e-6089-fe94-b1a8-20d6e1d060c9.png)

###2. Entity Typeを定義する
構造を一から定義することもできますが、ここでは既存のDDIC構造を参照して登録します。
Data Modelの上で右クリックして、EKKO（POHeader）の構造をインポートします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/273ec67b-659c-08e5-d6bb-5a2e2f45460f.png)

構造から必要な項目だけを選択し、キーを指定します。
インポートの結果、以下のようにEntity Type, Entity SetとService Implementationが追加されます。
Service Implementationとは、データに対する処理ロジックです。（この時点ではガラだけで中身はありません）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/bc779a6e-aa92-edc1-b6a4-b42f82fa1444.png)

同様にしてEKPO（POItem）のEntity Typeも登録します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/5ed7f575-ef33-9e32-9c92-0c271ae8622b.png)

###3. ODataサービスを生成する
実際のODataサービスではNavigation Propertyやデータ取得処理が必要なのですが、ここまでのところで一旦ODataサービスを生成します。
生成ボタン(1)を押すと、ポップアップが出てきます。
Model Provider ClassとData Provider Classの名前が提案されます。
また、Technical Model Name, Technical Service Nameも提案されます。
Technical Service Nameが、ODataサービスを外部に公開する際のサービス名となります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/7092424b-5bbd-433a-e250-20fe9c34ff21.png)

####Model Provider ClassとData Provider Classとは
Model Provider Class(MPC)はODataのモデルを定義したもので、あまりこちらに手を入れることはないようです。
Data Provider Class(DPC)はデータに対するCRUDの処理やファンクションを定義します。
DPCのExtention Classに処理を書いていくことになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/2d7c5eab-1ade-eb7f-f2e5-298782b2651e.png)

###4. ODataサービスを有効化する
有効化の方法はSAP Netweaver Gatewayの導入パターンによって変わります。
Embedded Deploymentの場合、SAP Gateway Service Builderから直接有効化します。
Hub Deploymentの場合はHub側から有効化します。
参考にした手順はHub Deploymentなので、Hub側での有効化となります。
トランザクションコード：/IWFND/MAINT_SERVICEでActivate and Maintain Servicesの画面を開き、新しく作成したサービスをサービスカタログに追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/3289944e-4ffd-0f00-dfeb-0ace7f0fb088.png)
結果、以下のようにサービスカタログに追加されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/2d5e59fa-8d98-950d-7690-4587dd77e819.png)

###5. サービスをテストする
上の画面で左下の"SAP Gateway Client"ボタンを押して実行します。（またはトランザクションコード：/IWFND/GW_CLIENT）
うまくいけば、以下のようにステータスコード200が返ってきます。
※権限のエラーが出る場合があるようです。エラーが出た場合の対処は参考元のページをご参照ください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/4ec16616-ec8a-7ea9-fb10-106535c5dca4.png)

Request URIの欄のアドレスの末尾に"$metadata"を追加すると、Entity TypeとEntity Setが表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/276021/c0e4ce25-be51-5fb2-4ef8-fcd663d2b050.png)

##参考
[OData and SAP Netweaver Gateway. Part II. Create your first OData Service](http://www.sapyard.com/odata-and-sap-netweaver-gateway-part-ii-create-your-first-odata-service/)
[Model provider class and data provider class](https://archive.sap.com/discussions/thread/3554185)

##関連記事
[OData(4) SAPでのODataサービスの作り方 環境編](https://qiita.com/tami/items/a87a6f67be928c78e4e8)
[OData(6) SAPでのODataサービスの作り方 開発編-2](https://qiita.com/tami/items/81dd4e185ffbc42113fa)