1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SAP Cloud Integration】BTP ABAP環境のODataサービスを呼ぶ

Last updated at Posted at 2021-12-05

はじめに

この記事では、BTP ABAP環境 (Trial)で作成したODataサービスをCPIから呼ぶ方法について説明します。一見簡単そうですが、認証の仕方がちょっと特殊なので、そこがこの記事のテーマとなります。

BTP ABAP環境での認証方法

BTP ABAP環境のODataサービスを呼ぶには、OAuth 2.0 Password Grant Typeを使い、ログインユーザとしてアクセスする必要があります。CPIのSecurity MaterialにはPassword Grantは用意されていないので、トークンを取得する処理を自分で実装する必要があります。
image.png

事前準備

トークンを取得するために、XSUAAのサービスインスタンスを作成しておきます。プランは"apiaccess"とします。
image.png

cf create-service xsuaa apiaccess <access_name> //サービスインスタンスの作成
cf create-service-key <access_name> <key_name>     //サービスキーの作成

Postmanから呼んでみる

呼び出すODataサービスは何でもよいですが、今回は自分で作ったサービスを呼んでみます。URLは、abap-trialのサービスキーの中にあるurlと、
image.png
"Service URL"に表示されている以下の部分を結合したものになります。
例:https://e70506aa-ddc0-435c-aab6-7abc40008538.abap.eu10.hana.ondemand.com/sap/opu/odata/sap/ZUI_A_SALESORDER_O2
image.png

1. トークンを取得

以下のパラメータを設定し、トークンを取得します。

項目 設定値
URL XSUAAのサービスキーに記載のurl + /oauth/token
ヘッダ Content-Type application/x-www-form-urlencoded
パラメータ grant_type password
username BTPログイン用のメールアドレス
password BTPログイン用のパスワード
client_id XSUAAのサービスキーに記載のclient_id
client_secret XSUAAのサービスキーに記載のclient_secret

image.png

2. サービスを呼ぶ

続いて、ODataサービスのメタデータを取得してみます。

項目 設定値
URL 上記で確認したURL + /$metadata
ヘッダ Authorization Bearer + 1.で取得したaccess_token

image.png

フローの作成

Postmanで確認した通り、BTP ABAP環境のODataサービスを呼ぶステップは大まかには以下になります。

  1. トークンを取得する
  2. ODataサービスを呼ぶ
    フローを見やすくするために、1.を別のフローとして作成し、2.のフローから呼び出す形とします。
    image.png

トークン取得用のフロー

以下がトークン取得用のフローです。
image.png

1. ProcessDirect

ProcessDirect Adapterは外部のフローからこのフローを呼びだすためのアダプターです。設定内容はアドレスのみです。
image.png

2. Set Header & Body [Content Modifier]

トークン取得用のエンドポイントに渡すヘッダとボディを編集します。

ヘッダにはcontent-typeとしてapplication/x-www-form-urlencodedを設定します。
image.png

ボディには固定値で以下を設定します。
username=<BTPログイン用のメールアドレス>&password=<BTPログイン用のパスワード>&client_id=<XSUAAのサービスキーに記載のclient_id>&client_secret=<XSUAAのサービスキーに記載のclient_secret>
image.png
※本来これらは直接フローに書かずにSecurity Materialから取得したほうがよいのですが、簡単にするためにベタ書きしています。

3. Get Token [HTTP Adapter]

以下のHTTPリクエストでトークンを取得します。
image.png

4. JSON to XML Converter

取得したトークンを次のステップで取得しやすくするため、レスポンスをXML形式に変換します。以下の設定はデフォルトのままです。
image.png

5. Extract Token [Content Modifier]

このフローは、最終的にボディにトークンを設定して返します。このために、このステップでは以下のことを行います。

  1. トークンをプロパティに格納
  2. プロパティからトークンを取得し、ボディに設定

トークンをプロパティに格納
XMLに変換しておいたので、XPathを使ってトークンにアクセスできます。
image.png

プロパティからトークンを取得し、ボディに設定
image.png

アウトプット

最初のProcessDirectを一時的にHTTPアダプターに変えてテストしてみると、以下のレスポンスが返ってきます。
image.png

メインのフロー

以下がメインのフローです。
image.png

1. HTTP Sender Adapter

HTTPリクエストでフローを呼ぶため、HTTP Sender Adapterを使用します。
image.png

2. Get Token [ProcessDirect]

トークン取得用のフローを呼びだします。
image.png

3. Set Headers

取得したトークン(ボディに入っている)を、AuthorizationヘッダにBearer <token>の形で設定します。
image.png

4. Call CAP OData [OData V2 Adapter]

RAPのODataサービスに対してGETリクエストを投げます。
image.png
Request Headersに前のステップで作成したAuthorizationを設定します。
image.png

アウトプット

フローをデプロイし、Postmanからリクエストを投げます。
image.png
以下のように結果が返ってくれば成功です。
image.png

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?