LoginSignup
6
7

More than 3 years have passed since last update.

SAP Cloud PlatformのODataサービスでCRUD操作

Last updated at Posted at 2019-02-21

目的

SAP Cloud Platform上のテナントDBに作ったテーブルを
ODataサービスで公開したものをSAP UI5からCRUD操作したい

そのためにまずPostmanでCRUD操作ができるようにする

参考資料

テナントDBの作成、ユーザー権限設定、テーブル設定、OData作成までは以下を参考
https://blogs.sap.com/2018/07/13/sap-cp-trial%E7%92%B0%E5%A2%83%E3%81%AEhana-db%E8%A8%AD%E5%AE%9A/

ODataサービスからデータを取得する

ODataの操作は以下の通りHTTPMethodに対応しているのでデータ取得ならGETメソッドを使う

HTTP Method CRUD
GET SELECT
POST INSERT
PUT UPDATE
DELETE DELETE

参考資料の通りに作成したODataサービスからデータ取得方法

URLはSAP HANA Web-Based Development Workbench -> Editorでdemo.xsodataを実行した際のURLを使用する
↓のような感じ

https://<作成したHANAホスト>.hanatrial.ondemand.com/demo/demo.xsodata

URL末尾に/makerdataをつけることでDEMO_USER. MAKERMASTERのデータを表示
※.xsaccessで認証方法をBasicにしているため、テナントDBのUSER/PASSWORDの入力が必要

図1.png

ODataサービスを使って登録・更新・削除をする

登録・更新・削除はそれぞれPUT・POST・DELETEメソッドに対応しているが、
無邪気にリクエストを投げても403エラーが帰ってくる

XSアプリケーションの.xsaccessでPUT・POST・DELETEのメソッドが許可されていないので、
以下のように変更する

また、SAP UI5アプリケーションでのCRUD操作を想定してxhrFields項目を設定する
HTTPメソッドの許可だけではクロスドメインアクセスが行えないためWebアプリからのCRUDが実現できない

//変更前
{
    "exposed": true,
   //省略
    "prevent_xsrf": true,
   //省略
    "cors": [{
        "enabled": false
    }],

}
//変更後
{
    "exposed": true,
   //省略
    "prevent_xsrf": true,
   //省略
    "cors": [{
        "enabled": true,
        "allowMethods": ["GET","POST","PUT","DELETE","HEAD","OPTIONS"],
        "allowOrigin": ["*"], 
        "maxAge":"3600"
    }],
    "xhrFields" : {
        "withCredentials" : true
    },

}

図2.png

GETでtokenを取得する

PUT・POST・DELETEメソッドを受け入れる設定を行ったので、リクエストを送ってみる

その前にGETリクエストでトークンを取得する必要があるので、
HTTPヘッダーに以下を追加し、リクエストを送信する

key value
X-CSRF-Token Fetch

図1.png

レスポンスヘッダーの"x-csrf-token"項目からtokenが取れるので、
それをコピーしてまずPOSTを試してみる

POSTメソッドでリクエスト(INSERT)

POSTのリクエストでデータのINSERTを行う
ヘッダーには以下を指定する

key value
x-csrf-token Fetchで取得したトークン
Content-Type application/json

3.png

Bodyには挿入するデータをJSON形式で記載

{
    "ID": "99"
    "NAME":"TEST"
}

スクリーンショット 2019-02-28 16.56.31.png

成功すると201 Createdが返却される
4.png

PUTメソッドでリクエスト(UPDATE)

PUTのリクエストでデータのUPDATEを行う
HTTPヘッダー等はPOSTと同じだが、UPDATEを行うために単一行を指定する必要がある

今回はPOSTで挿入したデータを更新してみるので、URLの/makerdataの後ろに主keyのIDを追加

https://<作成したHANAホスト>.hanatrial.ondemand.com/demo/demo.xsodata/makerdata(99)

成功すると204 No Contentが返却される
5.png

PUTをおこなってからGETリクエストを行うと更新されていることが確認できる
スクリーンショット 2019-02-28 17.18.58.png

DELETEメソッドでリクエスト(DELETE)

DELETEのリクエストでデータのDELETEを行う
PUT同様に単一行を指定する

成功すると204 No Contentが返却される
6.png

GETで消えたことを確認するとこうなってる
7.png

さいごに

とりあえずCRUDできるODataサービスになったので、
次はこれを使ってSAP UI5から呼び出してみる

6
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7