Technology Blog Posts by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
yureshino
Product and Topic Expert
Product and Topic Expert
1,694

はじめに

SAP の連携ツールである SAP Integration Suite を使用して SAP Datasphere からデータを抽出するには、以下の2つの方法があります。本ブログでは①の方法について紹介します。

① SAP Datasphere の OData サービスを利用したデータ抽出(本ブログ)

② SAP Datasphere データベースユーザでの JDBCを利用したデータ抽出(別ブログにて記載)

2024-11-10_16-46-28.png

今回は下記のバージョンで検証を行いました。
SAP Datasphere : バージョン2024.16.46
SAP Integration Suite : バージョン 3.66.0

手順

  1. SAP Datasphere で OAuth クライアントを作成する

  2. SAP Integration Suite で OAuth2 Authorization Code を作成・認証する
  3. SAP Integration Suite で Integration Flow を作成する
  4. SAP Integration Suite で Integration Flow をデプロイする
  5. SAP Integration Suite で Integration Flow の動作を確認する

ポイント

  • SAP Datasphere が 3-legged OAuth 2.0 であるため、SAP Integration Suite 側で OAuth2 Authorization Code を作成する必要があります
  • SAP Datasphere で作成する OAuth クライアントの用途は「インタラクティブ用途」を設定します
  • SAP Datasphere には、OAuth2 Authorization Code 認証時の SAP Datasphere ユーザでアクセスするため、当該ユーザが参照できる範囲のオブジェクトのデータが抽出できます

ここから具体的な方法を紹介します。

手順1.SAP Datasphere で OAuth クライアントを作成する

1.SAP Datasphere にログインします

2.トップページのナビゲーションバーから システム > 管理 を選択します

3.[アプリ統合] タブをクリックします

4.OAuth クライアント の [+ 新規 OAuth クライアントを追加] をクリックします

2024-08-15_16-11-54.jpg

5.以下の情報を入力し、[追加] ボタンをクリックして OAuth クライアントを作成します

  • 名称: 任意のOAuth クライアントの名称(この例では Cloud_Integration)
  • 目的: インタラクティブ用途 を選択
  • リダイレクト URI: https://<hostname>/itspaces/odata/api/v1/OAuthTokenFromCode
    (Token Service が Authorization Code を返す(リダイレクトする) SAP Cloud Integration の URI)

2024-08-15_16-12-09.jpg
参考: OAuth 2.0 Authorization Code Grant

6.[シークレットコードをコピー] ボタンをクリックしてクリップボードにコピーしたクライアントシークレットをメモ帳などにコピーしておきます

2024-08-15_16-15-40.jpg

7.併せて “OAuth クライアント ID” もメモ帳などにコピーしておきます

8.[アプリ統合] タブの OAuth クライアントに表示されている “権限 URL” と “トークン URL” もメモ帳などにコピーしておきます

2024-08-15_16-11-54.jpg

手順2.SAP Integration Suite で OAuth2 Authorization Code を作成・認証する

1.SAP Integration Suite にログインします

2.Monitor > Integrations and APIs をクリックします

2024-08-15_16-19-501.jpg

3.Security Material のタイルをクリックします

2024-08-15_16-19-50.jpg

4.[Create] をクリックして表示されるコンテキストメニューから [OAuth2 Authorization Code] を選択します

2024-08-15_16-20-06.jpg

5.Create OAuth2 Authorization Code ダイアログで以下の情報を入力し、[Deploy] ボタンをクリックします

  • Name: 任意の名称(この例では Datasphere_AuthCode)
  • Provider: Generic を選択
  • Authorization URL: SAP Datasphere の認証 URL(前の手順でコピーしたもの)
  • Token Service URL: SAP Datasphere のトークン URL(前の手順でコピーしたもの)
  • Client ID: SAP Datasphere で作成した OAuth クライアントのクライアント ID(前の手順でコピーしたもの)
  • Client Secret: SAP Datasphere で作成した OAuth クライアントのクライアントシークレット(前の手順でコピーしたもの)
  • Send As: Body Parameter を選択
  • User Name: SAP Datasphere のログインユーザ名
  • Scope: 空白で OK

2024-08-15_16-26-30.jpg

作成した OAuth2 Authorization Code の Status が Unauthorized になっているので、認証をおこないます

Picture1.png

6.作成した OAuth2 Authorization Code の [More] ボタン( ... )をクリックして表示されるコンテキストメニューから [Authorize] を選択します

Picture1-2.png

7.Information ダイアログで内容を確認し、[OK] ボタンをクリックします

Picture2.png

8.SAP Datasphere のログオン画面で、ユーザ名とパスワードを入力して [ログオン] ボタンをクリックします

Picture3.png

9.認証成功のメッセージを確認します

Picture4.png

10.OAuth2 Authorization Code の Status が Deployed になっていることを確認します

Picture5.png

手順3.SAP Integration Suite で Integration Flow を作成する

1.SAP Integration Suite のホームページから Design > Integrations and APIs をクリックします

2024-08-15_16-43-14.png

2.[Create] ボタンをクリックしてコンテンツパッケージを作成します

2024-08-15_16-43-30.png

3.以下の情報を入力して [Save] ボタンをクリックします

  • Name: 任意のパッケージ名(この例では Datasphere_OData_Integration)
  • Technical Name: Name の内容から自動設定
  • Short Description: 任意の概要説明

2024-08-15_16-44-07.png

4.Artifacts タブに移動します

2024-08-15_16-45-421.png

5.Add をクリックして表示されるコンテキストメニューから [Integration Flow] を選択します

2024-08-15_16-45-42.png

6.Add Integration Flow ダイアログで以下の情報を入力し、[Add] ボタンをクリックします

  • Create を選択
  • Name: 任意の Integration Flow 名(この例では Datasphere_Odata_iFlow)
  • ID: Name から自動入力
  • Runtime Profile: Cloud Integration
  • Description: 任意の説明
  • Sender: 空白
  • Receiver: 空白

2024-08-15_16-46-00.png

​デプロイ時に一回だけ起動し、SAP Datasphere からデータを取得する Integration Flow を作成します

7.Artifacts から追加した Integration Flow を選択します

2024-08-15_16-48-15.png

8.右のような Integration Flow を作成します

  • Request Reply から Receiver への接続では、[HTTP] を選択します

2024-08-15_16-48-23.png

9.Groovy Script の Processing タブをクリックします

10.Script File の [Select] ボタンをクリックします

2024-08-15_16-50-52.png

11.Select Resource ダイアログで、Local Resources タブをクリックして、[Upload from File System] ボタンをクリックします

2024-08-15_16-51-07.png

12.次のコードが記述されている Groovy Script ファイルをアップロードします(エディタ上で直接コードを記述することも可能です)

  • 8行目の "Datasphere_AuthCode" 部分には前の手順で作成したOAuth2 Authorization Code 名を入れてください  

 

 

 

 

 

 

 

import com.sap.gateway.ip.core.customdev.util.Message;
import com.sap.it.api.securestore.SecureStoreService;
import com.sap.it.api.securestore.AccessTokenAndUser;
import com.sap.it.api.securestore.exception.SecureStoreException;
import com.sap.it.api.ITApiFactory;
def Message processData(Message message) {
    SecureStoreService secureStoreService = ITApiFactory.getService(SecureStoreService.class, null);
    AccessTokenAndUser accessTokenAndUser = secureStoreService.getAccesTokenForOauth2AuthorizationCodeCredential(“Datasphere_AuthCode");
    String token = accessTokenAndUser.getAccessToken();
    message.setHeader("Content-Type", "application/json");
    message.setHeader("Authorization", "Bearer "+token);
    def messageLog = messageLogFactory.getMessageLog(message);
    if (messageLog != null) {
        messageLog.setStringProperty("logging#1", "accessTokenAndUser=" + accessTokenAndUser.toString()); 
        messageLog.setStringProperty("logging#2", "token=" + token); 
    }
    return message;
}

 

 

 

 

 

 

 

Picture7.png

13.HTTP の Connection タブをクリックし、以下の情報を入力します

  • Address: データを取得する SAP Datasphere の OData API 
  • Query: OData API をコールするときのクエリパラメータ
  • Proxy Type: Internet を選択
  • Method: GET を選択
  • Authentication: None を選択
  • Request Headers: Authorization (必須
  • Response Headers: *

※データを取得する SAP Datasphere の OData API については、こちらのヘルプページをご参照ください。今回はアクセス可能なスペースを一覧で取得するOData APIを利用したため、 https://<tenant_url>/api/v1/dwc/catalog/assets としています。

Picture8.png

手順4.SAP Integration Suite で Integration Flow をデプロイする

1.[Save] ボタンをクリックします

2.[Deploy] ボタンをクリックします

2024-08-15_17-04-29.png

3.Confirmation ダイアログで Runtime Profile でCloud Integrationを選択して、[Yes] ボタンをクリックします

2024-08-15_17-04-37.png

4.Deployment ダイアログで [OK] ボタンをクリックします

2024-08-15_17-04-45.png

5.Deployment Status タブをクリックし、Deployment Status と Runtime Status を確認します

2024-08-15_17-07-27.png

6.Navigate to Manage Integration Content リンクをクリックします

2024-08-15_17-08-01.png

7.Manage Integration Content 画面で実行状態を確認します

2024-08-15_17-10-14.png

8.Integration Flow の実行をトレースするためにLog Configuration の Log Level を Trace に変更します

2024-08-15_17-11-21.png

9.Integration Flow の Edit 画面で再度 [Deploy] ボタンをクリックし、Integration Flow をデプロイします

2024-08-15_17-11-33.png

手順5.SAP Integration Suite で Integration Flow の動作を確認する

1.Monitor > Integrations and APIs をクリックします

2024-08-15_17-13-17.png

2.Monitor Message Processing の All Artifacts タイルをクリックします

2024-08-15_17-13-31.png

3.作成・デプロイした Integration Flow を選択します

2024-08-15_17-13-47.png

4.Logs タブをクリックし、Log Level の Trace リンクをクリックします

2024-08-15_17-13-59.png

5.Run Steps の End をクリックします

2024-08-15_17-15-36.png

6.Message Content をクリックします

7.Payload タブをクリックして、データが取得できていることを確認します(JSON 形式)

2024-08-15_17-15-46.png

以上ですべての手順が完了しました。最後までお読みいただきありがとうございました。

Special thanks to Ikeguchi Daisuke-san!

1 Comment