Quantcast
Channel: Cadaxo GmbH
Viewing all 120 articles
Browse latest View live

Onlinekurs “ABAP development for HANA”

$
0
0

Wir, die Entwickler der Firma Cadaxo, beschäftigen uns seit einiger Zeit mit SAP HANA. Nach vielen gemeinsamen internen Know-how-Transfers und Diskussionen, haben wir uns entschieden, beim Onlinekurs „ABAP Development for HANA“ auf open.sap.com mitzumachen, um unser Know-how zu vertiefen.

Der Kurs erstreckte sich über vier Wochen und wurde von den Instruktoren Dr. Jasmin Gruschke und Jens Weiler auf Englisch gehalten. Wie es die Namen schon verraten, sind die beiden gebürtige Deutsche und wie man schon ahnen kann, drang der deutsche Akzent ziemlich stark durch – vor allem bei Jens Weiler, was mich immer bei guter Laune während des Vortrags hielt.

Im Kurs geht es hauptsächlich darum, was im SAP zu tun ist, wenn man HANA einführt. Bestehendes Coding zu analysieren, worauf man achten muss und mit welchen Tools man das am besten macht.

Der zweite große Teil behandelt Optimierungen – datenbankorientierte Programmierung und Verwendung von HANA-spezifischen Features.

Erst im Laufe des Kurses ist mir wirklich bewusst geworden, wie effizient HANA sein kann. Ein tieferer Blick in die Funktionsweise von HANA, ein paar Demos, in denen enorme Massendaten sekundenschnell aufbereitet und angezeigt werden – und man erkennt den signifikanten Unterschied zur traditionellen Datenbank.

Hier ein paar Themen, die mir am besten gefallen haben und auf die ich in weiteren Beiträgen näher eingehen werde:

  • Bestehendes Coding – was funktioniert nicht mit HANA und muss adaptiert werden
  • Performance von bestehendem Coding – Richtlinien und Ergänzungen
  • Core Data Services-Views – Was ist es und wofür kann ich es verwenden

Ich hoffe, dass auch für euch ein paar interessante Themen dabei sind!

The post Onlinekurs “ABAP development for HANA” appeared first on Cadaxo GmbH.


Einbinden von sap.m.page als Content in sap.m.IconTabBar funktioniert nicht

$
0
0

In das Control sap.m.IconTabBar können über die Aggregation content bzw. über die entsprechenden Content-Methoden SAPUI5 Controls eingebunden werden. Zumindest bis zum SAPUI5 Release 1.24 funktioniert das Einbinden von Objekten vom Typ sap.m.Page nicht korrekt, sondern liefert teilweise fehlerhafte Ergebnisse.

Stattdessen sollte ein SAPUI5 Layout-Control (Flex Box, … ) oder eine “echtes” UI Control verwendet werden.

Hier ein Javascript Beispiel in dem eine Tabelle im eingebundenen View zurückgeliefert wird:

addviewtoicontab1

SubView: “zui5_demo_acc.ListOpportunitites”

addviewtoicontab2

The post Einbinden von sap.m.page als Content in sap.m.IconTabBar funktioniert nicht appeared first on Cadaxo GmbH.

CL_ABAP_GZIP – Komprimieren von Strings oder binären Inhalten in ABAP

$
0
0

Allgemeines

Die Komprimierung von großen Dateien, die so genannte Datenkompression bzw. Datenkomprimierung, durch entsprechende Programme, ist im täglichen Gebrauch nicht mehr wegzudenken. Die Datenkomprimierung reduziert nicht nur wertvolle Speicherplätze, eine geringere Datenmenge beim Austausch zweier Systeme wirkt sich positiv auf die Übertragungszeit aus.

Komprimieren/Dekomprimieren in SAP

SAP hat mit dem Web AS 6.20 die Komprimierung innerhalb von ABAP™ verfügbar gemacht. In diesem CADAXO Development Tipp werde ich einen kurzen Überblick liefern.

Überblick CL_ABAP_GZIP / CL_ABAP_ZIP

Zwei Klassen stehen zur Verfügung. Die Klasse CL_ABAP_GZIP wird zum Komprimieren/Dekomprimieren von Texten, Strings oder binären Inhalten verwendet. Darüber hinaus gib es die Klasse CL_ABAP_ZIP mit welcher mehrere Objekte zu einem ZIP Ordner zusammengefasst werden können. Auf diese Klasse wird in diesem Development Tipp nicht weiter eingegangen.

Klasse CL_ABAP_GZIP

Zum Komprimieren von einzelnen Texten, Strings oder binären Inhalten kann die Klasse CL_ABAP_GZIP verwendet werden. Die Klasse bietet vier Methoden an:

  • COMPRESS_TEXT Komprimierung von Text in GZIP-Format
  • DECOMPRESS_TEXT Dekomprimierung von gezippten Textdaten
  • COMPRESS_BINARY Komprimierung von Binärdaten in GZIP-Format
  • DECOMPRESS_BINARY Dekomprimierung von gezippten Binärdaten

Methode COMPRESS_TEXT – Komprimierung von Texten bzw. Strings

Diese Methode wird verwendet, um einen Text/Textstring zu komprimieren. Der zu zippende Text muss in einem CSEQUENCE Typ vorliegen. Zur Erinnerung, bei CSEQUENCE handelt es sich um einen generischen, textartigen ABAP Typ wie STRING oder C.

Der Text wird durch den einzigen Pflichtparameter Parameter TEXT_IN übergeben. Als Ergebnis erhält man zwei Parameter nämlich GZIP_OUT und GZIP_OUT_LEN. Wie vermutet, wird mit GZIP_OUT der komprimierte Inhalt und in GZIP_OUT_LEN die Länge zurückgeliefert. Für GZIP_OUT ist ein XSEQUENCE Typ (X oder XSTRING) zu verwenden.

Nachfolgend ein Beispiel für eine Komprimierung eines Textes:

DATA: l_string TYPE string,
      l_gzip_out TYPE xstring.
MOVE 'CADAXO GesmbH - my first ABAP ZIP' TO l_string.

cl_abap_gzip=>compress_text(
 EXPORTING
   text_in = l_string
 IMPORTING
   gzip_out = l_gzip_out ).

Die Methode bietet noch weitere optionale Eingabeparameter an:

  • TEXT_IN_LEN Wenn keine Textlänge angegeben ist, wird der gesamte übergebene Text komprimiert, ansonsten erfolgt die Komprimierung auf den Teilbereich des Textes.
  • COMPRESS_LEVEL Durch die Angabe des Komprimierungslevels kann die Größe und Geschwindigkeit der Komprimierung gesteuert werden. 1 bedeutet höchste Geschwindigkeit und 9 beste Komprimierung. Wenn keine Angabe erfolgt, wird 6 als Default-Wert gesetzt. 0 bedeutet keine Komprimierung.
  • CONVERSION Die Eingabedaten können vor der Komprimierung noch in eine andere Codepage konvertiert werden. Hier kann entweder die gewünschte Codepage, UTF-8, NONE oder DEFAULT angegeben werden. Bei DEFAULT wird in Unicode Systemen auf UTF-8 umgewandelt, in nicht Unicode Systemen erfolgt keine Konvertierung. DEFAULT ist als Default-Wert gesetzt.

Methode DECOMPRESS_TEXT – Dekomprimierung von Texten bzw. Strings

Um einen gezippten Text wieder in eine CSEQUENCE zu dekomprimieren, ist die Methode DECOMPRESS_TEXT zu verwenden. Die Methode verfügt über die gleichen Parameter wie COMPRESS_TEXT deshalb hier nur kurz die Parameter zusammengefasst:

  • GZIP_IN Hier wird der XSEQUENCE Typ mit dem gezippten Wert übergeben.
  • GZIP_IN_LEN Optionale Angabe der Länge.
  • CONVERSION Mit DEFAULT wird in einem Unicode-System auf UTF-8 umgewandelt, in nicht UNICODE-Systemen auf die Systemcodepage. Weitere mögliche Angabe NONE und eine gewünschte Codepage.
  • TEXT_OUT Liefert den dekomprimierten Text.
  • TEXT_OUT_LEN enthält die Länge des dekomprimierten Textes.

Beispiel:

DATA: l_string TYPE string,
      l_gzip_in TYPE xstring.

MOVE l_gzip_out to l_gzip_in.

cl_abap_gzip=>decompress_text(
 EXPORTING
   gzip_in = l_gzip_in
 IMPORTING
   text_out = l_string_out ).

Methoden COMPRESS_BINARY und DECOMPRESS_BINARY – Binärdaten

Die Komprimierung bzw. Dekomprimierung von Binärdaten unterscheidet sich nicht wesentlich von der Vorgehensweise mit Texten. Zum Komprimieren wird die Methode COMPRESS_BINARYverwendet. Die einzigen beide Unterschiede betreffen den Typ des zu komprimierenden/dekomprimierenden Feldes und das Fehlen der optionalen Parameter zur Codepage Konvertierung. Zur Dekomprimierung ist die Methode DECOMPRESS_BINARY zu verwenden.

Als Typ des zu komprimierenden/dekomprimierenden Feldes wird ein XSEQUENCE, also entweder ein Feld vom Typ X oder XSTRING, benötigt.

Anwendungsfälle

Wo ist nun eine Anwendung der Klasse denkbar und sinnvoll?

Beispielsweise werden in einer Anwendung Langtexte/Notizen erfasst oder Dokumente/Bilder hochgeladen. Komprimiert können diese wesentlich platzsparender in SAP Tabellen abgelegt werden.In Programmen verwendete XML Strings können auf diese Weise platzsparend im System abgelegt werden.Bei einer RFC Kommunikation zwischen zwei SAP Systemen bietet sich diese Technik an, um bei großen Datenmengen die Netzwerkbelastung wesentlich zu reduzieren und den Datenaustausch somit zu beschleunigen.

The post CL_ABAP_GZIP – Komprimieren von Strings oder binären Inhalten in ABAP appeared first on Cadaxo GmbH.

Auswertungsergebnisse mit Crystal Reports im SQL Cockpit visualisieren

$
0
0

SQL Cockpit – Analyse mit Crystal Reports

Ab SAP NetWeaver 7.02 besteht die Möglichkeit ALV Ergebnislisten auch im Crystal Report Layout anzuzeigen. Selbstverständlich unterstützt auch die ALV Anzeige des SQL Cockpits diese weitere Darstellungsform.

Um eine SQL Cockpit Ergebnisliste als Crystal Reports anzuzeigen, muss lediglich die View-Darstellung auf Crystal Reports geändert werden. Die Funktion steht jedoch nur dann zur Verfügung, wenn in Ihrem System die Anzeige von ALV Listen im Crystal Report Layout erlaubt ist.

Screenshot - Crystal Reports in SQL Cockpit


Screenshot - Crystal Reports in SQL Cockpit

Die in Crystal Reports angezeigten Auswertungen können mit der Vollversion von Crystal Reports weiterbearbeitet werden. Beispielsweise kann mit der Vollversion von Crystal Reports die Spaltenformatierung angepasst werden, Texte können ergänzt oder geändert werden oder für eine bessere Visualisierung können Charts eingebunden werden.

Voraussetzungen

Zum Anzeigen von ALV Listen im Crystal Reports Layout müssen notwendige Komponenten lokal installiert sein. Es handelt sich dabei um den Crystal Reports Viewer und um den ALV Connector. Nähere Informationen dazu sind im SAP Hinweis 135044 zu finden.Im Implementation Guide muss die Anzeige von ALV Listen im Crystal Report Layout aktiviert werden. Die Einstellung kann auch direkt mit dem Report SALV_GZT_CUSTOMIZING vorgenommen werden.

The post Auswertungsergebnisse mit Crystal Reports im SQL Cockpit visualisieren appeared first on Cadaxo GmbH.

HCP IoT Raspberry Demo

$
0
0

iotdemo0

Im Jahr 2015 ist mit dem  Begriff IoT ein neuer IT Trend vermehrt aufgetaucht. Gartner zählt IoT als einen der 10 wichtigsten IT Trends des Jahres 2016:

http://www.gartner.com/newsroom/id/3143521

Ich habe dies zum Anlass genommen und wollte die in der HCP zur Verfügung gestellten Services im IoT Bereich einem Praxistest unterziehen. Um den neuen IoT Service der HCP zu testen habe ich meinen RaspberryPi als Sensor Datenlieferant umfunktioniert.

Hierzu gibt es unzählige Guides und unterschiedliche Sensoren auf die ich hier nicht genauer eingehen möchte. Für mein Beispiel habe ich jedenfalls einen DHT22 (Temperatur/ Luftfeuchtigkeit) von AdaFruit verwendet. Er soll seine Daten später zum IoT-Service der HCP schicken.

 

Einrichten der HCP

Zuerst benötigen wir einen Account auf der HCP Trial. Dieser kann via https://account.hanatrial.ondemand.com erstellt werden. Haben wir unsere Zugangsdaten erhalten so aktivieren wir zuerst im Menüpunkt Services den „Internet of Things Service“:

iotdemo1

Die HCP generiert nun ein Schema und auch eine Java Applikation welche wir im über den Menüpunkt Subscriptions(iotcockpit) sehen können und auch starten wollen. Im IoT Cockpit ist es nun ganz wichtig im Menüpunkt Roles den eigenen User zuzuweisen. Da es hier bei mir immer zur Verwirrung gekommen ist habe ich kurzerhand beide User assigned die in der HCP immer wieder auftauchen(also s-User und s-User+trial).

iotdemo2

Ist dies erledigt finden wir im Punkt Overview die Start-URL zu unserem IoT Cockpit.

iotdemo3

Mit einem Klick auf die URL starten wir nun das Cockpit.

Devicekonfiguration

Im Cockpit müssen wir nun unsere Devices konfigurieren, damit unser IoT Service auch mitbekommt welche Geräte Sensordaten schicken dürfen.
Dazu bekommen wir pro registriertem Device einen Token, doch dazu später mehr. Im Device Management sehen wir nun die 3 Kacheln:

  • Device Types
  • Message Types
  • Devices

In dieser Reihenfolge werden wir nun auch vorgehen um unser IoT zu konfigurieren.

Device Types

Zuerst legen wir mit einem Klick auf die Kachel „Device Types“ den Device Type an. Am unteren Ende findet man einen Button mit einem Plus. Hier muss man sonst eigentlich nur einen Namen vergeben.

Message Types

Nun weiter zum Message Type. Hier definieren wir eine Struktur wie die Daten geliefert werden sollen. Mit dem Plus am unteren Ende können wir nun einen neuen Namen auswählen und im Folgeschritt die Struktur definieren. In meinem Fall habe ich hier den Namen temperatur gewählt mit 2 Feldern, temperatur(Temperatur) und humidity(Luftfeuchtigkeit).

iotdemo4

Device

Auch hier beim Device haben wir wieder ein ähnliches vorgehen. Mit dem Plus unten legen wir das neue Device an und wählen unseren Namen gemeinsam mit der Device Type die wir im Schritt 1 angelegt haben.

Ist das Device angelegt bekommen wir in einem Popup einen OAuth token angezeigt.

In der Registerkarte Information sehen wir nun eine generierte Device ID, diese gemeinsam mit dem OAuth token aus dem Poup im Anlegeprozess zuvor brauchen wir in einem späteren Schritt. Deshalb bitte Beides notieren.

Geschafft unser Device ist nun eingerichtet!

Zurück im Overview starten wir nun die Kachel „Deploy Message Management Service“.

iotdemo5

Auf Deploy klicken, Popup bestätigen und die angezeigte URL klicken, damit wird das HCP Cockpit gestartet.

iotdemo6

Hier sehen wir nun im Overview beim Punkt State, dass der Service am Starten ist. Es kann sein, dass es bis zu 5 Minuten dauert bis der Status auf Grün und gestartet ist.

Ist der Status einmal auf Grün so können wir von unserem Cockpit Daten zum IoT Service schicken.

Hierzu gibt es auf GitHub ein Starterkit(basierend auf PYTHON) welches man verwenden kann: https://github.com/SAP/iot-starterkit

Ich habe mich jedoch für PHP mit der cURL Extension entschieden, da ich bereits ein PHP Script hatte welches die Daten für einen anderen Service zur Verfügung stellte.

Die in eckige Klammern gesetzten Zeichen:

[USER]: HCP Trial User
[MessageTypeID]: Message Type ID aus dem Cockpit
[oAuth Token]: oAuth Token aus dem Cockpit des registrierten Device
[DeviceID]: DeviceID aus dem Cockpit des registrierten Device

Bitte mit den zuvor notierten Daten richtig versorgen:

function readSensor($sensor) {

 $output = array(); 
 $return_var = 0; 
 $i=1; 
 exec('sudo /usr/local/bin/loldht '.$sensor, $output, $return_var); 
 while (substr($output[$i],0,1)!="H") { 
           $i++; 
 } 
 $humid=substr($output[$i],11,5);
 $temp=substr($output[$i],33,5);

 $ch = curl_init();
 $url = 'https://iotmmss[USER].hanatrial.ondemand.com/com.sap.iotservices.mms/v1/api/http/data/[DeviceID]';

 // Build body
 $data_string = '{"mode":"async", "messageType":"[MessageTypeID]", "messages":[{"temperature":'.$temp.', "humidity":'.$humid.'}]}';

 // Build headers
 $headers = Array();
 $headers[0] = 'Authorization: Bearer ' . '[oAuth Token]';
 $headers[1] = 'Content-Type: ' . 'application/json;charset=utf-8';
 $headers[2] = 'Content-Length: ' . strlen($data_string);
 
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_exec($ch);
 curl_close($ch);

}

Dieses Script habe ich in der Crontab des auf Linux basierenden Raspbian Betriebssystem eingetragen und wird in meinem Fall alle 5 Minuten aufgerufen.

Das Ergebnis können wir nun in unserem MMS Cockpit betrachten, welches wir aus dem iot Cockpit heraus mit der Entsprechenden Kachel starten können.

iotdemo7

Weiterfürhende Links

https://de.wikipedia.org/wiki/Internet_der_Dinge

https://help.hana.ondemand.com/iot/frameset.htm

The post HCP IoT Raspberry Demo appeared first on Cadaxo GmbH.

SAP CodeJam SAPUI5 hosted von Cadaxo

$
0
0

Am 5. November 2015 veranstalte die Firma Cadaxo gemeinsam mit der SAP die erste SAPUI5 CodeJam in Wien. Zweck dieser CodeJam war es Entwickler zusammenzubringen, um gemeinsam die neue SAP Technologie SAPUI5 kennenzulernen, gemeinsam auszuprobieren, praxisnah zu entwickeln und dabei Spaß haben.

Die SAP Expertin Denise Nepraunig führte diese Veranstaltung und stand den Teilnehmern mit Rat und Tat zur Seite. Nach einer kleinen Einführung in die Materie, dem Kennenlernen des WebIDE, der Entwicklungsumgebung für SAPUI5 Apps, ging es gleich ran an die Tasten.
Sowohl Erfahrene SAPUI5 Entwickler, als auch Beginner befassten sich intensiv mit dem Thema und konnten am Ende des Tages beachtliche, eigens-programmierte SAPUI5 Apps vorweisen.

IMG_0172 IMG_0173

 

Trotz der anstrengenden Arbeit, kam der Spaß nicht zu kurz:

IMG_0189 IMG_0117IMG_0151

Dieses hervorragende Mittagessen haben wir uns redlich verdient:

IMG_0250 IMG_0236 IMG_0248

Nach getaner Arbeit haben wir den Abend bei dem einen oder anderen Glas Bier und Wein, gemütlich ausklingen lassen…

IMG_0264

Wem die Fotos nicht genügen, hier noch ein kurzes Video über die SAPUI5 CodeJam: SAP CodeJam SAPUI5 Wien

Nach so viel positives Feedback, können wir beruhigt sagen, dass es ein gelungenes Event war, bei dem für jeden was dabei war. Ich freue mich schon auf die nächste SAP CodeJam in Wien.

Ich möchte mich auch bei allen Teilnehmern bedanken und natürlich aus bei Denise! CodeJam rocks!

 

The post SAP CodeJam SAPUI5 hosted von Cadaxo appeared first on Cadaxo GmbH.

ABAP – Das gibt’s ja nicht!

$
0
0

Ich wollte schon länger einmal über ein paar seltsame Dinge in ABAP schreiben. Es gibt nämlich ein paar Sachen in ABAP bei denen man sich einfach nur wundert. Na dann, fangen wir mal an:

BSEG, MARA oder DMBTR

Wer kennt sie nicht, die berühmten SAP ECC Tabellen BSEG oder MARA. Auch die Felder DMBTR oder GSBER sind sicher jedem bekannt.

Aber warum gibt es eigentlich solche komischen Kürzel, haben die Entwickler hier einfach ein paar Buchstabenwürfel verwendet? Natürlich nicht, das sind ganz einfach Relikte
aus R/2. Übrigens, DMBTR steht für “Deutsche Mark Betrag”!dmbtr

In R/2 waren nur 4stellige Tabellennamen und 5stellige Feldnamen erlaubt. SAP hat zwar damals mit R/3 eine völlig neue Technologie geliefert, aber viele ABAP Codes, Tabellen und Prozesse wurden einfach 1:1 übernommen. Und bis dato hat sich bei SAP offensichtlich niemand getraut hier einzugreifen.

Das älteste Programm das ich in einem aktuellen ECC gefunden habe, weißt Kommentare aus dem Jahr 1989 auf!

Bin schon jetzt gespannt, ob wir die Tabellen in S/4 HANA wiederfinden.

 

FOR ALL ENTRIES

Manche ABAP Entwickler schwören auf den FOR ALL ENTRIES Zusatz, manche verteufeln ihn. Ich bin da gespalten denn eigentlich mag ich das Zeug überhaupt nicht, aber andererseits komme auch ich manchmal nicht darum herum.

Aber was ich wirklich – sagen wir mal bescheiden – finde ist, wie ein SELECT mit FOR ALL ENTRIES reagiert, wenn die FOR ALL ENTRIES-Tabelle leer ist. Es werden einfach alle sonstigen Selektionsbedingungen komplett ignoriert und ein kompletter Tablescan durchgeführt. Ohne ersichtlichen Grund.

Hier ein Auszug aus der SAP Online Original Dokumentation:

Before using an internal table itab after FOR ALL ENTRIES, always check that the internal table is not initial. In an initial internal tables, all rows are read from the database regardless of any further conditions specified after WHERE. This is not usually the required behavior.

Nicht zu vergessen ist, dass FOR ALL ENTRIES auf unterschiedlichen Datenbanken teilweise ganz unterschiedlich performant ist. Es gäbe noch viele weitere Argumente (Bufferung, .. ) FOR ALL ENTRIES nicht zu verwenden, aber belassen wir es erst einmal dabei.

Man merke sich jedenfalls: Immer die Größe der FOR ALL ENTRIES Tabelle vor dem SELECT überprüfen – oder noch besser, über Alternativen wie JOINs oder Subselects nachdenken.

 

POOL/Cluster Tabellen

Oh, wie ich diese POOL und CLUSTER Tabellen liebe. Von der Technologie her betrachtet meiner Meinung nach einfach ein ziemlicher Schwachsinn. – Aber auch für diese Technologie gibt es einen triftigen Grund: Wie oben erwähnt waren in R/2 Tabellen nur max. 4stellig. Irgendwann ist SAP dann mit der 4stellen Limitierung einfach an Grenzen gestoßen und hat daher versucht hinter einer Tabelle mehrere Tabellen abzubilden. Das war die Geburt der POOL/CLUSTER Tabellen!

Aber es gibt Hilfe! Wenn wir dann einmal alle auf SAP Hana umstellen bekommen die POOL/CLUSTER Tabellen nach so vielen Jahren endlich ihren verdienten Ruhestand.

Es wäre aber nicht SAP wenn sie für den Vorgang nicht auch einen Namen gefunden hätte: „Depooling/Declustering“.

 

ABAP Open SQL und SQL92

SAP hat mit den aktuellen NetWeaver Releases 7.40 SP5, SP8 und SP12 bzw. NetWeaver 7.50 ein paar wichtige Erweiterungen in das ABAP Open SQL aufgenommen und nähert sich so nach und nach dem Standard SQL92. Manche ABAP Entwickler sind deswegen (SQL Expressions, CDS Views, … ) in heller “Juhu!” Aufregung!

Liebe Entwickler, bitte vergesst nicht – das 92 hinter SQL Steht für das Jahr! Im Jahr 1992 wurde der Standard definiert. Diese jetzt aufgenommenen Erweiterungen werden von allen namhaften Datenbanken bereits seit Jahrzehnten unterstützt.

Ich meine, eine Erweiterung von ABAP Open SQL war seit Jahren längst überfällig!

 

TCURX

In der TCURX ist gecustomized, wie die Dezimalstelle von Währungen in einem SAP zu interpretieren sind. Wieso das?

Geboren wurde die Tabelle noch im R/2, als auch noch Währungen wie die italienische Lira existiert haben. Die Lira waren teilweise so “groß” dass die Betragsfelder im R/2 nicht mehr ausgereicht hätten. Also hat man kurzerhand die Kommastellen laut Datenbank außer Kraft gesetzt und dafür die Tabelle TCURX erschaffen. Erst wenn eine Währung nicht in der TCURX enthalten ist, gelten für die Währung die 2 Nachkommastellen.

Im Bereich von Schnittstellen ist das immer wieder ein extra Aufwand – nur um die Betragfelder hin und her zu konvertieren. Beispielswiese für YEN.

Ob man hier nicht irgendwann einmal eine besser Lösung hätte finden können?

 

Jetzt also doch, CODE PUSH DOWN

Jahrelang hat SAP ihren Kunden und uns Entwickler gesagt, DB Nahe Operationen (EXEC SQL, DB Hints, … ) nur in begründeten Fällen und mit Vorsicht zu verwenden. Man verliere so die Unabhängigkeit zur Datenbank oder hat natürlich einen Adaptierungsaufwand wenn gleiches Coding mit verschiedenen Backend-Datenbanken laufen soll.

Nun, da SAP jetzt mit SAP Hana ja eine eigene tolle Datenbank hat, sieht die Sache natürlich etwas anders aus. Jetzt empfiehlt SAP sogar direkter auf der Datenbank “operieren” um deren Vorteile auch wirklich nutzen zu können. Das Modewort dafür ist “Code Push Down”. Aus ABAP Sicht werden darunter die CDS Views, die AMDB Prozeduren und die SQL Expressions verstanden. Auf der SAP Hana ist darunter z.B. SQL Script zu verstehen.

Nicht falsch verstehen, ich bin ein großer Fan von SAP Hana. Die ist einfach – sorry für den Ausdruck – Sauschnell!

Ich find es halt einfach nur interessant.

 

The post ABAP – Das gibt’s ja nicht! appeared first on Cadaxo GmbH.

Consulting Portfolio

$
0
0

Consulting PortfolioUnsere Berater sind seit vielen vielen Jahren erfolgreich für unsere Kunden im Einsatz. Wir haben schon die unterschiedlichsten Technologien und SAP Anwendungen kommen und auch wieder gehen sehen.

Unser Vorteil ist, das wir uns nie auf einzelne Module oder Bereiche beschränkt haben. Unser Ziel war es immer die Prozesse End2End beraten und implementieren zu können. Das klassische „Das macht der Kollege vom Modul XY“ ist und fremd.

Rufen Sie uns, wenn sie neue Anwendungen implementieren oder unterschiedlichste Technologien einsetzen wollen. Wir können Sie vom Lösungsdesign über die Projektabwicklung bis hin zum erfolgreichen GoLive (und natürlich auch darüber hinaus) unterstützen. Wenn Sie wissen wollen, wo wir uns schon überall herumgetrieben haben und Sie unsere Schwerpunkte kennen lernen wollen dann finden Sie hier einen Überblick
 

Unsere Methodiken

Über die Jahre haben sich viele Projektmethodiken entwickelt. Wir haben von bei vielen Projekten nach dem Wasserfall Modell, mit Hilfe des Microsoft Solution Frameworks, der SAP ASAP Methode und wie sie noch alle heißen, begleitet. Jetzt „ganz neu“ auf dem Markt ist das Agile Vorgehen (zB Scrum).
Aber nicht alle Methoden sind für alle Kunden und alle Projekte geeignet. Wir kennen die Vor- und Nachteile, die Hürden und die Herausforderungen an die Organisation. Deswegen arbeiten wir nicht fix nach einer Methode, sondern beraten den Kunden gerne um die für Ihn geeignetste Methode zu entwickeln.
Unser Favorit ist natürlich die CCT Methode. Die Cadaxo Chaos Theorie vereint Entwicklungsgeschwindigkeit („mach ma, mach ma”) mit optimaler Planung („des kriag ma hin“) zu außergewöhnlichen Ergebnissen („jo…des schaut ganz … guad … aus.“). Nein im Ernst, unser Teamgeist und unser Engagement sind unerreicht und wir haben abseits von allen Projektpfaden trotz widriger Umstände schon außergewöhnliche Ergebnisse erzielt. Wir geben einfach immer 100%.

The post Consulting Portfolio appeared first on Cadaxo GmbH.


High Class Development

SAP Overview Page – Example – List Card

$
0
0

Introduction

An overview page is a new type of SAP Fiori App since SAPUI5 1.32 which provides a quick overview of user important data at one screen.

overviewPage17

SAP Overview Pages display the data in the form of Cards.

A card is a smart component that uses UI annotation and a single entity set from an OData service to display the data. As of today (SAPUI5 1.32) there are four card types available (List, Table, Stack, Analytic) and in this blog post I will give a description how to set up a List Card.

 

List Cards

There are two types of List Cards – Condensed and Extended.

  • Condensed List Cards – display up to 3 data items in one row.
  • Extended List Cards – display up to 6 data items in one row.

Each type can use two types of flavor – Standard and Bar.

  • Standard Flavor – design without bar = items are numbers and texts
  • Bar Flavor – design with bar = items are combination of numbers, texts + one bar

That means there are four possibilities how to display the List Cards. Take a look at following picture for better understanding of the List Cards concept.

Condensed List Card with Standard Flavor – Top 5 Invoices

Condensed List Card with Bar Flavor – Last Items In Storage

Extended List Card with Standard Flavor – Top 5 Long Working Employees

Extended List Card with Bar Flavor – Top 5 Reordered Products

overviewPage16

 

Prerequisities

I assume you already have an access to  (and are already a little bit familiar with) SAP WEB IDE on SAP HANA Cloud Platform Cockpit (HCP). If not, first of all I would refer you to this tutorial.

As a data source I am going to use Northwind OData service which is available for public and provides some simple data. To use this service we need to set it up in HCP Destinations.

Name: Northwind
Type: HTTP
Description: Northwind OData Service
URL: http://services.odata.org
Proxy Type: Internet
Authentication: NoAuthentication
Additional Properties
WebIDEEnabled true
WebIDESystem Northwind_Data
WebIDEUsage odata_gen

SAP WEB IDE Part

Thanks to SAP WEB IDE wizards the creation of Overview Page project is pretty straightforward. We need to create a new project from Overview Page Application Template, write name of our project, select data source – Service URL – Northwind OData Service (since our destination already contains the services.odata.org domain, we can type “V3/Northwind/Northwind.svc/” only as the URL Part).

After project creation we can add some cards to our Overview Page. There is also a wizard for this in SAP WEB IDE – simply right click on your created project and find New -> Card. There are some customization settings in the third step – all of them are later editable from Manifest.json file.

The only tricky part about Overview Page is the creation of annotation files and Manifest. json settings (Card customization settings).

The Overview Page project in SAP WEB IDE is executed as SAP Fiori Component on Sandbox.

Condensed List Card with Standard Flavor

overviewPage19

Annotation File for Top 5 Invoices Example

  • Attribute Namespace in tag Schema must match Datasource Alias we enter during Overview Page creation
  • Attribute Target in tag Annotations must match EntityType of EntitySet we are going to use – check metadata.xml
  • Attribute Qualifier is used in Card customization settings – Manifest.json
  • We use 3 tags Record to display 3 items in one row
  • Each Record has attribute path to determine which value from Odata service are we going to display

<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"
    xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:sap="http://www.sap.com/Protocols/SAPData">
    <edmx:DataServices m:DataServiceVersion="2.0">
        <Schema Namespace="NorthwindModel" sap:schema-version="1" xmlns="http://docs.oasis-open.org/odata/ns/edm">
            <Annotations Target="NorthwindModel.Invoice" xmlns="http://docs.oasis-open.org/odata/ns/edm">
                <Annotation Qualifier="Top5Invoices" Term="com.sap.vocabularies.UI.v1.LineItem">
                    <Collection>
                        <Record Type="com.sap.vocabularies.UI.v1.DataField">
                            <PropertyValue Path="ProductName" Property="Value"/>
                        </Record>
                        <Record Type="com.sap.vocabularies.UI.v1.DataField">
                            <PropertyValue Path="ShipName" Property="Value"/>
                        </Record>                       
                        <Record Type="com.sap.vocabularies.UI.v1.DataField">
                            <PropertyValue Path="ExtendedPrice" Property="Value"/>
                        </Record>
                    </Collection>
                </Annotation>
            </Annotations>
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>

Download XML File

Card customization settings – Manifest.json

  • last part of “annotationPath” must match the attribute Qualifier from annotation file
  • “entitySet” must match OData entity – check metadata.xml

	"sap.ovp": {
		"_version": "1.1.0",
		"globalFilterModel": "NorthwindModel",
		"globalFilterEntityType": "",
		"cards": {
			"card00": {
				"model": "NorthwindModel",
				"template": "sap.ovp.cards.list",
				"settings": {
					"listType": "condensed",
					"listFlavor": "standard",
					"sortBy": "ExtendedPrice",
					"sortOrder": "DESC",
					"annotationPath": "com.sap.vocabularies.UI.v1.LineItem#Top5Invoices",
					"category": "Top 5 Invoices",
					"entitySet": "Invoices"
				}
			}
		}
	}

Download JSON File

The other types of list cards can be created in simmilar way.

Condensed List Card with Bar Flavor

overviewPage20

Downolad Annotation File Example

Download Manifest.json Settings

Extended List Card with Standard Flavor

overviewPage18

Downolad Annotation File Example

Download Manifest.json Settings

Extended List Card with Bar Flavor

overviewPage21

Downolad Annotation File Example

Download Manifest.json Settings

 

Useful links

My Overview Page – Git Hub Project

SAP WEB IDE Tutorial

SAP Overview Page Official page

SAP Overview Page Official Video

help.sap.com about Cards

SAPUI5 Docu about Cards

 

 

The post SAP Overview Page – Example – List Card appeared first on Cadaxo GmbH.

IST SAPUI5 wirklich der große Wurf?

$
0
0

Ende der 90er, am Höhepunkt der ersten dot.com Blase, wurde SAP scharf ob ihrer nicht vorhandenen Webfähigkeiten kritisiert. Seitdem ist viel passiert und viele verschiedene Webtechnologien sind gekommen und auch wieder gegangen. Ich hatte immer das Gefühl, das SAP stets auf der Suche nach der richtigen Technologie, dem richtigen Vorgehen war.

 

Bei dieser Suche gab es für mich gab es drei Meilensteine. Der Internet Transaktion Server (ITS), der es ermöglicht hat jede beliebige SAP GUI Transaktion im Web darzustellen. Die Usability war natürlich grausam, aber noch heute ist es die schnellste und einfachste Methode bestehende Applikationen im Web verfügbar zu machen. Die meisten Kunden verwenden es zum Glück nur für selten genutzte Applikationen.

 

Business Server Pages (BSP). Entstanden als Freizeitprojekt einiger Walldorfer Entwickler, legte diese Technologie die Grundlage für den Web Application Server wie wir ihn heute kennen. Und viele andere SAP Webtechnologien rendern zu guter Letzt mittels BSP deren User Interface.

 

Für mich ist SAPUI5 jetzt der dritte große Meilenstein. Was bringt mich dazu, das zu glauben? Um das zu begründen sollten wir zuerst schauen, was SAP aus den vergangenen User Interfaces gelernt hat. Mit BSP war SAP am Puls der Zeit. Man hatte eine ähnliche Technolgie wie Microsoft mit ASP (Application Server Pages) und Java mit JSP (Java Server Pages). Bei den Technologien und Ansätzen, die sich daraus entwickelt haben, sind vor allem Webdynpro und WebUI zu nennen. Dies sind keine Webrendering Technologien, sondern Konzepte und Frameworks, die Entwicklern die Programmierung von strukturierten Anwendungen erleichtern sollten. Leider hat SAP damals immer mehr sein eigenes Süppchen begonnen zu kochen, sodass man sich von den großen Strömungen entfernt hat. Insbesondere im Bereich der Usability und der Nutzbarkeit in verschiedensten Browsern und auf unterschiedlichsten Endgeräten, wurde der Anschluss verpasst.

 

Dann kam HTML5 und damit nicht nur eine neue Webtechnologie (mit HTML wie man es aus den Neunzigern kennt, hat HTML5 herzlich wenig zu tun) sondern auch ein neues Designparadigma, wie man am Besten für unterschiedlichste Endgeräte entwickeln sollte.

 

Es hat wohl ein Umdenken innerhalb der SAP stattgefunden, denn jetzt hat SAP plötzlich bekommen, alles richtig zu machen. Anstelle der Entwicklung einer ähnlichen Technologie setzt SAP nun genau auf HTML5 auf. Somit profitiert SAP sofort von allen Weiterentwicklungen des weltweiten Standards HTML5. Und SAPUI5 ist ja keine eigenständige Technologie, sondern eine zusätzliche API, die die Darstellung von Geschäftsprozessen und Daten im Web vereinfachen und verbessern soll.  Davon hat SAP sogar eine Open Source Version (OpenUI5) veröffentlicht.

 

Die richtige UI Strategie zu haben reicht aber nicht aus um festzustellen, ob diese sich auch durchsetzen wird. Denn oft waren die besten Produkte nicht die, die sich dann am Ende durchgesetzt haben. Was lässt mich also glauben, das SAPUI5 sich jetzt hier durchsetzen wird?

 

Es sind die vielen neuen Produkte, der SAP, die jetzt bereits auf diese Technologie setzen. SAP Fiori verwendet UI5 als Technologie um Prozesse aus den bestehenden Systemen einfach und übersichtlich web fähig zu machen. Es gibt schon über 400 verschiedene Apps der SAP und es ist kein Ende in Sicht.

 

SAP Cloud Systeme. Egal ob es die HANA Cloud Platform ist, auf welcher Entwickler mit SAPUI5 neue Applikationen bauen können, auch viele Cloud Standardlösungen der SAP (zB Cloud for Customer) setzen bereits auf der UI5 Technologie auf.

 

Das sind schon viele Zeichen, die die Wichtigkeit dieser UI Strategie erahnen lassen. Aber das größte Argument kommt noch. S4 HANA, DIE Zukunft der SAP, das System, das das erfolgreichste und am weitesten verbreitete Produkt der SAP Familie ablösen soll, das in die Fußstapfen von R/3 (Entschuldigung: SAP ERP) treten soll. Dieses Produkt setzt komplett auf SAPUI5 als Oberflächentechnologie.

 

Und damit ist für mich klar. Das ist keine weitere zusätzliche Oberfläche, die in bestimmten Szenarien und einigen Lösungen zum Einsatz kommt, sondern das wird alle anderen Oberflächen ablösen oder zu Nischenanwendungen degradieren. Und das finde ich gut. Es ist eine großartige Technologie, sie ist wunderbar mit Non-SAP Technologien kombinierbar. Egal ob es einmal sehr fancy sein soll, oder bestimmte Technologien in SAP Prozesse integriert werden können (zum Beispiel Image Recognition), als Entwickler kann man aus einem unendlichen Pool an Lösungen auswählen.

 

 

 

 

 

The post IST SAPUI5 wirklich der große Wurf? appeared first on Cadaxo GmbH.

Webinar – ABAP 7.40 SP5/SP8 Releaseabhängige Änderungen – Unterlagen, Links, …

$
0
0

Unterlagen/Links zum Webinar ABAP 7.40 SP5 SP8 Releaseinformationen

Unsere nächsten Webinar Termine

SAP Online Dokumenation

Videos (Teched, … )

Blogs

Behind the scenes

Hier ein Bild von unserem Webinar. Man beachte, worauf wir die Webcam in der Mitte platziert haben!

20160129_111931

 

 

The post Webinar – ABAP 7.40 SP5/SP8 Releaseabhängige Änderungen – Unterlagen, Links, … appeared first on Cadaxo GmbH.

Neue Open SQL Features ab ABAP 7.40, SP8

$
0
0

Mit dem Release 7.40, SP5 und SP8, hat sich im Open SQL einiges getan. SAP hat nach einem längeren Stillstand bei Open SQL endlich an den SQL92-Standard, der aus dem Jahre 1992 stammt, angeknüpft und unterstützt nun Features, wie UNION und CASE.

 

Neue Syntax

Mit 7.40, SP5 gibt es einen neuen SQL Parser im ABAP Kernel und somit auch eine neue SQL Syntax. Das Verwenden dieser neuen Syntax ist auf jeden Fall ein Muss, wenn man die neuen SQL Features nutzen möchte.

Hier die zwei wichtigsten Punkte davon:

  • Aufgelistete Spaltennamen können und sollen durch Komma getrennt werden
  • Bei Hostvariablen soll ein @ vorangestellt werden

 

Nachfolgend ein Beispiel mit der neuen SQL Syntax:

DATA: l_hugo TYPE C LENGTH 10.

SELECT mc_name1,
       @l_hugo AS hugo,
       @sy-uname AS userid,
       ‘X‘ AS true
       FROM TABLE BUT000 INTO @ls_result.

 

 

Open SQL Expressionen

Die Open SQL Expressionen werden in der Spaltenliste nach dem SELECT Befehl verwendet. Das Ergebnis dieser Expression wird direkt auf der Datenbank berechnet und in die entsprechende Spalte geschrieben. Dabei kann man sowohl andere Spalten, als auch Hostvariablen für die Berechnung verwenden.

Dabei ist hier das Stichwort „Code push down“. Diese Strategie ist in letzter Zeit in aller Munde. Ursprünglich wurde es immer nur mit der SAP HANA in Verbindung gebracht. Doch spätestens jetzt, mit diesen neuen Open SQL Features, eröffnen sich ganz neue Möglichkeiten für Entwickler, auch mit einer traditionellen Datenbank darunter.

Mit „Code push down“ soll so viel Anwendungslogik wie möglich, vom Applikationsserver auf die Datenbank verlagert werden. D.h., dass alle rechen- bzw. daten-intensive Logik, die die Datenbank berechnen kann – es auch tut.

Es liegt natürlich im Ermessen des Entwicklers, die Logik sinnvoll auszulagern. In Anbetracht der Performance lässt sich definitiv eine Verbesserung erzielen.

Hier eine Auflistung der Open SQL Expressions

  • Verwenden von Festwerten
  • Arithmetische Kalkulationen (+,-,*,/)
  • Arithmetische Funktionen (ABS, CEIL, FLOOR, DIV, MOD)
  • Verketten von Zeichenketten mit &&
  • Typanpassung mit CAST (momentan nur von DEC zu FLTP)
  • COALESCE Funktion
  • Fallunterscheidung mit CASE

Es können auch mehrere SQL Expressionen miteinander kombiniert und durch Verwendung von runden Klammern, auch priorisiert werden.

 

Nachfolgend einige Beispiele der SQL Expressionen:

Zu Demozwecken wurde eine eigene DB-Tabelle ‚ZDATENTYPEN‘ verwendet, deren Spaltennamen, nach den Datentypen der jeweiligen Spalte, vergeben wurden.

Beispiel einer arithmetischen Kalkulation:

SELECT INT1 AS I1,
INT2 AS I2,
int4 AS I4,
100 + INT4 AS I4CALC
FROM ZDATENTYPEN.

Ergebnis:

bsp1

Erklärung: Beispiel einer einfachen Addition. Sie ersten drei Spalten werden direkt ausgegeben. Die vierte Ausgabespalte zweigt den Wert der dritten Spalte + 100. Der Spaltennamen der vierten Spalte lautet „I4CALC“.

 

Beispiel einer arithmetischen Funktion:

Hier ein Beispiel einer Auf- und Abrundung:

SELECT DBKEY,
DEC8_2,
CEIL( DEC8_2 ) as ceil,
FLOOR( DEC8_2 ) as floor
FROM ZDATENTYPEN.

Ergebnis:

bsp2

Erklärung: Mit der arithmetischen Funktion CEIL findet eine Aufrundung, mit FLOOR eine Abrundung statt.

 

Beispiel eines Castings:

SELECT dec8_2,
CAST( dec8_2 as FLTP ) as cast
from ZDATENTYPEN.

Ergebnis:

bsp3

Erklärung: In der zweiten Spalte wurde das Feld, das einen dezimalen Datentypen hat, als Float ausgegeben.

!! Achtung: mit SP8 ist der CAST nur von DEC auf FLTP möglich !!

 

Beispiel Verketten von Zeichenketten:

SELECT char10,
char20,
char10 && ';' && char20 as concatenate
from ZDATENTYPEN.

Ergebnis:

bsp4

Erklärung: In der dritten Spalte werden die ersten zwei Zeichenketten zusammen, durch ein Semikolon getrennt, ausgegeben.

 

Beispiel COALESCE:

SELECT a~partner,
coalesce( b~addrnumber, 'NO ADDRESS' ) AS addrnr
from but000 as a left outer join
but020 as b on b~partner = a~partner.

Ergebnis:

bsp5

Erklärung: Liefert die Join-Verknüpfung ein Ergebnis aus der BUT020, wird die Adressnummer in die zweite Spalte geschrieben, ansonsten wird der Wert „NO ADDRESS“ hineingeschrieben.

 

Beispiel einer Fallunterscheidung mit CASE:

select type,
case when type = '1' then 'Person'
when type = '2' then 'Unternehmen'
else 'Unbekannt'
end as type_desc,
mc_name1
from but000.

Ergebnis:

bsp6

Erklärung: In der zweite Spalte, vom Namen TYPE_DESC, wird je nach TYPE = 1, der Wert „Person“ und bei TYPE = 2, „Unternehmen“ hineingeschrieben. Bei allen anderen Werten, wird „Unbekannt“ ausgegeben.

 

Beispiel einer Kombination:

SELECT type,
CASE WHEN type = '1' THEN ( 'Person' && '/' && type )
WHEN type = '2' THEN ( 'Unternehmen' && '/' && type )
END AS type_desc,
mc_name1
FROM but000.

Ergebnis:

bsp7

Erklärung: Hier wurde einer Fallunterscheidung mit CASE und eine Verkettung vom Zeichenketten miteinander kombiniert.

 

CDS – Core Data Services

Bei den CDS handelt es sich um eine neue Art der View-Definition in SAP. Nachdem es bei den traditionellen Datenbank-Views sehr viele Einschränkungen gibt, wie keine Outer Joins, keine komplexen Joins, keine Kommentare, kein Union, keine View auf eine View usw. , hat sich dahingehend mit den CDS Views ein revolutionärer Fortschritt entwickelt. Es gibt keine Einschränkungen mehr. Mittels Datenbank-unabhängigen DDL statements (Data Definition Language) sind der Kreativität und Komplexität fast keine Grenzen mehr gesetzt.

DDL umfasst die komplette Data Definition Language vom SQL und erweitert es um die Möglichkeit sogenannte Annotationen und Assoziationen zu definieren. Hier eine Auflistung der Möglichkeiten:

  • SQL Funktionen (ABS, CEIL, DIV, DIVISION, CONCAT, COALESCE,…)
  • Parameter
  • Fallunterscheidung mit CASE
  • CASTING
  • Built-In Funktionen (Konvertierungsfunktionen für Währungen und Einheiten)
  • UNION, UNION ALL
  • Associations

Die CDS Views sich vollständig im ABAP integriert. Sowohl im ABAP Dictionary sichtbar, als auch mit den SAP Transportmanagement-Tool transportierbar.

Die Pflege erfolgt mit den ADT (ABAP Development Tools) im Eclipse.

Hier ein kleines, einfaches Beispiel einer CDS View:

cds1

 

Auch die CDS Views tragen zur „Code push down“ Strategie bei. Sogar mehr als die SQL Expressionen, da es hier durchaus mehr Möglichkeiten gibt.

Der Zugriff auf CDS Views erfolgt mittels Open SQL. Nachfolgend ein paar Beispiele von CDS Views.

Beispiel einer CDS View mit UNION ALL:

cds2

Zugriff auf die View:

SELECT partner, type, mc_name1, mc_name2
FROM ZCDSUNION
WHERE type <> '3'
ORDER BY mc_name1 ASCENDING.

Ergebnis:

cds2_result
 
Beispiel einer CDS View mit einer Währungskonvertierung:

cds3

Zugriff auf die View:

SELECT * FROM ZCDSCURR( exc_date = @sy-datum,
 to_curr = 'USD' )
 WHERE currency <> 'USD'.

Ergebnis:

cds3_result

 

 

ABAP Managed Database Procedures

Als dritter Newcomer und „Code push down“-Vertreter, darf ich AMDP vorstellen. ABAP Managed Database Procedures (AMDP) sind sogenannte Prozeduren, auch bekannt als „Stored procedures“.  Diese sind in nativer Datenbank-Sprache implementiert. Momentan ist SAP HANA, die einzige Datenbank, die AMDPs unterstützt.

Dazu gibt es ein klassenbasiertes Framework, mit dem sich AMDP Prozeduren verwalten und aufrufen lassen. Eine AMDP Klasse implementiert das spezielle Interface (IF_AMDP_MARKER_HDB). Bei der Methodenimplementierung muss die Datenbank und die entsprechende Datenbank-Sprache angegeben werden. Momentan sind nur SQL-Script und die SAP HANA möglich.

Die Pflege von AMDPs erfolgt nur mit ADT (ABAP Development Tools) in Eclipse.
 

The post Neue Open SQL Features ab ABAP 7.40, SP8 appeared first on Cadaxo GmbH.

OpenSQL 1×1

$
0
0

OpenSQL ist eine Datenbanksprache mit der man bestimmte Operationen auf der Datenbank durchführen kann. Es stammt von der Firma SAP und wurde von der älteren Datenbanksprache SQL abgeleitet.

SQL, Abkürzung für „Structured Query Language“, wurde von Edgar Codd (IBM), Donald Chamberlin und Raymond Boyce, in den 1970er entworfen.

Es ist eine Sprache zum Abfragen und Bearbeiten von Datenbeständen in relationalen Datenbanken und zur Definition neuer Datenstrukturen.

Es gibt drei Kategorien von SQL Befehlen:

  • DML – Data Manipulation Language
    • Einfügen, Ändern, Löschen und lesender Zugriff
  • DDL – Data Definition Language
    • Definition neuer Datenbankstrukturen (Schemas, Tabellen usw.)
  • DCL – Data Control Language
    • Zur Rechteverwaltung und Transaktionskontrolle

In SAP bildet das ABAP Dictionary die DDL- und DCL-Befehle ab. Open SQL beinhaltet die DML Befehle. Wobei hier noch zu erwähnen ist, dass es nur aus einer Untermenge der Schlüsselwörter des Standard-SQL besteht. Nachfolgend eine Auflistung der Open SQL Schlüsselwörter, die verwendbar sind:

Schlüsselwort Funktion
SELECT Daten aus Datenbanktabellen lesen
INSERT Neue Zeilen in Datenbanktabellen einfügen
UPDATE Zeileninhalte in Datenbanktabellen ändern
MODIFY Neue Zeilen in Datenbanktabellen einfügen oder bestehende Zeileninhalte ändern
DELETE Zeilen aus Datenbanktabellen löschen
OPEN CURSOR,
FETCH,
CLOSE CURSOR
Zeilen von Datenbanktabellen über den Cursor lesen

Bevor wir uns den einzelnen Schlüsselwörtern widmen und diese näher erläutern, trägt der folgende Absatz noch zum besseren Verständnis vom Open SQL und seiner Verwendung in SAP, bei.

Ein SAP System ist ein drei Schichten System, bestehend aus UI, Applikationsserver und einer Datenbank. Die Datenbank kann von unterschiedlichen Datenbankenherstellern, wie MaxDB, DB2, Oracle, MSSQL, usw., verwendet werden. (Hier eine vollständige Auflistung der von der SAP unterstützten Datenbanken: http://help.sap.com/saphelp_nw73/helpdata/de/84/0cb892edfbc34290c1685132006662/content.htm)

Da jede von diesen Datenbanken einen unterschiedlichen SQL-Dialekt besitzt, wurde Open SQL eingeführt.

Denn Open SQL ist eine portable und datenbank-unabhängige Sprache. D.h., von allen Programmen bzw. Entwicklungen, die am Anwendungsserver laufen und Open SQL verwenden, können deren Open SQL Befehle auf jeder beliebigen darunter liegenden Datenbank ausgeführt werden.

Genauer gesagt, setzt die ABAP Laufzeitumgebung die Open SQL Befehle in die entsprechende Native SQL Befehle um. Mit Native SQL bezeichnet man das erwähnte spezifische SQL Dialekt der darunter liegenden Datenbank.

Es ist natürlich auch erlaubt Native SQL im ABAP Programm zu verwenden. Dabei arbeitet man mit datenbankspezifischen SQL Anweisungen. Das erlaubt die Einbindung verschiedener Datenbanktabellen, die nicht vom ABAP Dictionary verwaltet werden. Die Einschränkung jedoch ist, dass solche Programme im Allgemeinen nicht auf verschiedenen Datenbanksystemen laufen können.

 

Widmen wir uns nun den oben erwähnten Open SQL Schlüsselwörtern zu:

Schlüsselwort Funktion
SELECT, ENDSELECT Daten aus Datenbanktabellen lesen
INSERT Neue Zeilen in Datenbanktabellen einfügen
UPDATE Zeileninhalte in Datenbanktabellen ändern
MODIFY Neue Zeilen in Datenbanktabellen einfügen oder bestehende Zeileninhalte ändern
DELETE Zeilen aus Datenbanktabellen löschen
OPEN CURSOR,

FETCH,

CLOSE CURSOR

Zeilen von Datenbanktabellen über den Cursor lesen

Wie schon erwähnt sind diese nur eine Untermenge der Standard-SQL Schlüsselwörter, jedoch auch mit einigen SAP-spezifischen Elementen, wie z.B. der Zusatz FOR ALL ENTRIES, angereichert.

Um Datenbestände abzufragen wird das Schlüsselwort SELECT, am häufigsten verwendet. Das Lesen über den Cursor (OPEN CURSOR, FETCH, CLOSE CURSOR) ist auch möglich, jedoch ziemlich selten benutzt. Der Unterschied ist, dass beim Lesen der Daten über einen Cursor, die INTO-Klausel von der SELECT-Anweisung entkoppelt werden kann. Mit OPEN CURSOR wird ein Cursor für die Select-Anweisung geöffnet und danach können die Zeilen der Selektion einzeln in einen flachen Zielbereich gestellt werden.

 

SELECT

Die SELECT-Anweisung wird zum Lesen von Daten aus Datenbanktabellen verwendet und ist in mehrere elementare Klauseln aufgeteilt:

SELECT result

INTO target

FROM source

[WHERE condition]

[GROUP BY fields]

[HAVING  cond]

[ORDER BY fields]. 

SELECT result: result definiert die Struktur der zu lesenden Daten. Dabei können einzelne Spalten oder komplette Zeilen mit * angegeben werden.

INTO target: die INTO Klausel bestimmt den Arbeitsbereich innerhalb eines ABAP Programms indem die gelesenen Daten gestellt werden sollen.

FROM source: source gibt die Datenbanktabelle oder View an von der gelesen werden soll. Die FROM-Klausel kann auch vor die INTO-Klausel gestellt werden.

WHERE cond: In der WHERE-Klausel werden Bedingungen bestellt, welche Zeilen gelesen werden sollen.

GROUP BY fields: Hiermit werden Gruppen mehrerer Zeilen zu einzelnen Zeilen zusammengefasst. Eine Gruppe ist ein Satz von Zeilen, die in jeder Spalte auf der Liste fields die gleichen Werte enthalten.

HAVING cond: Mit dieser Klausel werden logischen Bedingungen auf die durch GROUP BY  kombinierten Zeilen gesetzt.

ORDER BY fields: Hiermit gibt man eine Sortierreihenfolge der zu lesenden Zeilen vor.

 

Bei fast jeder dieser Klauseln gibt es Zusätze, wie z.B. SINGLE oder DISTINCT beim SELECT-Statement, CORRESPONDING FIELDS OF TABLE bei der INTO-Klausel, auf die ich hier nicht näher eingehen werde. (bei Bedarf liefert die SAP Onlinedokumentation Hilfe mit weiteren Details und konkreten Beispielen)

 

Aggregatfunktionen

Auf einzelnen Spalten von Datenbanktabellen können Aggregatsfunktionen angewendet werden. Aggregate sind zusammengefasste Daten einzelner Spalten.

SELECT lines agg( [DISTINCT] s1) [AS a1]

S1 steht für einzelne Spaltennamen. Der Ausdruck agg steht für eine der folgenden Aggregatsfunktionen:

MAX: liefert den Maximalwert der Spalte

MIN: liefert den Minimalwert der Spalte

SUM: liefert die Summer der Spalte

AVG: liefert den Durchschnittswert der Spalte

COUNT: zählt Werte oder Zeilen;

COUNT( DISTINCT s ) liefert die Anzahl unterschiedlicher Werte in der Spalte s. Mit DISTINCT werden doppelt vorkommende Werte aus der Berechnung ausgeschlossen.

COUNT( * ) liefert die gesamte Anzahl der Zeilen in der Ergenismenge

Der Zusatz AS kann ein Alias, ein alternativer Spaltenname a1, definiert werden.

Nachfolgend ein Beispiel einer Select-Anweisung mit einer Aggregatsfunktion:

SELECT MAX( partner ) from BUT000.

Mit dieser Anweisung erhält man den Geschäftspartner mit der höchsten vergebenen Geschäftspartnernummer.

 

Inner Join und Outer Join

Joins geben die Möglichkeit die Datenmenge über mehrere Datenbanktabellen zu selektieren. Bei einem INNER JOIN erhält man nur die Sätze des Kreuzproduktes, zu denen in allen beteiligten Tabellen ein Eintrag existiert.

Bei einem LEFT [OUTER] JOIN werden dagegen aus der linken Tabelle der Join-Verknüpfung auch Sätze selektiert, selbst wenn kein Eintrag in der anderen Tabelle existiert.

Nachfolgend ein Beispiel eines INNER JOINS:

SELECT a~type b~idnumber FROM but000 AS a INNER JOIN but0id AS b ON a~partner = b~partner WHERE a~partner = '0000407014'.

Als Ergebnis würde man einen Datensatz erhalten, wenn dieser in beiden Tabellen vorhanden ist.

Nachfolgend ein Beispiel eines LEFT [OUTER] JOINS:

SELECT a~type b~idnumber FROM but000 AS a LEFT OUTER JOIN but0id AS b ON a~partner = b~partner WHERE a~partner = '0000407014'.

Mit LEFT OUTER JOIN wird nicht wie beim INNER JOIN nur dann ein Wert zurückgegeben wenn sich die JOIN Bedingung in beiden Tabellen findet, sondern hier kann als Ergebnis auch nur der Inhalt von Tabelle 1 (in diesem Fall BUT000) geliefert werden.

UP TO x ROWS

SELECT * from BUT000 UP TO 500 ROWS.

Mit diesem Zusatz werden die Anzahl der zu liefernden Zeilen an die Datenbank übergeben.

GROUP BY
Nachfolgend ein Beispiel eines GROUP BY:

SELECT partner COUNT(*) FROM but0id GROUP BY partner.

SUBQUERIES

Mit Subqueries lassen sich eigene SELECT-Anweisung als Bedingung in der WHERE- oder HAVING- Klausel verschachteln.

Hier ein Beispiel eines Sub-Selects:

SELECT partner FROM but0id WHERE EXISTS ( SELECT partner FROM but000 WHERE type = '2' ) GROUP BY partner.

 

FOR ALL ENTRIES

SELECT * FROM but000 FOR ALL ENTRIES IN lt_partnertab WHERE partner = lt_partnertab~partner.

Mit diesem Befehl werden alle Partner die sich in der internen ABAP Tabelle lt_partnertab befinden selektiert.

Der OPEN-SQL Zusatz FOR ALL ENTRIES ist bekanntlich eine SAP-spezifische Erweiterung und als solche nicht auf den Datenbanksystemen bekannt. Der DB-Optimizer wandelt solche SELECTS in entsprechende SQL Kommandos der Datenbank um.

 

Der Optimizer

Jedes Datenbanksystem verfügt über einen Optimizer. Die Aufgabe des Optimizers ist es, den Ausführungsplan für ein SQL-Statement zu erstellen (z.B. festlegen, ob ein Index- oder Table Scan durchgeführt wird). Es gibt zwei Ausprägungen von Optimizern:

Rule-based

Ein Rule-Based Optimizer analysiert die Struktur einer SQL-Anweisung (hauptsächlich SELECT und die WHERE-Klausel ohne Werte) und den Index der Tabelle(n). Über einen Bewertungsmechanismus entscheidet der Optimizer welches Vorgehen er anwendet, um den Befehl auszuführen.

Cost-based

Ein Cost-Based Optimizer betrachtet zusätzlich einige Werte in der WHERE-Klausel und die Statistiken der Tabellen. Die Statistiken enthalten Low- und High Values der Felder oder sogar ein Histogramm, das die Verteilung der Daten in der Tabelle enthält. Der Cost-Based Optimizer nutzt mehr Informationen über die Tabellen und führt daher meistens zu einem schnelleren Zugriff. Ein Nachteil beim Cost-Based Optimizer ist, daß die Statistiken periodisch auf den neuesten Stand gebracht werden müssen.

 

Rückgabewerte

Ein OpenSQL Befehl liefert folgende Rückgabewerte:

sy-subrc
Konnte der Befehl erfolgreich abgesetzt werden so enthält sy-subrc immer den Wert 0, ansonsten ungleich 0.

sy-dbcnt
Der Inhalt dieses Systemfelds enhält den Wert der durch den Befehl bearbeiteten Zeilen.

 

The post OpenSQL 1×1 appeared first on Cadaxo GmbH.

SQL Cockpit 3.0 Features

$
0
0

Das langerwartete Cadaxo SQL Cockpit 3.0 ist jetzt da! Ein komplett neuer Parser, mit dem sich vollkommen neue Möglichkeiten bei der Gestaltung der SQL Statements ergeben, schmückt die neuste Cockpit Version.

Hier eine Auflistung der Cockpit 3.0 Neuerungen:

  • Unterstützung neuer Open SQL Funktionen
  • Anzeige und Zugriff von CDS Views
  • Generische Spaltenangaben mit dbalias~*
  • Auto-Vervollständigung (Code-Completion)
  • Unterstützung der Cockpit Symbole im kompletten Select-Statement

 

Unterstützung neuer Open SQL Funktionen

Seit SAP ABAP 7.40, SP8 gibt es nun, nach langem Warten, folgende neuen Open SQL Funktionen:

  • Verwenden von Festwerten
  • Arithmetische Kalkulationen (+,-,*,/)
  • Arithmetische Funktionen (ABS, CEIL, FLOOR, DIV, MOD)
  • Verketten von Zeichenketten mit &&
  • Typanpassung mit CAST (momentan nur von DEC zu FLTP)
  • COALESCE Funktion
  • Fallunterscheidung mit CASE

„Das soll NEU sein??“, werden sich nun einige von euch fragen. Die Antwort ist „JA“. Während in anderen Datenbanksprachen Funktionen, wie CASE, UNION und CAST, im Basisrepertoire inbegriffen sind und seit je her unterstützt werden, war das bei Open SQL bisher nicht der Fall. Schon seit den Anfängen von SAP kannte Open SQL nur eine sehr abgespeckte Version der kompletten SQL Syntax und wurde bisher auch kaum erweitert.

Erst als die SAP eigene Datenbank SAP HANA etabliert war, mit ihr die Strategie „Code Push Down“ geschaffen wurde, hat sich bei Open SQL auch einiges getan. Ab ABAP Release 7.40, Servicepaket 8, stehen neue SQL Funktionen zur Verfügung.

 

Das folgende Beispiel zeigt ein SQL Statement mit folgenden neuen SQL Funktionen:

Fallunterscheidung mit CASE, Verketten von Zeichenketten mit &&, COALESCE Funktion

select type,
case when type = '1' THEN ( 'Person' && '/' && type )
when type = '2' THEN ( 'Unternehmen' && '/' && type )
else 'Unbekannt'
end as type_desc,
mc_name1,
coalesce( b~addrnumber, 'NO ADDRESS' ) AS addrnr
from but000 as a left outer join
but020 as b on b~partner = a~partner.

Ergebnis:

bsp1

 

Für eine detaillierte Übersicht der neuen Open SQL Features, mit einiges Praxisbeispielen, hier klicken: http://www.cadaxo.com/?p=4555

 

 

Anzeige und Zugriff von CDS Views

Als weiteres Feature in der neuen Cockpit 3.0 Version, das unbedingt erwähnt werden sollte, ist die Unterstützung von CDS Views.

CDS Views sind relativ neu und deswegen noch nicht weit verbreitet. Ich bin mir jedoch sicher, dass sie, in einiger Zeit, in aller Munde sein werden. Da die bisherigen Views in SAP sehr eingeschränkt sind, hat man jetzt bei den CDS Views sogar mehr Möglichkeiten als mit den neuen Open SQL Funktionen.

Hier sind nämlich noch neben den ganzen neuen Open SQL Features, solche Funktionen, wie UNION, UNION ALL, Assoziationen und Annotationen, möglich.

Also noch mächtigere Möglichkeiten eine View zu bauen. Das bedeutet auch Entlastung des Anwendungsservers, indem Daten-Intensive Logik in die View und somit auf die Datenbank ausgelagert wird. Im besten Fall ist im Report nur noch ein simples Select-Statement auf die CDS View, ohne komplizierte WHERE-Bedingungen, notwendig.

Hier ein Beispiel einer CDS View:

cds2

 

Die Anlage und Pflege der CDS Views ist nur mit ADT (ABAP Development Tools) im Eclipse möglich. Jedoch bietet Cockpit 3.0 nun die einzige Möglichkeit im SAP GUI, sich die View Definition direkt anzeigen zu lassen.

Mit Doppelklick auf den Namen der CDS View öffnet sich ein Popup mit Informationen zur View und dem DDL Coding.

cds_dll

 

Mittels Open SQL kann man direkt im Cockpit Editor das Select-Statement ausführen und sieht die Ergebnisliste.

cds_editor

 

 

Generische Spaltenangaben mit dbalias~*

Die Spaltenangabe kann bei JOIN Abfragen nun generisch mit dbalias~* vorgenommen werden.

 gen_spalten

 

Code Completion

Als weiteres Feature der Cockpit 3.0 Version, das erheblich zur Usability des Cockpits beiträgt und jeden Anwender das Schreiben der SQL Statements erheblich erleichtert, ist die Auto-Vervollständigung.

Es wurde die Standard Code-Completion des SAP Editors verwendet. Das Aktivieren erfolgt mit STRG+SPACE

 code_comp

 

Symbole

Bisher war bei Symbolen die Einschränkung gegeben, dass sie nur in der WHERE-Bedingung verwendet werden dürfen. Nun werden sie im kompletten Select-Statement unterstützt.

symbole

 

The post SQL Cockpit 3.0 Features appeared first on Cadaxo GmbH.


Cadaxo SQL Cockpit Funktionen auf einem Blick

$
0
0

Mit den folgenden Informationen und Video-Tutorials können auch Sie von den Vorteilen des SQL Cockpits profitieren.

 

Cockpit Überblick

Sie wollen keine Zeit verschwenden und sofort mit Ihren Auswertungen losstarten? Nehmen Sie sich einen Augenblick Zeit und sehen Sie mit diesem Video alle wichtigsten Funktionen des Cockpits auf einem Blick. Nutzen Sie das volle Potential des Cockpits, um schnell zu Ihren Daten zu kommen.
 
 
SQL

Unendliche Möglichkeiten beim Auswerten mit den SQL Cockpit. Durch Ausführen mehrerer SELECTs gleichzeitig, lassen sich auch die komplexesten Datenkonstellationen auf einem Blick auswerten. Hier ein kurzes Video!
 
 
Varianten

Mit den SQL Cockpit Varianten können Sie nicht nur ihre SELECT-Statements speichern, sondern auch mit anderen teilen. Hier ein kurzes HowTo-Tutorial.
 
 
Symbole

Verfeinern Sie ihre SQL Statements und sparen Sie Zeit mit Hilfe von Symbolen. Neben eigenen Variablen, die Sie selbst definieren und in Ihrem SELECT-Statement verwenden können, lassen sich auch Systemsymbole verwenden. Verschaffen Sie sich hier einen Überblick.
 
 
Historie

Sie wollen ein SELECT-Statement, dass Sie vor einer Woche abgesetzt haben, nochmal ausführen, haben jedoch vergessen es zu speichern? Kein Problem – im SQL Cockpit sehen Sie alle Ihre abgesetzten Statements und können es immer wieder ausführen. Hier sehen Sie wie!
 
 
Batch

Langläufer? Kein Problem – Jede Abfrage lässt sich auch als ein Hintergrund-Job definieren. Komfortabel erstellen Sie in Sekunden einen richtigen Batch-Job und müssen sich anschließend nicht durch die Spool-Aufträge quälen, sondern können bequem das Erlebnis im SQL Cockpit anschauen. Hier zum Video!
 
 
Trace

Falls Sie Ihre SQL Statements analysieren und optimieren möchten, steht bei jedem ausgeführten Statement auch die Laufzeit. Wenn Ihnen das nicht reicht, können Sie noch den SQL-Trace einschalten, um Ihre Statements zu analysieren. Hier sehen Sie wie.
 
 
Report Generator

Das Cockpit hat für jeden was. Auch Endanwender bzw. Benutzer ohne Open SQL Kenntnisse können vom Cockpit profitieren. Mit einem Mausklick lassen sich alle Datenabfragen als ein ABAP Report generieren. Durch Klicken auf den Template-Button (Zauberstab) öffnet sich ein Wizard, mit dem Sie den Report so bauen können, dass alle Anforderungen erfüllt sind. Vorgefertigtes Coding, selbst für komplexere Anforderungen, wie z.B. ALV Ereignishandler usw.

 

The post Cadaxo SQL Cockpit Funktionen auf einem Blick appeared first on Cadaxo GmbH.

ABAP CDS Access Control mit DCL

$
0
0

SAP hat mit 7.50 (bzw. die Rede war auch manchmal schon mit 7.40 SP10 – kann ich aber aktuell nicht bestätigen) die CDS Views mit der DCL Data Control Language um die Möglichkeit von impliziten Berechtigungsprüfungen in einem CDS View erweitert. Klingt erstmal etwas trocken ist aber ziemlich genial, denn dadurch können nun Datenbankzugriffe auf Basis der Dateninhalte mit einem Authority-Check versehen werden.

Und das Coole ist, dass dies einfach und schnell erledigt ist!

Nehmen wir an, wir haben eine Tabelle mit ein Feld SOURCE in dem auf der Datenbank die Werte 0001, 0002 und Space vorkommen, im konkreten Fall hab ich einfach die BUT000 genommen wo wir genau solche Einträge vorfinden:

cdsdcl1

Die Idee ist nun, dass wir einen CDS View auf die 4 Felder anlegen und über eine PFCG Rolle steuern dass nur Werte mit der SOURCE 0001 gelesen werden.

CDS View

Zuerst legen wir jetzt mit Eclipse einen neuen CDS View mit der DDL (Data Definition Language) an. Mit den Feldern PARTNER, SOURCE, MC_NAME1 und MC_NAME2:

cdsdcl2

Für jene die noch nicht mit Eclipse gearbeitet haben: DDL und DCL für CDS Views können derzeit nur mit Eclipse bearbeitet werden. Ein persönlicher Tipp: Eclipse wird immer wichtiger. Die CDS Views sind der Anfang. Ohne Eclipse keine CDS Views!

DDL Annotations

Natürlich gibt es bei einer DDL Beschreibung viele Annotation-Möglichkeiten, im Hinblick auf eine implizite Berechtigungsprüfung ist auf nachfolgende Annotation zu achten:

@AccessControlauthorizationCheck: #CHECK

die Berechtigungsprüfung durch eine DCL Access Control ermöglicht wird. #CHECK ist der Defaultwert (sprich auch ohne Angabe wäre der Wert auf #CHECK gestellt), weiter Eingabemöglichkeiten sind #NOT_REQUIRED und #NOT_ALLOWED.

  • #CHECK – Eine implizite Berechtigungsprüfung wird vorgenommen. Wenn zu dem View keine DCL existiert, kommt es bei der Syntaxprüfung zu einer Warnung.
  • #NOT_REQUIRED – Gleich wie #CHECK, jedoch ohne Warnung bei der Syntaxprüfung
  • #NOT_ALLOWED – Es wird keine Zugriffskontrolle vorgenommen.

Weitere Informationen zu den DDL Annotations sind bitte der SAP Online Dokumentation zu entnehmen.

PFCG Berechtigungsobjekt

Nun müssen wir ein Berechtigungsobjekt wählen oder neu erstellen. Ich hab ein neues Berechtigungsobjekt ZDEMODCL mit 2 Feldern ZBU_SOURCE und ACTVT erstellt. ZBU_SOURCE steht für den 4stelligen Wert in SOURCE. ACTVT verwende ich um die Aktivität 03 (03 = lesen) abzubilden:

cdsdcl3

DCL Rolle

Als Nächstes erstellen wir mit der DCL (Data Control Language) die Berechtigungsprüfung auf den View. Dazu müssen wir wieder nach Eclipse wechseln und ein DCL Objekt anlegen:

cdsdcl4

Dadurch wird eine DCL Rolle mit dem Namen ZCDSDCLDEMO_NAME definiert. In einer CDS Rolle können eine oder mehrere CDS Entitäten mit CDS Zugriffskontrollen versehen werden. Im konkreten Beispiel wird die CDS Entität ZCDSDEMOENT verwendet. Dies geschieht durch die Angabe GRANT SELECT ON ZCDSDEMOENT.

Nach der Angabe der CDS View muss eine WHERE-Klausel mit der Zugriffsbedingung folgen. Dies kann wiederum als Literalen (z.B. SOURCE = ‘0001‘) bestehen oder wie im obigen Beispiel aus einer PFCG-Bedingung.

PFCG-Bedingung

Eine PFCG-Bedingung wird mit ASPECT PFCG_AUTH ( <authorization_object>, [ field ], [ field ], …. ) definiert. Die Felder der PFCG Bedingung können gemappte Felder aus der WHERE-Klausel oder Literale wie z.B. ‘03‘ sein.

DCL Annotations

Mit der Annotation @MappingRole: true wird die Rolle gegen alle User automatisch geprüft. Weitere Werte sind derzeit hier zum aktuellen Zeitpunkt noch nicht möglich.

Die Annotation @EndUserText.label: ‘zrole_demo‘ ist der übersetzbare Kurztext der Rolle.

Berechtigungszuordnung

Wenn wir die obigen Schritte beendet haben, jedoch noch keine Berechtigungsvergabe an einen User vorgenommen haben, wird dieser bei einem DB Zugriff auf den CDS View – wie erhofft – keinerlei Daten zurückbekommen.

Erst wenn wir dem User eine Berechtigung für das Berechtigungsobjekt Z_DCL_DEMO erteilen werden die erlaubten Daten bei SELECT-Zugriffen zurückgeliefert.

cdsdcl5

 

SELECT Zugriff auf CDS Entity und CDS DB View

Bei allen ABAP SELECT Zugriffen auf die CDS Entität erfolgt nun die implizite Berechtigungsprüfung. Hingegen bei der obsoleten Möglichkeit des Zugriffs auf den CDS DB View erfolgt diese implizite Prüfung nicht. Aus dem Grund sollten die CDS DB Views auch nicht mehr verwendet werden und wurden von SAP auch als obsolet gekennzeichnet.

Nachfolgend ein Auswertungsergebnis auf ein die CDS Entität (links) und den CDS DB View (rechts). Wie erwartet wurde die Ergebnismenge der CDS Entität implizit auf die SOURCE 0001 gefiltert.

cdsdcl6

Weiterführende Informationen

SAP Online Dokumentation – http://help.sap.com/abapdocu_750/de/index.htm?file=abencds_authorizations.htm

The post ABAP CDS Access Control mit DCL appeared first on Cadaxo GmbH.

Webinar – SQL Cokpit 3.0 Features

$
0
0

Die wichtigsten Features des SQL Cockpit 3.0 auf einem Blick:

  • Unterstützung von neuen Open SQL expressions ab SAP NetWeaver AS 7.40, SP8
  • Unterstüzung von CDS Views
  • Anzeige von DDL-Source-Coding (ADT nicht erforderlich)
  • Unterstützung von generischen Spaltennamen
  • Die Verwendung von Symbolen (Variablen) wurde auf das komplette Select-Statement erweitert
  • Code Completion aktiviert (Standard Auto-Vervollständigung des SAP Editors)

 

Unterlagen und Links zum Webinar „Cadaxo SQL Cockpit 3.0“:

 

Weitere Details in der SAP Online-Dokumentation:

 

Unsere nächsten Webinar-Termine:

 

The post Webinar – SQL Cokpit 3.0 Features appeared first on Cadaxo GmbH.

Webinar – ABAP Entwicklung in Eclipse & SAP Web IDE Einführung

$
0
0

In diesem Webinar wurden folgende Punkte besprochen:

  • ABAP Entwicklung in Eclipse
    • Verbindung mit einem SAP Backend-System
    • Anlegen eines ABAP Reports
    • Wizards
    • Transportanbindung
    • Outline – Navigation
    • ABAP Dictionary
    • Anlegen einer ABAP Klasse
    • Muster/Pattern einfügen, Code Completion
    • Source code based
  • Einführung in SAP Web IDE
    • Kurzer Einstieg / Navigation
    • End-to-End Application Lifecycle
    • Connected technologies
    • Summery / Nützlliche Links

 

Unterlagen und Links zum Webinar „ABAP Entwicklung in Eclipse & SAP Web IDE Einführung“:

Gestellte Fragen

Sind die beiden Technologien (ABAP Development Tools und Web IDE) genug ausgereift für eine echte Applikationsentwicklung, oder sind sie noch eher als „Spielzeug“ zu betrachten?

Sowohl die ADT für Eclipse als auch die Web IDE sind Entwicklungstools, die in vollem Umfang verwendet werden können! Für manche Aufgaben muss sogar ein bestimmtes Tool verwendet werden, als Beispiele:

  • Core Data Services – CDS – Views können aktuell nicht im SAP GUI (SE80/SE11) bearbeitet werden, hier muss dann auf Eclipse gewechselt werden. Generell
  • SAPUI5 Applikationen in der ABAP BSP Umgebung zu erstellen wäre zwar technisch möglich – die ADT bieten aber eine Fülle von Funktionen, die einem viel Arbeit abnehmen und die Entwicklung vereinfacht und unterstützt.

Jede der IDEs hat ihre Vor- und Nachteile und spezielle Funktionen – und auch eine primäre Anwendergruppe. Wenn ich meine Arbeit mit mehreren Tools erledigen kann, nehme ich das für mich passendste…

 

Weitere Details in der SAP Online-Dokumentation:

 

 

Unsere nächsten Webinar-Termine:

 

The post Webinar – ABAP Entwicklung in Eclipse & SAP Web IDE Einführung appeared first on Cadaxo GmbH.

Webinar – SQL Cockpit Funktionen & Einsatzmöglichkeiten

$
0
0

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Unterlagen/Links zum Webinar „SQL Cockpit Funktionen & Einsatzmöglichkeiten“

Unterlagen/Links zum SQL Cockpit

 

Unsere nächsten Webinar Termine

Blogs

The post Webinar – SQL Cockpit Funktionen & Einsatzmöglichkeiten appeared first on Cadaxo GmbH.

Viewing all 120 articles
Browse latest View live