Im früheren Beitrag “Zwei Möglichkeiten zur Fehlerbehandlung mit SAP BW und SQLScript” haben wir die verschiedenen Alternativen der Fehlerbehandlung ausführlich beleuchtet. Dabei haben wir festgestellt, dass der DTP Error Handling Mechanismus nur bedingt einsatzfähig ist. Bis Version BW/4HANA 2.0 ist dieses Szenario überhaupt nicht praktikabel, aber auch mit BW/4HANA kann es gegebenenfalls zu Performanceproblemen führen.
Deshalb schauen wir uns in diesem Beitrag eine mögliche Alternative an. Denn in der Praxis sind die üblichen Verdächtigen bekannt. Es handelt es immer um dieselben Felder, die fehlerhafte Daten beinhalten. Daher bietet es sich an, diese direkt in der Routine zu korrigieren, damit die Datensätze ins Ziel fortgeschrieben werden können.
Betrachten wir ein einfaches Beispiel. In unserer SQLScript Routine prüfen wir das Feld COMP_CODE (Buchungskreis). Bei Buchungskreisen, die entweder Steuerzeichen enthalten, mit einem Ausrufezeichen anfangen oder einfach # (nicht zugeordnet) sind, werden unerlaubte Zeichen mit - (Bindestrich) ersetzt.
Dazu verwenden wir die Befehle LIKE_REGEXPR und LIKE in Verbindung mit CASE WHEN. Mit CASE WHEN können Sie die Behandlung der fehlerhaften Daten weiter differenzieren. So können Sie zum Beispiel Ausrufezeichen mit einem Bindestrich ersetzen, aber alle nicht zugeordneten (#) Buchungskreise mit einem Dummy Buchungskreis füllen.
METHOD PROCEDURE BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY.
outTab =
SELECT
CASE
WHEN comp_code LIKE_REGEXPR '.*[[cntrl]].*' THEN REPLACE (comp_code, '.*[[cntrl]].*', '-')
WHEN comp_code LIKE '!%' THEN REPLACE (comp_code, '!', '-')
WHEN comp_code = '#' THEN REPLACE (comp_code, '#', '-')
ELSE comp_code
END AS comp_code,
currency, '' as recordmode, amount, record, SQL__PROCEDURE__SOURCE__RECORD
FROM :inTab;
errorTab= SELECT * FROM :errorTab;
ENDMETHOD.
Im nächsten Bild ist das Ergebnis dargestellt. In der Tabelle INTAB sehen Sie die Ausgangssätze. In der Tabelle OUTTAB befinden sich die korrigierten Pendants.
So können Daten erfolgreich in ein ADSO verbucht werden.
Steigern Sie die Leistung Ihres BW mit SQLScript
Eine Liste der regulären Ausdrücke, die Ihnen die Suche nach den fehlerhaften Datensätzen erleichtern, finden Sie in der nachfolgenden Tabelle.
Ausdruck |
Beschreibung |
a% |
Wert fängt mit “a” an |
%a |
Wert endet mit “a” |
%a% |
Wert hat “a” an einer beliebigen Stelle |
_a% |
Wert hat “a” an der zweiten Stelle |
a_% |
Wert fängt mit “a” an und ist mindestens zwei Zeichen lang |
a%z |
Wert fängt mit “a” an und endet mit “z” |
[abc] |
“a”, “b” oder “c” |
[a-z] |
Kleinbuchstaben |
[A-Z] |
Großbuchstaben |
[0-9] |
Ziffer |
. |
Beliebiges Zeichen |
[[:digit:]] |
Ziffern 0-9, entspricht dem Ausdruck [0-9] |
[[:lower:]] |
Kleinbuchstaben, entspricht dem Ausdruck [a-z] |
[[:upper:]] |
Großbuchstaben, entspricht dem Ausdruck [A-Z] |
[[:alpha:]] |
Alle Buchstaben, entspricht den Ausdrücken [a-z] und [A-Z] sowie [[:lower:]] und [[:upper:]] |
[[:alnum:]] |
Alle Groß- und Kleinbuchstaben sowie alle Ziffern. Entspricht den Ausdrücken [:alpha:] und [:digit:], also [A-Z,a-z,0-9] |
[[:punct:]] |
Satzzeichen, z.B.: . , " ' ? ! ; : # $ % & ( ) * + - / < > = @ [ ] \ ^ _ { } ~ |
[[:print:]] |
Alle druckbaren Zeichen, entspricht den Ausdrücken [:alnum:] , [:punct:] sowie SPACE |
[[:graph:]] |
Alle druckbaren Zeichen ohne SPACE, entspricht den Ausdrücken [:alnum:] und [:punct:] |
[[:blank:]] |
Beinhaltet SPACE und TAB |
[[:space:]] |
Beinhaltet alle whitespace Zeichen: SPACE, TAB, CR, FF, NL, VT. |
[[:cntrl:]] |
Beinhaltet Steuerzeichen: ACK CAN CR DC1 DC2 DC3 DC4 DEL DLE EM ENQ EOT ESC ETB EXT FF IS1 IS2 IS3 IS4 LF NAK NL NUL SI SO SOH STX SUB TAB VT |
[[:xdigit:]] |
Beinhaltet hexadezimale Ziffern (0-9, A-F, a-f) |
[[=a=]] |
Beinhaltet äquivalente Zeichen. Zum Beispiel alle Buchstaben, die auf „a“ basieren. Wie ä, à, â, á, usw. |
Planen Sie einen Umstieg auf SQLScript und benötigen Sie Unterstützung bei der Planung der richtigen Strategie? Oder benötigen Sie erfahrene Entwickler zur Umsetzung Ihrer Anforderungen? Zögern Sie bitte nicht, uns zu kontaktieren - wir beraten Sie gerne.