ngtokuの日記

主に雑記帳です。SNSではngtokuのID取れなかったんで、別のIDでやってます。

SAP HANAにoDataでアクセス お試し版

調べ物のついでに、SAP HANA express editionをVMWareで起動して、oDataでちょろっとアクセスしてみたので備忘録的に。
自分の備忘録なので、いつにもまして適当だけれども気にしない感じで。
ちなみにHANAであって、S/4 HANAじゃないぞ念のため。

1.SAP HANA express edition環境の構築

まぁ基本的にこちらの2記事に沿って導入しただけですな。
SAP HANAに触れてみよう! SAP HANA, express editionクイックインストールガイド | SAPジャパン ブログ
SAP HANAに触れてみよう!その2:SAP HANA 2.0, express edition + 各種ツール類のセットアップのご紹介 | SAPジャパン ブログ

あえて気をつけることと言えば、その2記事に記載してある通り、インスタンス番号が00ではなく90になっている事と、自分はeclipseバージョン2019-09を使っているので、HANA Studioは https://tools.hana.ondemand.com/2019-09/ からインストールしたことくらいかな。

ちなみに「Server only」 をダウンロードしたので、Web IDEやCockpitなんかの確認はしていない。
アドミンツールは http :// IPアドレス:8090/sap/hana/xs/admin で、ユーザ名はSYSTEM、パスワードは起動時に変更したものを使用する。

2.oDataアクセス環境の構築

こちらはVMWareの外からHANA studion on eclipseにて作業。
これはこちらのサイトの「5.1. HANA System の登録」と「5.2. リポジトリの登録」をお手本にして、
5. HANA XS Project の準備 — OData for SAP HANA セットアップガイド   初版 2016-12-01   intra-mart Accel Platform

お手軽にanonymousで認証すっ飛ばしたので、.xaccess以下はこちらを参考に
How to Expose a HANA Table via oData | SAP Blogs

なのでeclipse(HANA studio)のリポジトリはこんな感じ。
f:id:ngtoku:20200315185117p:plain


各々の内容は以下の通り。
.xaccess

{
	"exposed" : true, 
	"authentication" : null,
	"mime_mapping" : [{
		"extension" : "jpg",
		"mimetype" : "image/jpeg"
	}],
	"prevent_xsrf" : false,
	"force_ssl": false,
	"enable_etags" : true,
	"anonymous_connection" : "toku.oData::anonuser",
	"cors": [{
		"enabled": true,
		"allowMethods": ["GET","POST","PUT","DELETE", "HEAD"],
		"allowOrigin": ["*"]
	}],
	"allowHeaders": [
		"Accept",
		"Authorization",
		"Content-Type",
		"X-CSRF-Token",
		"Access-Control-Allow-Origin"
	],
	"exposeHeaders": [
		"x-csrf-token"
	],
	"cache_control": "no-cache, no-store"
}

ちなみに "anonymous_connection" : "toku.oData::anonuser", を "authentication" :{"method": "Basic"}, に帰るとベーシック認証になるよ。


.xsapp
空っぽ


anonuser.xssqlcc

{"description":"Anonymous SQL connection"}


参照先は以下にしたので、
f:id:ngtoku:20200315185546p:plain

sensorjump.xsodataの内容はこんな感じ。エイリアスからはアンダースコア外したほうが良かったかな、と思ったりしたがとりあえずそのまま。

service { "SYS"."ADAPTERS_" as "ADAPTERS_"; }

各々のファイルは右クリックメニューでアクティベートしておかないとアドミンツールに出てこないので注意。
あと、参考サイトそのままコピーでエラーになる場合はダブルクォートがおかしかったりするので、アクティベートでエラーになる場合は打ち直してみたりすると良い。



アドミンツールは前述の http :// IPアドレス:8090/sap/hana/xs/admin で、設定。
最初は参照先サイトのようにエラーメッセージが出るけれど、右下のeditでHANA接続IDとパスワードをセットして以下の通り。
f:id:ngtoku:20200315190020p:plain



3.ブラウザから確認

APIの情報は以下で確認
http :// IPアドレス:8090/toku/oData/sensorjump.xsodata

<service xml:base="http://IPアドレス:8090/toku/oData/sensorjump.xsodata/">
<workspace>
<atom:title>Default</atom:title>
<collection href="ADAPTERS_">
<atom:title>ADAPTERS_</atom:title>
</collection>
</workspace>
</service>


http :// IPアドレス:8090/toku/oData/sensorjump.xsodata/$metadata

<edmx:Edmx Version="1.0">
<edmx:DataServices m:DataServiceVersion="2.0">
<Schema Namespace="toku.oData.sensorjump">
<EntityType Name="ADAPTERS_Type">
<Key>
<PropertyRef Name="ADAPTER_OID"/>
</Key>
<Property Name="ADAPTER_OID" Type="Edm.Int64" Nullable="false"/>
<Property Name="OWNER_OID" Type="Edm.Int64" Nullable="false"/>
<Property Name="ADAPTER_NAME" Type="Edm.String" MaxLength="64"/>
<Property Name="PROPERTIES" Type="Edm.String" MaxLength="1000"/>
<Property Name="CONFIGURATION" Type="Edm.String" MaxLength="2147483647"/>
<Property Name="IS_SYSTEM_ADAPTER" Type="Edm.Byte" Nullable="false"/>
</EntityType>
<EntityContainer Name="sensorjump" m:IsDefaultEntityContainer="true">
<EntitySet Name="ADAPTERS_" EntityType="toku.oData.sensorjump.ADAPTERS_Type"/>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>


データ内容は以下で確認。$format=json って入れないと、レスポンスはXMLで返ってくるよ。


・データ全部
 http :// IPアドレス:8090/toku/oData/sensorjump.xsodata/ADAPTERS_?$format=json


・主キー指定(このテーブルの主キーはADAPTER_OIDなので、ADAPTER_OID=145525という条件で取得していることになる)
 最後にLがついているのは型指定かな、あんま調べてないけど。
 http :// IPアドレス:8090/toku/oData/sensorjump.xsodata/ADAPTERS_(145525L)?$format=json


・主キー&取得項目指定(ADAPTER_OIDとADAPTER_NAME)
 http :// IPアドレス:8090/toku/oData/sensorjump.xsodata/ADAPTERS_(145525L)?$format=json&$select=ADAPTER_OID,ADAPTER_NAME


・条件指定(ADAPTER_NAME='aseodbc')&取得項目指定(ADAPTER_OIDとADAPTER_NAME)
 http :// IPアドレス:8090/toku/oData/sensorjump.xsodata/ADAPTERS_?$format=json&$select=ADAPTER_OID,ADAPTER_NAME&$filter=ADAPTER_NAME%20eq%20%27aseodbc%27


ちなみに主キー指定の例だと、こんな感じのレスポンスが返ってくるよ。

{
    "d": {
        "__metadata": {
            "type": "toku.oData.sensorjump.ADAPTERS_Type",
            "uri": "http://IPアドレス:8090/toku/oData/sensorjump.xsodata/ADAPTERS_(145525L)"
        },
        "ADAPTER_OID": "145525",
        "OWNER_OID": "131072",
        "ADAPTER_NAME": "aseodbc",
        "PROPERTIES": "display_name=ASE (ODBC);description=Sybase ASE",
        "CONFIGURATION": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><RemoteSourceDescription name=\"Root\" id=\"1\">略</RemoteSourceDescription>",
        "IS_SYSTEM_ADAPTER": 1
    }
}