
こんにちは。CData Software Japan の杉本です。
本記事では、CData Arc でSAP NetWeaver Gateway を通じてSAP S/4 HANA と双方向にデータを連携する方法をご紹介します。
この記事のシナリオ
この記事では「SAP NetWeaver Gateway を通じてSAP S/4 HANAのデータを取得してSQL Server に」と「SQL Server のデータをSAP NetWeaver Gateway を通じてSAP S/4 HANAに」連携するシナリオをそれぞれ作成します。
CData Driversを利用したSAP ERP(S/4 HANAなど)への接続について
CData Drivers(CDataコネクタ)の中にはSAP ERP(S/4 HANAなど)へ接続可能な製品がいくつか存在します。各Driverで利用している接続方法や機能比較については以下の表でまとめられています。今回はCData Arcで表に記載のあるSAP NetWeaver Gateway Driverを利用する方法について解説したいと思います。
SAP 連携徹底解説! CData Sync を利用した SAP ERP から DWH への連携ポイント - Speaker Deck

CData SAP NetWeaver Gateway Driverについて
CData SAP NetWeaver Gateway DriverはODataを通してSAP S/4 HANA のデータへアクセスし、データの参照や更新を行うことができます。今回は以下のブログ記事の内容を元にProduct(製品)のエンドポイントにアクセスして、CData Arcからデータの参照や登録を行いたいと思います。
SAP S/4 HANA Public CloudでODataを公開しSAP Gatewayドライバから接続する
他にSAP S/4 HANAのデータをODataとして公開する方法としては、以下のブログ記事もご参考にして頂けるかと思います。
SAP S/4 Hana のSAP Gateway Service Builder を使ってOData サービスを実装
SAP S/4 HANA でCDS ビューを作成・OData サービスとして公開してみる
CData コネクタについて
CData Arc からSAP NetWeaver Gateway への接続にはCData コネクタを利用する必要がございます。CData コネクタの利用法方法は以下のブログ記事をご参照ください。事前にこちらを参考に、CData SAP NetWeaver Gateway Driver をインストールしておきます。
CData ArcでCData Driversを使う方法
SQL Server の準備
今回はSAP NetWeaver Gateway を通じてアクセス出来るA_Product テーブルとA_ProductDescription テーブルの二つを対象としたいと思いますので、SQL Server 側には事前に同じ構成のテーブルを用意しました。また二つのテーブルが対象の理由としては、Productの新規データを登録する際に、ProductDescriptionに関する内容も必要となるためです。


連携フローの作成(SAP NetWeaver Gateway→ SQL Server)
CData コネクタ(SAP NetWeaver Gateway)
ワークスペースの右上にある「追加」ボタンから「CData コネクタ」を検索して追加します。

今回は起点のコネクタとなるため「Selectアクション」を選択して、コネクタを作成します。

追加された「CData コネクタ」を開き、ドライバーのリストから「SAPGateway」 を選択します。

今回はBasic認証で接続したいと思いますので、接続に必要な内容を入力します。
プロパティ |
値 |
Auth Scheme |
Basic |
URL |
Communication SystemのHost Nameに設定した値 |
User |
Communication SystemのUsers for Inbound Communicationに設定したアカウントのユーザ名 |
Password |
Communication SystemのUsers for Inbound Communicationに設定したアカウントのパスワード |

接続に必要な設定を入力後は以下の「接続テスト」を押下して、正常に接続が行えることを確認します。

その後はテーブルの追加より、対象のテーブルを選択します。

今回はA_Product テーブルを選択します。

選択したテーブルのカラム情報が表示されることが確認出来たら、右上の保存ボタンを押して、「CData コネクタ」を閉じてください。

SQL Server コネクタ
ワークスペースの右上にある「追加」ボタンから「SQLServer コネクタ」を検索して追加します。

今回は連携先のコネクタとなるため「Upsert アクション」を選択して、コネクタを作成します。

追加された「SQL Server コネクタ」を開き、接続を作成します。接続設定についてはヘルプをご参照ください。
CData Arc - SQL Server Connector Setup | Version 25.1.9211

接続設定を追加後はテーブルの追加より、連携先のA_Product テーブルを選択します。


XMLMap コネクタ
「CData コネクタ」と「SQL Server コネクタ」の設定が完了したら、次は「XMLMapコネクタ」を構成します。
「XMLMap コネクタ」をワークスペースに追加して、以下のように「CData コネクタ」と「SQL Server コネクタ」に接続します。

「XMLMap コネクタ」を開いて、連携する項目を以下のようにマッピングします。

連携フローの実行
トリガー開始の「手動で受信」からフローを実行します。

フロー実行後にSQL Server 側のデータを確認すると、SAP NetWeaver Gateway でアクセス出来るA_Product テーブルの内容が連携されていることを確認出来ます。

同様にA_ProductDescription のフローを作成して、実行します。A_ProductDescription テーブルの内容が連携されていることを確認出来ます。

連携フローの作成(SQL Server → SAP NetWeaver Gateway)
今回はSQLServer 側に新規のProductのデータを追加して、その内容をSAP NetWeaver Gatewayを通じてSAP S/4 HANAに連携するフローを作成します。
そしてSAP NetWeaver Gateway Driver からA_Product に新規データを追加する場合は、Descriptionの情報を含める必要があります。具体的には以下のSAP NetWeaver Gateway Driver のヘルプに記載のある、ナビゲーションプロパティを指定することでベースエンティティの作成と関連エンティティへのリンクを同時に行うOData Deep Insertを利用する必要があります。今回はA_Product テーブルに新規データをInsertする際に、Linkedto_DescriptionカラムにDescriptionの情報をJSONとして渡すことにします。
CData JDBC Driver for SAP Gateway - ナビゲーションプロパティ
CData JDBC Driver for SAP Gateway - テーブル
SQL Server 側のデータに追加
まずはSQLServer のA_Product テーブルに新たなデータを追加します。
INSERT INTO [dbo].[A_Product] (Product,BaseUnit,ProductType) VALUES ('ARCTEST123','AU','SERV')


そして同様にA_ProductDescription テーブルにDescription の情報を追加します。
INSERT INTO [dbo].[A_ProductDescription] (Language,Product,ProductDescription) VALUES ('EN','ARCTEST123','TEST'),('JA','ARCTEST123','テスト')


そしてSAP NetWeaver Gateway を通じて上記のデータを書き戻すフローを作成します。
SQL Server コネクタ
「Select アクション」の「SQLServer コネクタ」を追加します。

今回はA_Product テーブルに追加したデータと、それに関連するA_ProductDescription テーブルのデータを合わせて取得する必要があります。ここではCData Arc の親子テーブルの機能を利用して、データを取得します。親子テーブルについては以下のブログ記事をご参考ください。
CData Arc 機能紹介 - Child Tables(親子関係を持つデータの取得や登録)
親テーブルとなるA_Product テーブルを選択します。不要な項目が多いため、後続のXMLMapでマッピングがしやすいように「Product」、「BaseUnit」、「ProductType」以外のカラムのチェックを外します。また新規に追加したデータのみを取得したいので、フィルタ条件で該当の「Product」を指定します。

そして子テーブルとしてA_ProductDescription テーブルを追加して、不要な「Etag」カラムのチェックを外します。フィルタ条件で「REF」を利用して、親テーブルの「Product」と子テーブルの「Product」が一致するレコードを取得するように構成します。

親子テーブルの構成が完了したら、「XML 出力をプレビュー」より取得出来るサンプルデータを確認します。A_ProductDescription テーブルのデータが子要素として表示されていることが確認出来ます。その後「サンプルデータを保存」を行います。

CData コネクタ(SAP NetWeaver Gateway)
そして「Upsert アクション」の「CData コネクタ」を追加して、A_Product テーブルを選択します。「Product」、「BaseUnit」、「ProductType」、「Linkedto_Description」以外のカラムのチェックを外します。

XMLMap コネクタ
「XMLMap コネクタ」をワークスペースに追加して、「SQL Server コネクタ」と「CData コネクタ」に接続します。

「XMLMap コネクタ」を開いて、まずは「Product」、「BaseUnit」、「ProductType」の項目をマッピングします。

そして今回は前述の通りDeep Insertの機能を利用するため、Description の情報をJSONとして集計して、「Linkedto_Description」カラムにマッピングする必要があります。今回はXMLMapで変数(Map Item)、Virtual loopやArcScriptを利用して、JSON として加工します。
変数(Map Item)やVirtual loopについては以下のヘルプも合わせてご参照ください。
CData Arc - Virtual Nodes | Version 25.1.9211
CData Arc - Advanced | Version 25.1.9211
まずはXMLMapのディスティネーションで右クリックを行い、「ノードを追加」から「変数を追加」を選択して、「_descriptions」という変数を追加します。


次は「ノードを追加」から「ループを追加」を選択してVirtual loopを追加します。

そして「A_ProductDescription」を追加したVirtual loopにマッピングします。


Virtual loop内で「ノードを追加」から「コードスクリプトを追加」を選択して、ArcScriptを追加します。


追加しているArcScriptの詳細は以下の通りです。行っている内容としては、A_ProductDescription の子要素である「Language」、「Product」、「ProductDescription」の項目をJSON として加工しており、加工した内容を「_descriptions」変数に格納しております。またArcScriptの処理はVirtual loop 内で行っておりますので、複数のDescription が存在する場合でも、JSON として加工出来るようになっております。
<arc:set attr="description">{"Language":"[xpath("Language")]","Product":"[xpath("Product")]", "ProductDescription":"[xpath("ProductDescription")]"}</arc:set>
<arc:notequals attr="_map._descriptions" value="">
<arc:set attr="_map._descriptions" value="[_map._descriptions], [description]" />
<arc:else>
<arc:set attr="_map._descriptions" value="[description]" />
</arc:else>
</arc:notequals>
そして最終的に「Linkedto_Description」の項目に「_descriptions」の変数をマッピングします。

最終的なマッピング設定は以下のようになります。

XMLMap右上の「テスト」からマッピングのテストを行い、意図したようにマッピングが構成されていることを確認します。以下のテスト結果では「Linkedto_Description」にDescription の内容がJSON として格納されていることが確認出来ます。

連携フローの実行
トリガー開始の「手動で受信」からフローを実行します。
フロー実行後にSAP S/4 HANAにログインして、対象のデータが反映されていることを確認出来ます。

その他
今回はA_Product と A_ProductDescription のテーブルをそれぞれ連携しましたが、CData SAP NetWeaver Gateway Driverでは、ビューとしてベースエンティティと関連エンティティを一緒に取得することが出来ます。具体的には以下のA_Product_to_Description ビューを利用することで、一つのテーブルとして取得することも可能です。詳細は以下のヘルプも合わせてご参照ください。

CData JDBC Driver for SAP Gateway - ビュー
おわりに
今回はCData Arc でSAP NetWeaver Gateway を通じてSAP S/4 HANA と双方向にデータを連携する方法について解説しました。
記事の冒頭でご紹介したとおり、CData 製品を利用したSAP 製品との連携アプローチには複数の選択肢がありますが、この記事でご紹介した「SAP NetWeaver Gateway を通じてOData でアクセスするアプローチ」は、Web 標準に準拠した技術構成で、交わされる内容も可読性が高く、Arc を含めたSAP 外部のソフトウェアとSAP 製品との結合性を疎に保ちやすい点などがメリットと言えそうです。
CData Arc はシンプルで拡張性の高いコアフレームワークに、豊富なMFT・EDI・エンタープライズコネクタを備えたパワフルな製品です。CData Drivers との組み合わせで270を超えるアプリケーションへの連携を実現できます。
皆さんのつなぎたいシナリオでぜひ CData Arc を試してみてください。
CData Arc | データ連携、EAI、マネージドファイル転送(MFT)、電子データ交換(EDI)のオールインワンツール
この記事ではCData Arc™ 2025 - 25.1.9211.0を利用しています。
関連コンテンツ