Vypočítávaná pole a skripty tlačítek

Vypočítávaná pole a tlačítko skripty používají programovací jazyk Python. Výpočet či skript jsou implementací funkce, pro kterou je vám poskytnut podpis.

Obrázek B-1Úprava definice vypočítávaného pole

B.1. Hodnoty polí

Například

record["krestni_jmeno"]
je hodnota pole krestni_jmeno v aktuálním záznamu.

B.2. Navazující záznamy

Například

record.related["misto"]
poskytuje záznamy navázané na aktuální záznam.

B.2.1. Jeden navazující záznam

Pro vztahy, které určují jeden záznam, můžete získat hodnotu pole v záznamu. Například

record.related["misto"]["nazev"]
je hodnota pole „nazev“ v tabulce určené vztahem „misto“ (často označováno misto::nazev)

B.2.2. Vícenásobné navazující záznamy

Pro vztahy, které určují více záznamů, musíte použít agregační funkce (sum, count, average), abyste získali souhrnnou hodnotu. Například

record.related["radky_faktur"].sum("celkova_cena")
.

B.3. Test na prázdnou hodnotu

Jak můžete testovat na prázdné hodnoty u různých typů polí:

B.3.1. Netextová pole

Netextová pole mohou být prázdná, což znamená, že uživatel do pole nezadal žádnou hodnotu. Glom například nepředpokládá, že prázdná hodnota v číselném poli by měla znamenat 0.

Zda je pole prázdné můžete testovat pomocí hodnoty None jazyka Python. Například:

  if(record["kontakt_id"] == None):
    return "Žádný kontakt"
  else:
    return record.related["kontakty"]["cele_jmeno"]
  

Můžete také otestovat, jestli existují nějaké navazující záznamy. Například:

  if(record.related["kontakty"] == None):
    return "Žádný kontakt"
  else:
    return record.related["kontakty"]["cele_jmeno"]
  

B.3.2. Textová pole

U textových polí byste měli kontrolovat nulovou délku řetězce. V aplikaci Glom není možné rozlišit mezi nulovou délkou řetězce a nezadaným žádným řetězcem, protože to nemá žádný praktický význam. Například:

  if(record["cele_jmeno"] == ""):
    return "Žádné jméno"
  else:
    return record["cele_jmeno"]
  

B.4. Používání úplného API pygda

pygda je API jazyka Python pro API libgda. Vlastnost connection u záznamu poskytuje gda.connection, které lze použít k přímému přístupu do aktuální databáze. Díky tomu můžete spustit libovolný dotaz v SQL, například přečíst data z databáze pomocí SELECT nebo změnit hodnoty v databázi pomocí UPDATE. Všimněte si, že spojení je již otevřeno, takže si ušetříte náročnou práci se zadáváním připojovacích údajů.

Vlastnost table_name u záznamu poskytuje název aktuální tabulky.

Tento příklad čte všechna data z aktuální tabulky a hodnoty vypisuje na terminál:

# Použití aktuálního databázového připojení 
# k získání všech dat z aktuální tabulky.
#
# record.connection je již otevřený objekt gda.connection,
# takže se nemusíme trápit s otevíráním připojení,
# ani znalostí názvu databáze.

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 "    Počet sloupců: ", columns

for i in range(columns):
    print "      sloupec ", i;
    print "        název=", data_model.get_column_title(i)

    # Zjistit, zda se jedná o primární klíč::
    field = data_model.describe_column(i)
    if field.get_primary_key():
        print "        (primární klíč)"

    print "\n";
     
print "    Počet řádků: ", rows

for row_index in range(rows):
    print "      řádek ", row_index;

    for col_index in range(columns):
        print "        hodnota=", data_model.get_value_at(col_index, row_index).get()

    print "\n";