[JAVA] Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben

Einführung

Ich werde meinen zweiten Artikel im Adventskalender 2019 veröffentlichen, der Mitglied der IT-Mitglieder des Unternehmens ist! Dies ist der Artikel, den ich das letzte Mal geschrieben habe und der auch als Selbsteinführung dient. https://qiita.com/tom-k7/items/d8ef19dccb42891a0698

Ich werde auch dieses Mal über Outsystems schreiben. Im Moment entwickle ich ein CSV-Konvertierungstool (Webanwendung) mit Outsystems Ich werde zeigen, wie das Lesen und Ausgeben von CSV mit Outsystems und der Wand, auf die ich während der Entwicklung gestoßen bin, implementiert wird.

Was du machen willst

Was ich mit dem Tool machen möchte, das ich gerade entwickle, ist CSV-Dateien, die von verschiedenen Websites anderer Unternehmen heruntergeladen wurden Ich möchte es in eine CSV-Datei in einem Format konvertieren, das in das intern verwendete System importiert werden kann. Lesen Sie also die heruntergeladene CSV-Datei und Outsystems ermöglicht das Konvertieren und Ausgeben einer neuen CSV-Datei. Forge Verwenden Sie die Forge-Komponente von CSVUtil, um CSV-Dateien zu lesen und auszugeben. https://www.outsystems.com/forge/component-overview/636/csvutil

Laden Sie es herunter, installieren Sie es in Service Studio und fügen Sie es zu Dependency hinzu.

Bildschirmentwicklung

Ich werde einen Bildschirm erstellen, bevor ich die CSV-Verarbeitung durchführe.

Laden Sie die CSV-Datei hoch

Zunächst müssen Sie die zu lesende CSV-Datei hochladen. Es gibt zwei Möglichkeiten. ① Upload verwenden image.png ② Verwenden Sie RichWidgets \ Popup_Upload image.png

Dieses Mal ist ① besser, also werde ich Upload verwenden.

Platzieren Sie eine Schaltfläche, um die Serveraktion aufzurufen, die den Konvertierungsprozess ausführt

Geben Sie die Aktion Server konvertieren an, um die Konvertierungsverarbeitung durchzuführen, in der Schaltfläche Ziel der Konvertierung an. Führen Sie den Konvertierungsprozess innerhalb dieser Serveraktion durch. image.png

Implementierung des CSV-Leseprozesses

Von nun an ist es die CSV-Verarbeitung des Hauptthemas. Implementieren Sie zunächst das Lesen der CSV-Datei.

LoadConfig-Einstellungen

Definieren Sie eine lokale Variable vom Typ CSVLoadConfig zum Festlegen beim Lesen von CSV und legen Sie sie mit Zuweisen fest. image.png Die Haupteinstellungen sind wie folgt.

--Encode: Zeichencode der CSV-Datei. Stellen Sie utf-8, Shift-Jis usw. ein. --IsSkipHeader: True, wenn die CSV-Datei eine Kopfzeile enthält, andernfalls False. --IsIgnoreColumnChange: ~~ False, wenn ein Fehler auftritt, wenn die Anzahl der Spalten nicht übereinstimmt, True, wenn kein Fehler auftritt. ~~ Ich habe es versucht und es war anders. .. Dieses Feld ist ein Rätsel "(-" "-)" --FieldDelimiter: Trennzeichen zwischen Spalten. Es können mehrere Zeichen eingegeben werden, es wird jedoch nur das erste Zeichen angewendet. --IsDisableDoubleQuote: False, wenn die Spalte in doppelte Anführungszeichen gesetzt ist, andernfalls True.

Definieren Sie eine RecordList zum Lesen

Definieren Sie eine Liste von Entitäts- / Strukturdatensätzen, in der die Ergebnisse des Lesens von CSV mit lokalen Variablen gespeichert sind. Dieses Mal habe ich eine Datensatzliste der Struktur mit dem Namen Quell-CSV erstellt, die ich erstellt habe. image.png

Anruferweiterungsverarbeitung

Rufen Sie die in Forges CSVUtil definierte LoadCSVRecordList-Serveraktion auf Die Argumente sind der auf dem Bildschirm erstellte Upload-Inhalt und die lokale Variable CSVLoadConfig. Legen Sie das Ergebnis der Konvertierung der RecordList of Entity / Structure mit ToObject () fest. image.png Damit ist das Laden abgeschlossen.

Implementierung der CSV-Ausgabeverarbeitung

Als nächstes werden wir auch die CSV-Ausgabe implementieren.

ExportConfig-Einstellungen

Definieren Sie eine lokale Variable vom Typ CSVExportConfig für die Einstellung zum Zeitpunkt der CSV-Ausgabe und legen Sie sie mit Zuweisen fest. image.png Die Haupteinstellungen sind wie folgt.

--IsShowHeader: True, wenn Sie die Kopfzeile in die CSV-Datei aufnehmen möchten, andernfalls False. --FieldDelimiter: Trennzeichen zwischen Spalten. Es können mehrere Zeichen eingegeben werden, es wird jedoch nur das erste Zeichen angewendet. --EncodeMode: Gibt an, ob die Spalte in doppelte Anführungszeichen gesetzt werden soll. Legen Sie eine der Zeichenfolgen auto / quote / noquote / noquote_nocheck als Zeichenfolge fest. --LineSeparator: Zeilenvorschubcode. Stellen Sie Chr (13) für CR, Chr (10) für LF und Chr (13) + Chr (10) für CRLF ein.

Definieren Sie RecordList für die Ausgabe

Definieren Sie eine Liste von Entitäts- / Strukturdatensätzen zum Speichern der CSV-Ausgabedaten mit lokalen Variablen. Das Bild ist eine Datensatzliste der Struktur namens Ausgabe-CSV, die ich erstellt habe. image.png

Konvertieren und setzen Sie die gelesenen Daten in die Ausgabe-RecordList

Legen Sie für die in ↑ definierte Ausgabe-RecordList die gesamte RecordList fest, die die geladenen Daten enthält. Zu diesem Zeitpunkt können Sie die Werte konvertieren, kombinieren, unnötige Werte verwerfen und für die Ausgabe festlegen. image.png Im Bild wird ListAppendAll verwendet, um Elemente einfach zu kombinieren. In der Realität werden hier jedoch verschiedene Konvertierungen durchgeführt. Wenn Sie etwas ziemlich Kompliziertes tun möchten, können Sie For Each wiederholen.

Anruferweiterungsverarbeitung

Rufen Sie die in CSVUtil definierte Serveraktion ExportRecordList2CSV auf Legen Sie das Ergebnis der Konvertierung von Entity / Structure RecordList mit ToObject () und der lokalen Variablen CSVExportConfig im Argument fest. image.png

Ausgabe (Download) der CSV-Datei nach der Konvertierung

Übergeben Sie abschließend die von ExportRecordList2CSV erstellten CSV-Daten an das Download-Widget und beenden Sie den Vorgang. image.png

Falle während der Entwicklung gefangen

Das Obige ist die Implementierungsmethode, aber ich möchte andere Wände teilen, die ich mit CSVUtil getroffen habe.

Es ist schwer zu verstehen, wie zum Zeitpunkt der Ausgabe doppelte Anführungszeichen gesetzt werden

Die Methode zum Einfügen in doppelte Anführungszeichen in "Einstellungen für Exportkonfiguration" wurde bereits beschrieben. Ich habe eine ganze Weile gebraucht, um dorthin zu gelangen. Weil der Name des Elements EncodeMode ist. .. Ich denke, es ist ein Zeichencode. Ich weiß es nicht. .. Es war ein bittersüßes ww

Übrigens, wenn Sie in CSVExportConfig.EncodeMode "quote" angeben, wird es von einem doppelten Anführungszeichen umgeben sein!

NullReferenceException im Exportprozess

Ich habe diesen Fehler beim Aufrufen der Serveraktion ExportRecordList2CSV von CSVUtil erhalten. Object reference not set to an instance of an object. NullReferenceException. Es ist Nurpo in Java. Gibt es in Outsystems einen Basistyp Null, da nur der Basistyp als CSV-Element verwendet wird? Es war so.

Dieser Fehler meldet sich also nicht detaillierter an, sodass ich durch das Ausprobieren verschiedener Dinge ratlos war. Ich habe keine andere Wahl, als in die Erweiterung zu schauen! Es wurde. Ich habe die Erweiterung mit heruntergeladen, sln in Visual Studio geöffnet und bin der Quelle gefolgt, konnte aber die Ursache nicht herausfinden. Übrigens habe ich die Daten, die ich tatsächlich an C # weitergegeben habe, erstellt und ausgeführt! (^^)! (Das war nüchtern und nervig)

Als Ergebnis stellte sich heraus, dass es sich um eine NullReferenceException handelte, da eine Spalte der übergebenen Daten fehlte. Ich habe mich gefragt, was diese Spalte ist, aber es war eine Spalte, die beim Konvertieren von Daten etwas Besonderes bewirkt hat.

Es tut mir leid, wenn die Erklärung keinen Sinn ergibt <m (__) m> Wenn der Wert der gelesenen Daten beispielsweise "1" ist, definieren Sie nach der Konvertierung in der JSON-Datei so etwas wie "Graduiertenschule" als Schlüssel / Wert-Paar. Importieren Sie die JSON-Datei als Ressourcen in das Modul. image.png

Lesen Sie die JSON-Datei mit JSONDeserialize und speichern Sie sie mit Forges HashTable als Schlüssel / Wert-Paar im Speicher. Zum Zeitpunkt der Konvertierung bestand der Prozess darin, den aus der HashTable erhaltenen Wert festzulegen.

Forge Hashable: https://www.outsystems.com/forge/component-overview/21/hashtable

Da es in der CSV von Daten gelesen wurde, die nicht in dem in JSON definierten Schlüssel enthalten waren (z. B. "5" oder leere Zeichen im Fall von ↑ JSON), wurde das Ergebnis von get zu Null. Es war eine NullReferenceException, weil ich sie an ExportRecordList2CSV übergeben habe.

Wenn ich es normal mit Outsystems implementiere, wird Null nicht in den Texttyp aufgenommen. Ich habe gelernt, dass Null über die Erweiterung eingegeben werden kann, und ich dachte, es wäre eine Lernerfahrung.

Schließlich

Erklärtes Lesen / Ausgeben von CSV in Outsystems. Ich hoffe, es wird denen helfen, die CSVUtil verwenden, und denen, die von nun an dieselbe Wand treffen.

Recommended Posts

Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Ich habe versucht, grafana und postgres [docker-compose] zu verknüpfen
Ich habe auch Web Assembly mit Nim und C ausprobiert
Ich habe versucht, neunundneunzig in Java auszugeben
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Ich habe versucht, den Block mit Java zu brechen (1)
Anmerkung: [Java] Verarbeiten Sie die gelesene CSV (extrahieren und ändern Sie sie gemäß den Bedingungen) und geben Sie sie aus
In dieser Zeit habe ich versucht, Java Bean und XML mit dem Jackson-Formatierer XML zu konvertieren
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
Ich habe versucht, AWS I oT Button und Slack zu integrieren
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich habe versucht, Animationen mit der Blazor + Canvas-API zu zeichnen
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich habe versucht, C # zu kauen (Dateien lesen und schreiben)
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
Ich habe versucht, YouTube-Video von DB mit haml aufzurufen und es eingebettet anzuzeigen
Ausgabe einer CSV-Datei mit offener CSV
Ich habe DI mit Ruby versucht
Ich habe versucht, node-jt400 (IFS lesen)
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit spiritueller Technik zu erhöhen
Ich habe versucht, Rubys "Klassen" -Probleme zu sammeln und zu lösen.
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe versucht, dies und das von Spring @ Transactional zu überprüfen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe versucht, Java Optional und Guard-Klausel koexistieren zu lassen
Ich habe versucht, den Chat mit dem Minecraft-Server mit der Discord-API zu verknüpfen
Ich habe versucht, persönlich nützliche Apps und Entwicklungstools (Entwicklungstools) zusammenzufassen.
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich habe versucht, persönlich nützliche Apps und Entwicklungstools (Apps) zusammenzufassen.
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Ich habe versucht, mit Ractor mehrere Objekte übergeben zu können
Einfacher LINE BOT mit Java Servlet Teil 2: Ich habe versucht, Bildnachrichten und Vorlagen zu erstellen