Υπολογιζόμενα πεδία και σενάρια πλήκτρων

Τα υπολογιζόμενα πεδία και τα σενάρια πλήκτρων χρησιμοποιούν την προγραμματιστική γλώσσα Python. Ο υπολογισμός ή σενάριο είναι η υλοποίηση της συνάρτησης της οποίας η υπογραφή παρέχεται για σας.

Φιγούρα B-1Επεξεργασία του ορισμού ενός υπολογιζόμενου πεδίου

B.1. Τιμές πεδίου

Για παράδειγμα,

record["name_first"]
είναι η τιμή του πεδίου name_first στην τρέχουσα εγγραφή.

B.2. Σχετικές εγγραφές

Για παράδειγμα, το

record.related["location"]
παρέχει τις σχετικές εγγραφές για την τρέχουσα εγγραφή.

B.2.1. Εγγραφές μοναδικά συσχετισμένες

Για σχέσεις που ορίζουν μια μοναδική εγγραφή, μπορείτε να πάρετε την τιμή ενός πεδίου σε αυτήν την εγγραφή. Για παράδειγμα, το

record.related["location"]["name"]
είναι η τιμή του πεδίου ονόματος στον πίνακα που δείχνεται από τη σχέση θέσης (συχνά λέγεται location::name).

B.2.2. Πολλαπλές συσχετισμένες εγγραφές

Για σχέσεις που ορίζουν πολλαπλές εγγραφές, μπορείτε να χρησιμοποιήσετε τις συναρτήσεις σύνοψης (sum, count, average) για να πάρετε τις συνολικές τιμές. Για παράδειγμα,

record.related["invoice_lines"].sum("total_price")
.

B.3. Έλεγχος για κενές τιμές

Το πώς ελέγχετε κενές τιμές εξαρτάται από τον τύπο του πεδίου:

B.3.1. Πεδία μη κειμένου

Τα πεδία μη κειμένου μπορεί να είναι κενά, δείχνοντας ότι ο χρήστης δεν έχει εισάγει καμία τιμή στο πεδίο. Για παράδειγμα, το Glom δεν θεωρεί ότι μια κενή τιμή σε ένα αριθμητικό πεδίο πρέπει να σημαίνει 0.

Μπορείτε να ελέγξετε αν ένα πεδίο είναι κενό χρησιμοποιώντας το None του Python. Για παράδειγμα:

  if(record["contact_id"] == None):
    return "No Contact"
  else:
    return record.related["contacts"]["name_full"]
  

Μπορείτε επίσης να ελέγξετε αν υπάρχουν συσχετισμένες εγγραφές. Για παράδειγμα:

  if(record.related["contacts"] == None):
    return "No Contact"
  else:
    return record.related["contacts"]["name_full"]
  

B.3.2. Πεδία κειμένου

Για πεδία κειμένου, θα πρέπει να ελέγξετε για συμβολοσειρές μηδενικού μήκους. Δεν είναι δυνατό στο Glom να διακρίνετε μεταξύ συμβολοσειρών μηδενικού μήκους και της απουσίας οποιασδήποτε συμβολοσειράς, επειδή δεν υπάρχει κανένα πλεονέκτημα να το κάνετε. Για παράδειγμα:

  if(record["name_full"] == ""):
    return "No Name"
  else:
    return record["name_full"]
  

B.4. Χρήση του πλήρους API pygda

pygda είναι μια API Python για το API libgda. Το γνώρισμα σύνδεση της εγγραφής παρέχει μια gda.connection που μπορεί να χρησιμοποιηθεί για πρόσβαση της τρέχουσας βάσης δεδομένων άμεσα. Αυτό επιτρέπει να τρέξετε οποιοδήποτε ερώτημα SQL, για παράδειγμα να διαβάσετε δεδομένα από τη βάση δεδομένων με ένα SELECT, ή να αλλάξετε τιμές στη βάση δεδομένων με ένα UPDATE. Σημειώστε ότι η σύνδεση είναι ήδη ανοικτή, έτσι μπορείτε να αποφύγετε τη δύσκολη εργασία ορισμού των λεπτομερειών της σύνδεσης.

Το γνώρισμα table_name της εγγραφής παρέχει επίσης το όνομα του τρέχοντος πίνακα.

Αυτό το παράδειγμα διαβάζει όλα τα δεδομένα από τον τρέχοντα πίνακα και εμφανίζει τις τιμές στο τερματικό:

# Χρησιμοποιήστε την σύνδεση της τρέχουσας βάσης δεδομένων
# για να πάρετε όλα τα δεδομένα για τον τρέχοντα πίνακα.
#
# record.connection είναι ένα ήδη ανοικτό αντικείμενο gda.connection,
# που μας γλυτώνει από το άνοιγμα της σύνδεσης,
# ή ακόμα τη γνώση του ονόματος της βάσης δεδομένων.

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)

    # Εύρεση αν είναι ένα πρωτεύον κλειδί:
    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";