Modul für den einfachen Python CSV Export aus Vertec, mit integriertem OCL und SQL
Standard
|Expert
CLOUD ABO
|ON-PREMISES
Leistung & CRM
Budget & Teilprojekt
Fremdkosten
Ressourcenplanung
Business Intelligence
Für das einfache Erstellen von CSV Files in Vertec bieten wir dieses Modul an. Es wird wie ein normales Script registriert und kann dann in anderen Scripts referenziert werden.
Registrieren als Script, Bezeichnung VertecCSVExporterClasses
.
Die Bezeichnung kann frei gewählt werden, darf einfach keine Leerschläge oder Sonderzeichen enthalten. In den Beispielen unten wird diese Bezeichnung verwendet; falls Sie eine andere Bezeichnung wählen, müssen Sie die Beispiele entsprechend anpassen.
Das Modul implementiert folgende Klassen:
Der VertecCSVExporter hat folgende Eigenschaften:
Eigenschaft | Beschreibung |
---|---|
encoding | Standard: 'UTF-8' |
field_delimiter | Standard: ';' Feld-Trennzeichen |
string_delimiter | Standard: '"' String-Trennzeichen |
only_first_line_for_strings | Standard: True Gibt an, ob von mehrzeiligen Werten (z.B. ein Adress-text) nur die erste Zeile geschrieben werden soll. Excel zum Beispiel kann mit CRLF in CSV-strings nicht umgehen. |
file_name | Standard: '' Pfad zum Speichern des Files auf dem Filesystem. Wird kein File-Name angegeben, wird der CSV-Text nicht gespeichert, nur im Memory zurückgegeben. |
field_names_in_first_line | Standard: True Schreibt die Feldnamen als erste Zeile im CSV. |
row_delimiter | Standard: '\n' Zeilen-Trennzeichen. |
add_row() | Dem Exporter werden Zeilen vom Typ OCLCSVRecord angehängt. |
populate_rows(listexpression, sqlwhere, ocl_filter_expression) | Methode, welche die Zeilen erstellt mit OCL oder SQL. Die Liste kann ausserdem mit OCL gefiltert werden (nützlich vor allem, wenn als Expression eine SQL-Expression verwendet wird).
|
export_rows() | Methode, die das CSV File erstellt und es auf dem File-system abspeichert oder im Memory zurückgibt (falls kein file_name angegeben wird). |
Die einzelnen Records, also die Zeilen, die geschrieben werden, sind von der Klasse OCLCSVRecord. Die Klasse hat folgende Eigenschaften:
Eigenschaft | Beschreibung |
---|---|
key | Feldname. Die Feldnamen werden standardmässig als erste Zeile ins CSV geschrieben, ausser die Option field_names_in_first_line beim Exporter wird auf False gesetzt (siehe oben) |
default_value | Standardwert. Hier kann ein Standardwert angegeben werden, welcher ge-schrieben wird, falls das Feld keinen Wert enthält. Wird kein Standardwert angegeben, muss None angegeben werden. |
field_type | Feldtyp. Die behandelten Feldtypen sind: – string. String-Handling, welches sich aktiv um das Encoding kümmert beim Schreiben eines Files. – float: Zahl mit zwei Nachkommastellen, Dezimaltrennzeichen ist der Punkt. – floatlocale: Zahl mit vier Nachkommastellen, Dezimaltrennzeichen gemäss lokalen Regionaleinstellungen oder gemäss replaceSeparatorBy (sie-he Beschreibung weiter unten). – date: Datum, wird im Format Tag.Monat.Jahr geschrieben. Alle anderen Feldtypen werden einfach als String interpretiert: str(value). Es kann beispielsweise auch int verwendet werden, es gibt aber keine spe-zielle Behandlung für int. |
ocl_expression |
OCL: Optional. Für die Berechnung des Feldes kann eine OCL-Expression angegeben werden. |
Die Zeilen werden als Unicode Strings zurückgegeben.
Es gibt verschieden Möglichkeiten, das zu nutzen:
from VertecCSVExporterClasses import VertecCsvExporter fields = [ ('Project', None, 'string', 'code'), ('ProjectId', None, 'int', 'objid'), ('Currency', None, 'string', 'waehrung.asstring'), ('Betreffend', None, 'string', 'betreffend'), ] exporter = VertecCsvExporter(fields) exporter.populate_rows("projekt") csv = exporter.export_rows()
Variante 1 mit SQL-Expression
exporter.populate_rows("Projekt", "CreationDateTime>='01.01.2020'", "self->orderby(code)")
CSV enthält nun das CSV als Unicode String und kann z.B. via vtcapp.sendfile() an den Client gesendet werden.
Da dieser String auch weiterverarbeitet werden könnte, wird das Encoding hier nicht berücksichtigt. Möchte man diesen String beispielsweise als UTF-8 haben, kann einfach ein .encode("UTF-8")
angehängt werden.
Aufbau wie oben, aber mit Angabe eines File-Pfads:
exporter.file_name = r'c:\temp\export.csv'
Das exporter.export_rows()
speichert dann ein Textfile, standardmässig in UTF-8.
Via exporter.encoding
kann irgendein Encoding angegeben werden (z.B. exporter.encoding='Windows-1252'
).
Die Felder, welche OCL beinhalten, werden nach wie vor automatisch berechnet, können aber über die Angabe des Feldnamens auch überschrieben werden.
from VertecCSVExporterClasses import VertecCsvExporter fields = [ ('Project', None, 'string', 'code'), ('ProjectId', None, 'int', 'objid'), ('Currency', None, 'string', 'waehrung.asstring'), ('Betreffend', None, 'string', 'betreffend'), ('KomplizierteBerechnung', 0.0, 'float', ''), ] exporter = VertecCsvExporter(fields) for projekt in projekte: if projekt.typ = irgendeine_bedingung: row = exporter.add_row(projekt) row.KomplizierteBerechnung = berechneter_wert csv = exporter.export_rows()