Modul für den einfachen Python CSV Export aus Vertec, mit integriertem OCL und SQL
Produktlinie
Standard
|Expert
Betriebsart
CLOUD ABO
|ON-PREMISES
Module
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 | Wird ein File-Name angegeben, wird das CSV direkt an den Client gesendet und kann dort gespeichert werden. |
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 zurückgibt. Falls ein file_name angegeben ist (siehe oben), wird es direkt an den Client gesendet. |
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 geschrieben 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 (siehe 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 spezielle 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.
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()
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-Namens:
exporter.file_name = 'export.csv'
Das exporter.export_rows()
sendet das File dann automatisch an den Client via vtcapp.sendfile()
.
Das File wird standardmässig in UTF-8 gesendet. Möchte man es in einem anderen Encoding haben, kann dies in exporter.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()