Champs calculés et scripts de boutons
Les champs calculés et les scripts de boutons utilisent le langage de programmation Python. Le calcul ou le script est la réalisation d'une fonction dont la signature vous est fournie.
- B.I. Valeurs de champ
- B.II. Enregistrements reliés
- B.III. Test de valeurs vides
- B.IV. Utilisation de l'API pygda complète
B.I. Valeurs de champ
Par exemple,
record["prenom"]
B.II. Enregistrements reliés
Par exemple,
record.related["location"]
- B.II.I. Enregistrements reliés unique
- B.II.II. Enregistrements reliés multiples
B.II.I. Enregistrements reliés unique
Pour les relations qui spécifient un enregistrement unique, vous pouvez récupérer la valeur de ce champ dans cet enregistrement. Par exemple,
record.related["location"]["nom"]
B.III. Test de valeurs vides
La manière de tester les valeurs vides dépend du type de champ :
- B.III.I. Champs non-texte
- B.III.II. Champs texte
B.III.I. Champs non-texte
Les champs non-texte peuvent être vides, signifiant que l'utilisateur n'a saisi aucune valeur dans le champ. Par exemple, Glom ne suppose pas qu'une valeur vide dans un champ numérique signifie 0.
Vous pouvez tester si un champ est vide en utilisant le « None » de Python. Par exemple :
if(record["numero_identification"] == None): return "Aucun contact" else: return record.related["contacts"]["nom_complet"]
Vous pourriez également tester s'il existe des enregistrements reliés. Par exemple :
if(record.related["contacts"] == None): return "Aucun Contact" else: return record.related["contacts"]["nom_complet"]
B.III.II. Champs texte
Pour les champs texte, vous devez vérifier que les chaînes ne sont pas vides. Il n'est pas possible dans Glom de faire la distinction entre des chaînes vides et l'absence d'une chaîne parce que ce n'est pas avantageux de le faire. Par exemple :
if(record["nom_complet"] == ""): return "Aucun nom" else: return record["nom_complet"]
B.IV. Utilisation de l'API pygda complète
Le module pygda est une API Python de l'API libgda. L'attribut connection d'un enregistrement fournit une gda.connection qui peut être utilisée pour accéder à la base de données actuelle de manière directe. Ceci vous permet d'exécuter n'importe quelle requête SQL, par exemple lire des données de la base de données avec SELECT ou modifier des valeurs dans la base de données avec un UPDATE. Notez que la connexion est déjà ouverte ce qui vous évite le travail difficile de spécification des détails de connexion.
L'attribut table_name de l'enregistrement fournit également le nom de la table actuelle.
Cet exemple permet de lire toutes les données de la table actuelle et d'afficher les valeurs sur le terminal :
# Use the current database's connection # to get all the data for the current table. # # record.connection is an already-open gda.connection object, # saving us the bother of opening the connection, # or even knowing the name of the database. query = "SELECT * FROM %s" % record.table_name data_model = gda.gda_execute_select_command(record.connection, query) 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) # Find out whether it's the primary key: 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";