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 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.
Ich werde einen Bildschirm erstellen, bevor ich die CSV-Verarbeitung durchführe.
Zunächst müssen Sie die zu lesende CSV-Datei hochladen. Es gibt zwei Möglichkeiten. ① Upload verwenden ② Verwenden Sie RichWidgets \ Popup_Upload
Dieses Mal ist ① besser, also werde ich Upload verwenden.
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.
Von nun an ist es die CSV-Verarbeitung des Hauptthemas. Implementieren Sie zunächst das Lesen der CSV-Datei.
Definieren Sie eine lokale Variable vom Typ CSVLoadConfig zum Festlegen beim Lesen von CSV und legen Sie sie mit Zuweisen fest. 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 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.
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. Damit ist das Laden abgeschlossen.
Als nächstes werden wir auch die CSV-Ausgabe implementieren.
Definieren Sie eine lokale Variable vom Typ CSVExportConfig für die Einstellung zum Zeitpunkt der CSV-Ausgabe und legen Sie sie mit Zuweisen fest. 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 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.
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. 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.
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.
Übergeben Sie abschließend die von ExportRecordList2CSV erstellten CSV-Daten an das Download-Widget und beenden Sie den Vorgang.
Das Obige ist die Implementierungsmethode, aber ich möchte andere Wände teilen, die ich mit CSVUtil getroffen habe.
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!
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.
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.
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