quiNews

Was Sie Gutes mit uns verbinden können

How to:Komfortable CSV-Verarbeitung mit dem BizTalk-Server oder serverless

In der Praxis erweist sich das Handling von einfachen CSV-Dateien mit dem mächtigen FlatFile-Schema-Wizard als unnötig umständlich. Hier betrachten wir eine alternative Herangehensweise, die simpel, flexibel und performant ist, jedoch auf tabellarisch strukturierte FlatFiles beschränkt ist. Wir gehen auf die Vor- und Nachteile der jeweiligen Lösung ein. Die Notwendigkeit einer solchen Lösung ist durch Stolpersteine aus der Praxis entstanden.

Eine CSV ist ein gängiges Datei-Format, um Informationen von einem System in ein anderes zu übertragen. Dieser Dateityp ist technisch gesehen ein "character delimited Flatfile". Der BizTalk-Server verarbeitet Daten im XML-Format, weshalb eine Umwandlung von Flatfile zu XML notwendig ist. Ein Entwickler wird durch ein Wizard dabei unterstützt, ein Flatfile-Schema in ein XML-Schema umzuwandeln, um die Datei BizTalk-tauglich zu machen. Das FlatFile-Schema-Wizard ist ein Universalwerkzeug, um nicht nur einfache tabellarisch strukturierte, sondern auch komplexe und hierarchisch strukturierte Dateien zu verarbeiten.

In der Praxis erweist sich das Handling von einfachen CSV-Dateien mit dem mächtigen FlatFile-Schema-Wizard als unnötig umständlich. Hier betrachten wir eine alternative Herangehensweise, die simpel, flexibel und performant ist, jedoch auf tabellarisch strukturierte FlatFiles beschränkt ist. Wir gehen auf die Vor- und Nachteile der jeweiligen Lösung ein. Die Notwendigkeit einer solchen Lösung ist durch Stolpersteine aus der Praxis entstanden. Einige solcher Punkte sind:

- Daten kommen aus verschiedenen Anwendungen mit unterschiedlichen Zeilenumbrüchen (z.b. CrLf (Standard bei Windows), Lf (Standard bei Linux)). Dies macht aus Sicht einer CSV keinen Unterschied, die durch den Flatfile-Schema-Wizard entstandene Dateiformatbeschreibung ist aber an dieser Stelle präzise und die Verarbeitung bricht mit einem Fehler ab, falls der Zeilenumbruch nicht stimmt. Dabei ist die Fehlermeldung nur für einen Entwickler, aber nicht einen Operator verständlich: "Unexpected data found while looking for: '\r\n'. The current definition being parsed is Listung. The stream offset where the error occured is 60. The line number where the error occured is 4. The column where the error occured is 7."

- Ähnlich verhält es sich, wenn die CSV-Datei nicht mit einem Zeilenumbruch endet, sondern mit dem letzten Zeichen des Datenfeldes.

- Sollte ein Feld in der CSV fehlen oder falsch formatiert sein (z. B. Zeichenkette statt einer Zahl), wird die Ganze Datei durch BizTalk abgelehnt. In manchen UseCases darf kein Stillstand des Systems entstehen und es ist notwendig, fehlertolerant zu sein und die falsche Zeile gesondert zu behandeln (z. B. ausleiten und anschließend prüfen).

- Ein durch FF-Schema-Wizard generierte XSD kann man manuell durch Plausi-Prüfung erweitern, jedoch ist im Fehlerfall die Ausgabe dürftig und bietet keinen Hinweis auf die problematische Stelle, durch z. B. eine Zeilennummer (bei Strukturellen Problemen wird die Zeilennummer ausgegeben, aber nicht bei Plausi-Fehlern).

Um diese Themen mit den BizTalk-Mitteln in den Griff zu bekommen, könnte man entweder für jeden der Fälle ein separates Schema erzeugen oder eine Vorverarbeitungs-Pipeline entwickeln, die die CSVs normalisiert. Beides wäre ein unnötiger Zusatzaufwand.

Der Alternativlösung liegt die Idee zu Grunde, die CSV stream-orientiert zu lesen, dabei C#-Objekte zu generieren und mit C#-Bordmitteln als XML zu serialisieren. Die Ausführung des Codes findet in der BizTalk-Pipeline statt. Falls die Funktionalität unabhängig vom BizTalk-Server benötigt wird, lässt sich der Code auch in der Cloud als eine Azure Function ausführen; die Ausgabe kann dabei problemlos auf das in dem Functions-Umfeld gängige Json-Format umgestellt werden.

Der Converter interpretiert alle Zeilenumbruchsformen richtig, ist gegenüber Formatierungs- und Plausi-Fehlern tolerant - diese werden mit einem sprechenden Hinweis für nachträgliche Prüfung ausgeleitet, ohne die Verarbeitung bereits in diesem vorverarbeitungsschritt aufzuhalten.

TL; DR:

Eine CSV wird durch verschiedene Systeme exportiert und ist nicht streng typisiert, was den Flatfile-Parser von BizTalk bei kleinsten Abweichungen auf Fehler laufen lässt. Die dadurch entstehenden Fehlermeldungen sind kryptisch, erschweren und verzögern die Problemklärung. Der neue Ansatz bietet für die CSV-Verarbeitung eine komfortable und nutzungsfreundliche Alternative zum FlatFile-Schema-Wizard. Der Code lässt sich sowohl im BizTalk als auch in der Cloud ausführen. Für die Verarbeitung von hierarchisch strukturierten Daten oder Dateien mit standardisiertem Schema (z. B. EDI-Nachrichten) ist der FF-Schema-Wizard jedoch die bessere Wahl. Es gibt also klare Für und Wider beide Lösungen, der neue Ansatz komplementiert die BizTalk-Bordmittel perfekt. 

Im nächsten Teil gehen wir auf die Implementierungsdetails näher ein - stay tuned!

Dies ist ein How to-Tipp von Paul, QUIBIQ Stuttgart

© QUIBIQ GmbH · Impressum · Datenschutz