Webinar – Get your jobs done!
Vielen Dank für Ihre Teilnahme an unserem Webinar! Vielen Dank an alle, die beim Webinar „Get your jobs…
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.
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.
@ClientDependent: false
@EndUserText.label: 'ui38 - demo - Orders'
define table function /CADAXO/UI38D_DEMO_ORDER_SH
with parameters
name_search :abap.char( 50 )
returns
{
key OrderId : /cadaxo/ui38_dmo_order_id;
CustomerId : /cadaxo/ui38_dmo_customer_id;
ProductId : /cadaxo/ui38_dmo_product_id;
OrderDate : /cadaxo/ui38_dmo_order_date;
Quantity : /cadaxo/ui38_dmo_quantity;
Unit : /cadaxo/ui38_dmo_unit;
TotalPrice : /cadaxo/ui38_dmo_price;
Currency : /cadaxo/ui38_dmo_currency;
Description : /cadaxo/ui38_dmo_description;
Name : /cadaxo/ui38_dmo_name;
Score : /cadaxo/ui38_dmo_score;
}
implemented by method /cadaxo/cl_ui38_dmo_order_amdp=>search_orders_CDS;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!
Auch Table Function AMDP werden als spezielle Methode in einer ABAP Klasse implementiert – die Definition erfolgt wie bei jeder anderen Klasse.
CLASS /cadaxo/cl_ui38_dmo_order_amdp DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
CLASS-METHODS search_orders_CDS FOR TABLE FUNCTION /cadaxo/ui38d_demo_order_sh.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.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.
CLASS /cadaxo/cl_ui38_dmo_order_amdp IMPLEMENTATION.
METHOD search_orders_CDS BY DATABASE FUNCTION
FOR HDB LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING /cadaxo/ui38d_demo_orders.
RETURN SELECT OrderId,
CustomerId,
ProductId,
OrderDate,
Quantity,
Unit,
TotalPrice,
Currency,
Description,
Name,
score( ) as Score
from "/CADAXO/UI38D_DEMO_ORDERS"
WHERE contains( Name, :name_search, fuzzy( 0.0 ) );
ENDMETHOD.
ENDCLASS.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 HDB | Derzeit nur „HDB“ – Kommen auch andere Datenbanken?!?! |
| LANGUAGE SQLSCRIPT | Wir nehmen SQLSCRIPT. |
| OPTIONS READ-ONLY | Wir lesen nur, geändert wird nicht! |
| USING /cadaxo/ui38d_demo_orders | Wir 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
Auf Table Functions wird ganz normal mittels ABAP SQL zugegriffen
SELECT FROM /cadaxo/ui38d_demo_order_sh( name_search = 'Hat Nägel' )
fields OrderId,
CustomerId,
ProductId,
OrderDate,
Quantity,
Unit,
TotalPrice,
Currency,
Description,
Name,
Score
INTO TABLE @DATA(orders).