Blog
ARTIKEL

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.

@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!

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.

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 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

    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).
Der SELECT im SQL Cockpit for SAP® Systems

Passend dazu

Alle Artikel →
Unser Tipp für Sie

SQL Cockpit for SAP® Systems

Revisionssichere Datenänderungen und ein leistungsstarker ABAP Open SQL Editor direkt im SAP-System.

Mehr erfahren →