SAP API Management & HANA XS - Part III
Sandro Montemezzani - 11.03.2019Übersicht
In diesem Teil der Blog-Reihe füllen wir die Datenbank mit Tabellen und binden diese an einen OData-Service.
Projekt Package
Zunächst einmal benötigen wir ein Package für unser Projekt im SAP Hana Editor. Damit wir dieses erstellen können, loggen wir uns als SYSTEM
ein und verteilen unserem User folgende Rechte auf das Root-Packet: REPO.READ
, REPO.EDIT_NATIVE_OBJECTS
und REPO.ACTIVATE_NATIVE_OBJECTS
.
Nun können wir uns wieder als COMPANYDATADEV
einloggen und im Editor das Packet companydata
erstellen.
HANA CDS
Zum automatischen Generieren der Tabellen nutzen wir das HANA CDS (Core Data Service) System.
Hierfür legen wir in unserem neu angelegten Projekt-Packet eine neue Datei TABLES.hdbdd
an:
namespace companydata;
@Schema: 'COMPANYDATADEV'
context TABLES {
type BusinessKey: Integer;
entity Companies {
key id: BusinessKey;
key: String(20);
long_name: String(50);
short_name: String(50);
} technical configuration {
column store;
};
...
}
Wir benötigen ebenfalls die Tabellen Entities
, Addresses
und HoursOfOperation
. Beim Speichern der Datei werden die Tabellen automatisch in die Datenbank eingefügt.
Tabellen
Nun wollen wir diese Tabellen über einen OData Service erreichbar machen. Hierfür legen wir eine CompanyData.xsodata
Datei an:
service namespace "companydata" {
"COMPANYDATADEV"."companydata::TABLES.Companies" as "companies";
"COMPANYDATADEV"."companydata::TABLES.Entities" as "entities";
"COMPANYDATADEV"."companydata::TABLES.HoursOfOperation" as "hours";
}
Damit stellen wir die 3 Endpunkte /companies
, /entities
und /hours
zur Verfügung. Um den OData-Service aktivieren zu können, müssen wir noch eine .xsapp
-Datei erstellen:
{
"exposed": true,
"authentication": [
{
"method": "Basic"
}
]
}
Der OData Service ist nun fertig aufgesetzt. Zum Testen kann man die Metadaten aufrufen mit:
$ curl -su COMPANYDATAUSER_READONLY:********* https://hanapXXXXXXXXXXtrial.hanatrial.ondemand.com/companydata/CompanyData.xsodata/$metadata |xmllint --format -
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0">
<edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="2.0">
<Schema xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://schemas.microsoft.com/ado/2008/09/edm" Namespace="companydata">
<EntityType Name="companiesType">
<Key>
<PropertyRef Name="id"/>
</Key>
<Property Name="id" Type="Edm.Int32" Nullable="false"/>
<Property Name="key" Type="Edm.String" MaxLength="20"/>
<Property Name="long_name" Type="Edm.String" MaxLength="50"/>
<Property Name="short_name" Type="Edm.String" MaxLength="50"/>
</EntityType>
<EntityType Name="entitiesType">
<Key>
<PropertyRef Name="id"/>
</Key>
<Property Name="id" Type="Edm.Int32" Nullable="false"/>
<Property Name="key" Type="Edm.String" MaxLength="20"/>
<Property Name="long_name" Type="Edm.String" MaxLength="50"/>
<Property Name="short_name" Type="Edm.String" MaxLength="50"/>
<Property Name="company_id" Type="Edm.Int32"/>
Property Name="address_id" Type="Edm.Int32"/>
</EntityType>
<EntityType Name="hoursType">
<Key>
<PropertyRef Name="id"/>
</Key>
<Property Name="id" Type="Edm.Int32" Nullable="false"/>
<Property Name="day_of_week" Type="Edm.Int32"/>
<Property Name="opens_at" Type="Edm.Time"/>
<Property Name="closes_at" Type="Edm.Time"/>
<Property Name="valid_from" Type="Edm.DateTime"/>
<Property Name="valid_until" Type="Edm.DateTime"/>
<Property Name="entity_id" Type="Edm.Int32"/>
</EntityType>
<EntityContainer Name="CompanyData" m:IsDefaultEntityContainer="true">
<EntitySet Name="companies" EntityType="companydata.companiesType"/>
<EntitySet Name="entities" EntityType="companydata.entitiesType"/>
<EntitySet Name="hours" EntityType="companydata.hoursType"/>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
Schlusswort
Im folgenden Part werden wir den Zugriff auf den OData Service per API Management vereinfachen.
- Zum vorherigen Part: Part II - HANA Datenbank
- Zum nächsten Part: Part IV - HANA XS - API Management