Campos calculados y botones de script

Los campos calculados y los botones de scripts usan el lenguaje de programación Python.El cálculo o el script es la implementación de una función cuya firma se le proporciona.

Figura B-1Editar la definición de un campo calculado

B.1. Valores de campo

Por ejemplo,

record["name_first"]
es el valor del campo name_first en el registro actual.

B.2. Registros relacionados

Por ejemplo,

record.related["ubicación"]
proporciona los registros relacionados con el registro actual.

B.2.1. Un sólo registro relacionado

Para relaciones que especifican un único registro puede obtener el valor de un campo en ese registro. Por ejemplo,

record.related["ubicación"]["nombre"]
es el valor del nombre del campo en la tabla indicada por la relación de ubicación (habitualmente denominada ubicación::nombre).

B.2.2. Múltiples registros relacionados

Para relaciones que especifican múltiples registros, puede utilizar las funciones de adición (sum, count, average) para obtener todos los valores. Por ejemplo,

record.related["lineas_de_factura"].sum("precio_total")
.

B.3. Probando para valores vacíos

La manera de probar para valores vacíos depende del tipo de campo:

B.3.1. Campos que no son de texto

Los campos que no sean de texto deben estar vacíos, indicando que el usuario no ha introducido ningún valor en el campo. Por ejemplo, Glom no asume que un valor vacío en un campo numérico deba valer 0.

Puede probar si un campo está vacío usando el código Python «None». Por ejemplo:

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

También puede comprobar si hay algunos registros relacionados. Por ejemplo:

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

B.3.2. Campos de texto

Para campos de texto debe comprobar las cadenas de longitud cero. En Glom no es posible distinguir entre cadenas de longitud cero y ausencia de cadena, ya que no hay diferencia. Por ejemplo:

  if(record["name_full"] == ""):
    return "Sin nombre"
  else:
    return record["name_full"]
  

B.4. Usando la API pydga completa

pygda es una API de Python para la API libgda. Los atributos de los registros connection proporcionan una conexión gda que puede usarse para acceder directamente a la base de datos actual. Esto le permite ejecutar cualquier consulta SQL, por ejemplo para leer datos de la base de datos con un SELECT o cambiar valores en la base de datos con un UPDATE. Nótese que la conexión ya está abierta, por lo que puede evitar el difícil trabajo de especificar los detalles de la conexión.

El atributo del registro table_name también proporciona el nombre de la tabla actual.

Este ejemplo lee todos los datos de la tabla actual e imprime los valores en la terminal:

# Usar la conexión actual a la base de datos 
# para obtener todos los datos de la tabla actual.
#
# la conexión de registros es un objeto gda.connection ya abierto,
# evitando la incomodidad de abrir la conexión,
# o incluso conociendo el nombre de la base de datos.

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 "    Número de columnas: ", columns

for i in range(columns):
    print "      columna ", i;
    print "        nombre=", data_model.get_column_title(i)

    # Comprueba si es la clave primaria:\n"
    field = data_model.describe_column(i)
    if field.get_primary_key():
        print "        (clave primaria)"

    print "\n";
     
print "    Número de columnas: ", rows

for row_index in range(rows):
    print "      fila ", row_index;

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

    print "\n";