ABAP® CDS Table Functions – AMDP – Fuzzy Search für ABAP® SQL mit SAP HANA®

Im vorangegangenen Post AMDP – Fuzzy Search im ABAP® mit SAP HANA® verwenden wir eine AMDP, um mit ABAP Coding eine Fuzzy Suche durchzuführen. Um diese Suche auch in SQL Statements verwenden zu können – z.B. bei INSERT brauchen wir ABAP CDS Table Functions. Dieser Beitrag bietet hierfür einen Leitfaden und erläutert die Thematik Schritt-für-Schritt.

ABAP CDS Table Function

Hier ist der Ausgangspunkt eine Data Definition – mittels DDL wird die Table Funktion als Datasource definiert und über die Felder die Struktur festgelegt. Table Functions können auch Parameter besitzen.

Auffallend ist das returns vor der Feldlist. Damit wird die Struktur der Datensource festgelegt. Wichtiger ist aber der implemented by method Teil, hier /cadaxo/cl_ui38_dmo_order_amdp=>search_orders_CDS

Wenn die Klasse schon existiert, kann die Methode einfach per Quick-Fix angelegt werden!

AMDP Klasse und Methode anlegen

Auch Table Function AMDP werden als spezielle Methode in einer ABAP Klasse implementiert – die Definition erfolgt wie bei jeder anderen Klasse.

Durch das Interface IF_AMDP_MARKER_HDB wird die Klasse besonders, was bei der Schnittstellendefinition der statischen Methode search_orders_CDS erkennbar ist: „Verwende alle Parameter der Table Function als Importing Parameter und die Feldliste als Struktur der Return Tabelle“. Aber auch im Implementierungs-Teil erkennt man den Sonderstatus.

Die Methodenimplementierung hat einige zusätzliche Statements – Details gibt es auf https://help.sap.com/doc/abapdocu_750_index_htm/7.50/de-de/abapmethod_by_db_proc.htm

BY DATABASE FUNCTION„Ich bin eine AMDP.“
FOR HDBDerzeit nur „HDB“ – Kommen auch andere Datenbanken?!?!
LANGUAGE SQLSCRIPTWir nehmen SQLSCRIPT.
OPTIONS READ-ONLYWir lesen nur, geändert wird nicht!
USING /cadaxo/ui38d_demo_ordersWir wollen die Bestellungen aus /cadaxo/ui38d_demo_orders

Details zur Fuzzy Search findet man hier: https://help.sap.com/docs/SAP_HANA_PLATFORM/691cb949c1034198800afde3e5be6570/ce619608bb5710148a42ebb92208b5cd.html?locale=en-US

Daten selektieren

Auf Table Functions wird ganz normal mittels ABAP SQL zugegriffen

Der SELECT im SQL Cockpit for SAP® Systems

AMDP - Fuzzy Search im ABAP mit SAP HANA

AMDP – Fuzzy Search im ABAP® mit SAP HANA®

Die SAP HANA Datenbank bietet viele nützliche und coole Funktionen, die über openSQL/ABAP SQL hinaus gehen. Um auf diese Features zuzugreifen und die ganze Power der HANA Datenbank nutzen zu können, gibt es ABAP Managed Database Procedures – AMDP. Damit kann man, ähnlich wie mit EXEC SQL bzw. ADBC (ABAP Database Connectivity), native Datenbank Statements absetzen. In diesem Blogbeitrag beschäftigen wir uns mit den nötigen Anlage- und Implementierungsschritten.

AMDP Klasse und Methode anlegen

AMDP werden als spezielle Methode in einer ABAP Klasse implementiert – die Definition erfolgt wie bei jeder anderen Klasse:

Durch das Interface IF_AMDP_MARKER_HDB wird die Klasse besonders, was man im Implementierungs-Teil sehen kann:

Die Methodenimplementierung hat einige zusätzliche Statements – Details dazu gibt es auf https://help.sap.com/doc/abapdocu_750_index_htm/7.50/de-de/abapmethod_by_db_proc.htm

BY DATABASE PROCEDURE„Ich bin eine AMDP.“
FOR HDBDerzeit nur „HDB“ – Kommen auch andere Datenbanken?!?!
LANGUAGE SQLSCRIPTWir nehmen SQLSCRIPT.
OPTIONS READ-ONLYWir lesen nur, geändert wird nicht!
USING /cadaxo/ui38d_demo_ordersWir wollen die Bestellungen aus /cadaxo/ui38d_demo_orders.

AMDP Method aufrufen

Aufgerufen wir die AMDP Methode wie jede andere auch:

Fuzzy Search

Ok, der SELECT ist nicht gerade spektakulär – das geht auch mit ABAP SQL. Aber eine fehlertolerante Fuzzy Search?!?

Wir wollen Bestellungen zu Kundennamen finden, auch wenn wir den nicht so ganz genau kennen. Dabei hilft uns CONTAINS und FUZZYhttps://help.sap.com/docs/SAP_HANA_PLATFORM/691cb949c1034198800afde3e5be6570/9a4da8f6f23b4ebf95c98f1104a56db4.html?&locale=en-US

Wir erweitern den SELECT um eine WHERE Klausel und suchen wie folgt nach dem Namen:

Die FUZZY Funktion liefert alle Namen zurück, deren Vergleich mit dem I_Search_Term mindestens einen Score von 0.5 ergibt. Das klingt erstmal einfach, kann aber ziemlich knifflig werden, vor allem, wenn man die Treffermenge, Genauigkeit und Relevanz für Benutzer optimieren möchte. Der passende Schwellenwert ist dann oft nur empirisch ermittelbar.

SCORE

Um den errechneten Wert der Übereinstimmung anzuzeigen und danach zu sortieren, gibt es die Funktion SCORE. Mit FUZZY( 0.0) werden alle Namen mit einem ermittelten Score größer 0 ausgegeben.

Eine Suche nach „Hat Nägel“ ergibt dann z.B. folgende Trefferliste:

Treffliste der Fuzzy Suche mit Score

Komplettes Coding

Das ganze Coding sieht folgendermaßen aus:

Rückblick 2019: Webinare, CodeRetreats und CodeJams

Wir waren 2019 wieder ziemlich aktiv. Wir haben mehrere Webinare gehalten, eine ABAP CodeRetreat gehalten und 2 SAP CodeJams mitorganisiert. Nachfolgend ein kurzer Überblick.

 

Cadaxo ABAP Webinare

Auch 2019 haben wir unsere gewohnten ABAP Webinare gehalten. Wie immer mit kleineren technischen Problemen aber das macht die Sache ja erst spannend.

Begonnen haben wir im Jänner mit den wichtigsten Releaseinformationen zu ABAP 7.51. Im März ging es dann mit dem sehr umfangreiche Thema Modern ABAP weiter und mit den Entwurfsmuster folgte dann im Mai ein eher trockenes Thema. Nach der Sommerpause folgte nach 2016 erneut ein Webinar zum Thema ADT.

Hier nochmals die Links zu allen Unterlagen, Videos, …

Selbstverständlich machen wir auch 2020 weiter. Erstes Thema: AMDP am 31. Jänner.

 

ABAP CodeRetreat 26. Oktober

Trotz des Umstandes, dass in Österreich am 26. Oktober der Staatsfeiertag stattfindet, fanden sich 15 interessierte Entwickler an diesem Samstag in Wien zusammen um gemeinsam mehr über ABAP, über moderne ABAP Entwicklung zu erlernen. Gemeinsam mit der SCC EDV-Beratung AG haben wir die Veranstaltung organisiert.

Als Retreat bezeichnet man eine spirituelle Ruhepause bzw. Rückzug von der gewohnten Umgebung. Und genau darum geht es bei einer ABAP CodeRetreat: Herauszukommen aus unserer ABAP Komfortzone.

Eine ABAP CodeRetreat kann jeder ausrichten. Alles was man dazu wissen muss, findet man unter https://wiki.scn.sap.com/wiki/display/events/ABAP+CodeRetreat

SAP CodeJams 24. Juni und 23. November

Dieses Jahr haben wir 2 SAP CodeJams organisiert. Am 24. Juni fand eine CodeJam zum Thema „Custom Code Migration to S/4 HANA“ statt. Ingo Bräuninger hat uns wie gewohnt mit hohem Expertenwissen viel Engagement beeindruckt. Es war erneut eine gemeinsame Veranstaltung mit der SCC.

Eine für uns ungewohnte CodeJam fand am 23. November statt. Ein Tag komplett ohne ABAP bzw. SAP Gui. An dem Tag stand das SAP Cloud Programming Model (CAP) am Programm. Mit Marius Obert hat uns SAP einen ausgewiesenen Experten zu dem Thema nach Wien geschickt. Dies war eine Co-Produktion von SCC, Ecosio und Cadaxo.