#目的
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の入力が必要
##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
},
}
####GETでtokenを取得する
PUT・POST・DELETEメソッドを受け入れる設定を行ったので、リクエストを送ってみる
その前にGETリクエストでトークンを取得する必要があるので、
HTTPヘッダーに以下を追加し、リクエストを送信する
key | value |
---|---|
X-CSRF-Token | Fetch |
レスポンスヘッダーの"x-csrf-token"項目からtokenが取れるので、
それをコピーしてまずPOSTを試してみる
####POSTメソッドでリクエスト(INSERT)
POSTのリクエストでデータのINSERTを行う
ヘッダーには以下を指定する
key | value |
---|---|
x-csrf-token | Fetchで取得したトークン |
Content-Type | application/json |
Bodyには挿入するデータをJSON形式で記載
{
"ID": "99"
"NAME":"TEST"
}
####PUTメソッドでリクエスト(UPDATE)
PUTのリクエストでデータのUPDATEを行う
HTTPヘッダー等はPOSTと同じだが、UPDATEを行うために単一行を指定する必要がある
今回はPOSTで挿入したデータを更新してみるので、URLの/makerdataの後ろに主keyのIDを追加
https://<作成したHANAホスト>.hanatrial.ondemand.com/demo/demo.xsodata/makerdata(99)
PUTをおこなってからGETリクエストを行うと更新されていることが確認できる
####DELETEメソッドでリクエスト(DELETE)
DELETEのリクエストでデータのDELETEを行う
PUT同様に単一行を指定する
##さいごに
とりあえずCRUDできるODataサービスになったので、
次はこれを使ってSAP UI5から呼び出してみる