Berechnete Felder und Knopfskripte
Berechnete Felder und Knopfskripte verwenden die Programmiersprache Python. Die Berechnung oder das Skript ist die Implementierung einer Funktion, deren Signatur Ihnen zur Verfügung gestellt wird.
- B.1. Feldwerte
- B.2. Bezugsdatensätze
- B.3. Prüfen auf leere Werte
- B.4. Benutzung der vollen Pygda-API
B.1. Feldwerte
Beispielsweise ist
record["name_first"]
B.2. Bezugsdatensätze
Beispielsweise stellt
record.related["location"]
- B.2.1. Einzelbeziehungen
- B.2.2. Datensätze mit mehrfachen Bezügen
B.2.1. Einzelbeziehungen
Für Beziehungen, die einen einzelnen Datensatz angeben, können Sie den Wert des Feldes in diesem Datensatz erhalten. Beispielsweise ist
record.related[»Ort«][»Name«]
B.3. Prüfen auf leere Werte
So überprüfen Sie auf leere Werte, abhängig vom Feldtyp:
- B.3.1. Nicht-Text-Felder
- B.3.2. Textfelder
B.3.1. Nicht-Text-Felder
Nicht-Textfelder dürfen leer sein, was anzeigt, dass der Benutzer noch keinerlei Wert in dieses Feld eingegeben hat. Beispielsweise nimmt Glom nicht an, dass ein leerer Wert in einem numerischen Feld den Wert 0 hat.
Sie können testen, ob ein Feld leer ist, indem Sie »None« aus Python verwenden. Zum Beispiel:
if(record["contact_id"] == None): return "No Contact" else: return record.related["contacts"]["name_full"]
Sie können auch überprüfen, ob Bezugsdatensätze vorhanden sind. Zum Beispiel:
if(record.related["contacts"] == None): return "No Contact" else: return record.related["contacts"]["name_full"]
B.3.2. Textfelder
In Textfeldern sollten Sie prüfen, ob Zeichenketten der Länge Null vorhanden sind. Glom kann nicht zwischen Zeichenketten der Länge Null und fehlenden Zeichenketten unterscheiden, weil dies keinerlei Vorteile hätte. Zum Beispiel:
if(record["name_full"] == ""): return "No Name" else: return record["name_full"]
B.4. Benutzung der vollen Pygda-API
pygda ist eine Python-API zur libgda-API. Das connection-Attribut stellt eine gda.connection bereit, die zum direkten Zugriff auf die aktuelle Datenbank genutzt werden kann. Dies ermöglicht Ihnen die Ausführung einer SQL-Abfrage, beispielsweise zum Lesen von Daten aus der Datenbank mit einer SELECT-Anweisung, oder zum Ändern von Werten in der Datenbank mit einer UPDATE-Anweisung. Bedenken Sie, dass die Verbindung bereits offen ist, so dass die Eingabe der Verbindungsdetails nicht mehr erforderlich ist.
Das Attribut table_name des Datensatzes stellt auch den Namen der aktuellen Tabelle zur Verfügung.
Dieses Beispiel liest alle Daten aus der aktuellen Tabelle und gibt deren Werte im Terminal aus:
# Die aktuelle Verbindung zur Datenbank zum # Lesen aller Daten der aktuellen Tabelle verwenden. # # record.connection ist eine bereits geöffnetes gda.connection Objekt, # das uns ein Öffnen einer Verbindung erspart, # und selbst das Wissen über den Namen der Datenbank. query = "SELECT * FROM %s" % record.table_name command = gda.Command(query) data_model = record.connection.execute_single_command(command) rows = data_model.get_n_rows() columns = data_model.get_n_columns() print " Number of columns: ", columns for i in range(columns): print " column ", i; print " name=", data_model.get_column_title(i) # Herausfinden, ob es der Primärschlüssel ist: field = data_model.describe_column(i) if field.get_primary_key(): print " (primary key)" print "\n"; print " Number of rows: ", rows for row_index in range(rows): print " row ", row_index; for col_index in range(columns): print " value=", data_model.get_value_at(col_index, row_index).get() print "\n";