前回の記事(【第1回】SAPUI5とSAP NetWeaver Gatewayによるマッシュアップ開発入門(序章) )に引き続き、
実際のアプリケーションの開発方法を書いていこうと思います。
まず、今回作りたいWebアプリケーションは以下のようなものになります。
SAPシステムから取得した情報と、Google Mapから取得した情報を一画面で連携させているところがポイントです。
この記事で書く範囲は以下の図のNetwerver Gatewayの部分となります。
SAPシステム内部のデータをOData形式で公開するところまでの手順を書きます。
システム環境
今回は、SAP Netweaver 7.02 ABAPの上にNetweaver Gatewayを構築しました。
Netweaver Gatewayは通常のインストールに加え、GW_CORE、IW_FNDといった追加モジュールのインストールが必要となります。
本記事の内容はこれらのモジュールがインストール済みである前提で書かせていただきます。
[SMART_CONTENT]
データ格納用アドオンテーブルの作成
まず、以下の画像のようなアドオンテーブルをSAP内部データとして作成しました。
今回は、このアドオンテーブルに得意先情報を格納することとします。
このデータをNetweaver Gatewayを利用してOData形式で公開していこうと思います。
テーブルのデータは以下のようになっています。
Gateway Serviceの開発
SAP NetWeaver Gateway Service Builderの トランザクションコード:SEGWを実行し、
登録ボタンをクリックします。
必要な情報を入力します。今回はLocal Objectで登録するのでLocal Objectボタンをクリックします。
Entity Typeを作成します。
今回は、自分で作成したアドオンテーブル:ZKNA1の構造をODataの基として利用するので
Data Modelを右クリック->Import->DDIC Structureを選択します。
ABAP Structureに事前に作成したアドオンテーブル:ZKNA1を入力し、
Enterキーで以下のように項目が表示されますので、続行ボタンをクリックします。
Entity Typesにアドオンテーブル:ZKNA1の構造が追加されたことを確認し、保存ボタンをクリックします。
次に、Entity Setsをダブルクリックし、行追加ボタンをクリックし必要な項目を入力し保存ボタンをクリックします。
ここではEntity Setsの名前をCUSTOMERとします。
Service Implementationを右クリックしSynchronize Entity Setsを選択します。
作成したEntity Setに対するデータ操作メソッド(Create/Delete/GetEntity/GetEntitySet/Update)が自動で作成されます。
今回はこの中から、GetEntitySetのメソッドを利用する方法を書いていきます。
保存ボタンをクリックします。
Generate Runtime Objectsボタンをクリックします。
生成されるオブジェクト名が提案されます。
続行ボタンをクリックします。
右枠の下部分に実行結果が表示されます。
エラーが無いことを確認します。
今回利用する、GetEntitySetの中身を実装します。
右クリック->GetEntitySet->Go to Implementationを選択します。
メソッド:CUSTOMER_GET_ENTITYSET(<Entity Set名>_GET_ENTITYSET)を選択し、再定義ボタンをクリックします。
GetEntitySetの処理の内容として、アドオンテーブル:ZKNA1から値を取得し、その結果をパラメータ:ET_ENTITYSETにセットする処理をコーティングします。
有効化ボタンをクリックします。
これでGetEntitySetの処理がGateway Serviceとして実装されました。
次に作成したGateway Serviceを登録/有効化します。
サービスの有効化および更新トランザクションコード:/IWFND/MAINT_SERVICE
サービス追加ボタンをクリックします。
技術サービス名にGenerate Runtime Objectsで生成した、Technical Service Nameを入力しEnterキーで下部にサービスが表示されますので、エントリを選択します。
続行ボタンをクリックします。
正常に登録されたかを確認するためにテスト実行します。
ブラウザ呼出をクリックします。
以下のURLにジャンプします。
http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/?$format=xml
ブラウザにXML形式でサービスの定義が表示されていれば成功です。
XMLの内容は以下のようになっているはずです。
Gateway Serviceの中にCUSTOMERというEntitySetが定義されているのがわかります。
<app:service xml:base="http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/" xml:lang="ja" xmlns:app="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:sap="http://www.sap.com/Protocols/SAPData"> <app:workspace> <atom:title type="text">Data</atom:title> <app:collection href="CUSTOMER" sap:addressable="false" sap:content-version="1" sap:pageable="false"> <atom:title type="text">CUSTOMER</atom:title> <sap:member-title>Zkna1</sap:member-title> </app:collection> </app:workspace> <atom:link href="http://<HOSTNAME>:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/" rel="self"/> <atom:link href="http://<HOSTNAME>:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/" rel="latest-version"/></app:service>
次に、実装したGetEntitySetの動作を確認してみましょう。
先ほどのGateway ServiceのURLにEntity Sets名であるCUSTOMERを以下のように追加します。
http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/CUSTOMER/?$format=xml
IEの場合は以下のようにフィード表示されてしまうかもしれません。
Chrome等で確認すると実際には以下のようなXML形式のデータが取得できていることがわかります。
<feed xml:base="http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> <id>http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/CUSTOMER/</id> <title type="text">CUSTOMER</title> <updated>2013-10-22T08:05:06Z</updated> <author> <name/> </author> <link href="CUSTOMER/" rel="self" title="CUSTOMER"/> <entry> <id>http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/CUSTOMER(Kunnr='1',Mandt='100')</id> <title type="text">CUSTOMER(Kunnr='1',Mandt='100')</title> <updated>2013-10-22T08:05:06Z</updated> <category scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" term="ZCUSTOMER1_SRV.Zkna1"/> <link href="CUSTOMER(Kunnr='1',Mandt='100')" rel="edit" title="Zkna1"/> <content type="application/xml"> <m:properties> <d:Pstlz/> <d:Ort01>千代田区</d:Ort01> <d:Name2/> <d:Name1>リアルテックジャパン</d:Name1> <d:Land1>JP</d:Land1> <d:Kunnr>1</d:Kunnr> <d:Mandt>100</d:Mandt> <d:Regio>13</d:Regio> <d:Sortl/> <d:Stras>九段北1-8-10</d:Stras> <d:Telf1/> <d:Telfx/> <d:RegioT>東京都</d:RegioT> </m:properties> </content> </entry> <entry> <id>http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/CUSTOMER(Kunnr='2',Mandt='100')</id> <title type="text">CUSTOMER(Kunnr='2',Mandt='100')</title> <updated>2013-10-22T08:05:06Z</updated> <category scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" term="ZCUSTOMER1_SRV.Zkna1"/> <link href="CUSTOMER(Kunnr='2',Mandt='100')" rel="edit" title="Zkna1"/> <content type="application/xml"> <m:properties> <d:Pstlz/> <d:Ort01>千代田区</d:Ort01> <d:Name2/> <d:Name1>A社(東京駅前)</d:Name1> <d:Land1>JP</d:Land1> <d:Kunnr>2</d:Kunnr> <d:Mandt>100</d:Mandt> <d:Regio>13</d:Regio> <d:Sortl/> <d:Stras>丸の内1丁目</d:Stras> <d:Telf1/> <d:Telfx/> <d:RegioT>東京都</d:RegioT> </m:properties> </content> </entry> <entry> <id>http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/CUSTOMER(Kunnr='3',Mandt='100')</id> <title type="text">CUSTOMER(Kunnr='3',Mandt='100')</title> <updated>2013-10-22T08:05:06Z</updated> <category scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" term="ZCUSTOMER1_SRV.Zkna1"/> <link href="CUSTOMER(Kunnr='3',Mandt='100')" rel="edit" title="Zkna1"/> <content type="application/xml"> <m:properties> <d:Pstlz/> <d:Ort01>港区</d:Ort01> <d:Name2/> <d:Name1>B社(品川駅前)</d:Name1> <d:Land1>JP</d:Land1> <d:Kunnr>3</d:Kunnr> <d:Mandt>100</d:Mandt> <d:Regio>13</d:Regio> <d:Sortl/> <d:Stras>高輪3丁目</d:Stras> <d:Telf1/> <d:Telfx/> <d:RegioT>東京都</d:RegioT> </m:properties> </content> </entry> <entry> <id>http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/CUSTOMER(Kunnr='4',Mandt='100')</id> <title type="text">CUSTOMER(Kunnr='4',Mandt='100')</title> <updated>2013-10-22T08:05:06Z</updated> <category scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" term="ZCUSTOMER1_SRV.Zkna1"/> <link href="CUSTOMER(Kunnr='4',Mandt='100')" rel="edit" title="Zkna1"/> <content type="application/xml"> <m:properties> <d:Pstlz/> <d:Ort01>新宿区</d:Ort01> <d:Name2/> <d:Name1>C社(新宿駅前)</d:Name1> <d:Land1>JP</d:Land1> <d:Kunnr>4</d:Kunnr> <d:Mandt>100</d:Mandt> <d:Regio>13</d:Regio> <d:Sortl/> <d:Stras>新宿3丁目</d:Stras> <d:Telf1/> <d:Telfx/> <d:RegioT>東京都</d:RegioT> </m:properties> </content> </entry> <entry> <id>http://[HOSTNAME]:8000/sap/opu/odata/sap/ZCUSTOMER1_SRV/CUSTOMER(Kunnr='5',Mandt='100')</id> <title type="text">CUSTOMER(Kunnr='5',Mandt='100')</title> <updated>2013-10-22T08:05:06Z</updated> <category scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" term="ZCUSTOMER1_SRV.Zkna1"/> <link href="CUSTOMER(Kunnr='5',Mandt='100')" rel="edit" title="Zkna1"/> <content type="application/xml"> <m:properties> <d:Pstlz/> <d:Ort01>横浜市西区</d:Ort01> <d:Name2/> <d:Name1>D社(横浜駅前)</d:Name1> <d:Land1>JP</d:Land1> <d:Kunnr>5</d:Kunnr> <d:Mandt>100</d:Mandt> <d:Regio>14</d:Regio> <d:Sortl/> <d:Stras>高島2丁目</d:Stras> <d:Telf1/> <d:Telfx/> <d:RegioT>神奈川県</d:RegioT> </m:properties> </content> </entry></feed>
GetEntitySetの処理でコーディングした通り、アドオンテーブル:ZKNA1のデータがXML形式で取得できていることがわかります。
XML形式は外部のアプリケーションからは扱いやすい形式です。
次回はこのデータと、Google Mapのデータを利用したWebアプリケーションをSAPUI5を利用して開発してみようと思います。
最後までお読み頂きありがとうございました。
- カテゴリ: 技術情報
この記事に関するサービスのご紹介
導入/移行(プロフェッショナル)サービス
プロフェッショナルサービスでは主にSAPシステムの導入や移行、それに伴うテクニカルな支援を行います。ERPやS/4 HANA、SolManといった様々なSAP製品の新規導入、クラウドを含む様々なプラットフォームへのSAPシステムの最適な移行、保守切れに伴うバージョンアップ・パッチ適用等の作業だけでなく、パラメータ設計、パフォーマンスチューニング、導入・移行計画支援等についても対応いたします。
詳細はこちら