Kategorien
Implementierung SAP

Übergabe von mehrwertigen Eingabeparametern aus der grafischen Berechnungsansicht an eine Tabellenfunktion in SAP S/4 HANA

Skriptgesteuerte HANA-Kalkulationsansichten sind in HANA 2.x nicht mehr Standard. Stattdessen sollten grafische Kalkulationsansichten und/oder Tabellenfunktionen verwendet werden. In diesem Artikel erfahren Sie, wie Sie eine benutzerdefinierte Funktion verwenden können, um dieses Problem zu lösen.

Da es in HANA 2.x nicht mehr der Standard ist, geskriptete HANA-Berechnungsansichten zu verwenden, sollten Sie Ihre Logik entweder in grafischen Berechnungsansichten und/oder Tabellenfunktionen implementieren, falls erforderlich. Für die Umsetzung komplexer Geschäftsanforderungen sind jedoch manchmal HANA-Tabellenfunktionen die einzige Lösung. Das Problem tritt auf, wenn wir mehrwertige Eingabeparameter für verschiedene Zwecke verwenden müssen. Obwohl die grafische Berechnungsansicht die Verwendung mehrerer Einträge für denselben Eingabeparameter erlaubt, wird dies von der Tabellenfunktion nicht unterstützt.




Abbildung 1: Mehrere Eingaben für Eingabeparameter in der grafischen Berechnungsansicht von SAP HANA unterstützt

Es gibt eine Lösung für dieses Problem, die wir Ihnen in diesem Blogbeitrag vorstellen werden. Wir haben eine benutzerdefinierte Funktion verwendet, die eine Zeichenkette in mehrere Werte aufteilt und so die Übergabe von mehrwertigen Eingabeparametern an die Tabellenfunktion ermöglicht, die wir dann in der grafischen Berechnungsansicht verwenden.

Zunächst haben wir eine SAP HANA-Tabelle ZCONTRACT mit einigen Beispieldatensätzen erstellt (siehe unten):



Abbildung 2: ZCONTRACT Tabelle mit Beispieldatensätzen

Dann haben wir die folgende Tabellenfunktion erstellt, die eine Zeichenkette in mehrere Werte zerlegt:

FUNCTION "_SYS_BIC"."Z_STG.Functions::TF_STRING_TO_TABLE" ( iv_string VARCHAR(5000) ) 
	RETURNS TABLE
	(
		"OUTPUT_SPLIT" VARCHAR(5000)
	)
	LANGUAGE SQLSCRIPT
	SQL SECURITY INVOKER AS
BEGIN

	lt_split = SELECT SUBSTR_BEFORE(:iv_string,',') as lv_split_val FROM DUMMY;	
	SELECT SUBSTR_AFTER(:iv_string,',') || ',' INTO iv_string FROM DUMMY;
	
	WHILE( LENGTH(:iv_string) > 0 )	
	DO
	
	   lt_split =	
	   
	   		SELECT SUBSTR_BEFORE(:iv_string,',') as lv_split_val FROM DUMMY	 
				UNION 	   
			SELECT lv_split_val FROM :lt_split;
	
	   SELECT SUBSTR_AFTER(:iv_string,',') INTO iv_string FROM DUMMY;
	   	
	END WHILE;
	
	RETURN SELECT REPLACE(lv_split_val,'''','') AS "OUTPUT_SPLIT" FROM :lt_split; 

END

Diese Split-Funktion teilt den String-Eingabeparameter wie ‚BB,AA‘ in eine HANA-Ergebnistabelle auf.

Abbildung 3: Tabellenfunktion – String in mehrere Werte – Ergebnis

Angenommen, wir möchten alle Verträge aus unserer oben gezeigten Tabelle ZCONTRACT für einen bestimmten Stichtag und mehrere Quellsysteme anzeigen, dann können wir die obige Tabellenfunktion in einer anderen Tabellenfunktion wie folgt verwenden:

FUNCTION "_SYS_BIC"."Z_STG.Wrapper::WV_ZCONTRACT" ( IP_KEYDATE varchar(8), IP_SOURCE_SYSTEM varchar(5000) ) 
	RETURNS table
	(
		"CONT_ID" VARCHAR(40),
	 	"SRCSYS_ID" VARCHAR(11),
	 	"KEY_DATE" VARCHAR(8),
	 	"CREATION_TIMESTAMP" LONGDATE
	 )
	LANGUAGE SQLSCRIPT
	SQL SECURITY INVOKER 
	DEFAULT SCHEMA "Z_STG" AS
BEGIN
/***************************** 
	Write your function logic
 *****************************/
return 
select 
	"CONT_ID",
	"SRCSYS_ID",
	"KEY_DATE",
	"CREATION_TIMESTAMP"
 from "Z_STG"."Z_STG::ZCONTRACT"
 where "KEY_DATE" = :IP_KEYDATE
and "SRCSYS_ID" in (
	select "OUTPUT_SPLIT" from "_SYS_BIC"."Z_STG.Functions::TF_STRING_TO_TABLE" ( :IP_SOURCE_SYSTEM )
);
 
END;

Schließlich können wir die letztgenannte Tabellenfunktion als Quelle in der grafischen Berechnungsansicht verwenden und die Eingabeparameter wie folgt zuordnen:

Abbildung 4: Berechnungsansicht

Wenn wir nun die Datenvorschau aufrufen, haben wir die Möglichkeit, mehrere Quellsysteme als Eingabeparameter einzugeben. Diese mehrfachen Werte werden schließlich zu einer Zeichenkette zusammengefügt, wenn sie an die Tabellenfunktionen weitergegeben werden. All dies geschieht automatisch.

Abbildung 5: Berechnungsansicht – Eingabeparameter
Abbildung 6: Berechnungsansicht – Ergebnis der Datenvorschau

Mit der in diesem Blog-Beitrag gezeigten Zwischenlösung können Sie daher in der grafischen Berechnungsansicht einen mehrwertigen Eingabeparameter eingeben, der dann an die Tabellenfunktion weitergegeben wird und Ihnen die gewünschten Ergebnisse liefert. Abschließend lässt sich sagen, dass diese Methode nicht die einzige Möglichkeit ist und es noch andere Optionen gibt, aber wir wollten unseren Lesern nur eine der Lösungsmöglichkeiten aufzeigen.

Fragen, Kommentare, Vorschläge oder Einwände? Teilen Sie uns diese gerne mit!

Senior Consultant SAP

Sarfaroz Rayeen arbeitet seit 2020 bei ifb Americas, Inc. als Senior Berater für SAP-Technologie. Er unterstützt seitdem eine Nationalbank in den USA sowie eine Nationalbank in Lateinamerika bei der Konzeption und Entwicklung von HANA-Anwendungen.