Definire una colonna

Una volta definita una Table è possibile procedere con la definizione di tutte le colonne.

Oltre alle Colonne di sistema automatiche, non obbligatorie e per le quali rimandiamo a una sezione dedicata, è possibile inserire manualmente colonne «reali» con l’utilizzo di column:

tbl.column('codice' ,size=':10',name_long='!![it]Codice')
tbl.column('descrizione' ,size=':50',name_long='!![it]Descrizione')

Alternativamente, è possibile inserire delle Colonne virtuali

tbl.formulaColumn('n_fatture',select=dict(table='fatt.fattura',
                                                columns='COUNT(*)',
                                                where='$cliente_id=#THIS.id'),
                                                dtype='L',name_long='N.Fatture')

tbl.aliasColumn('clientenome','@cliente_id.ragione_sociale',name_long='Cliente')

Indipendentemente dal tipo di colonna, sarà sempre possibile specificare:

  • un name, generalmente implicito

  • una size, ovvero un numero di caratteri per il campo

  • un name_long, un name_short o un name_plural, ovvero nomi friendly lungo, corto e plurale

  • un dtype tra quelli disponibili (si veda la sezione seguente)

  • dei meccanismi di validazione con validate_ seguito dalla condizione di validazione o da attributi addizionali

  • una serie di attributi accessori (si rimanda alla sezione Parametri)

I dtype

Per ogni colonna è possibile specificare un dtype, ovvero il tipo di campo (testuale, numerico, ecc), al fine di una corretta gestione dal parte dell’ORM. È possibile scegliere tra una serie di tipi predefiniti:

  • T per i campi testo, di default se non specificato

  • N, I, L, per i campi numerici

  • X per i campi Bag

  • B per i campi Booleani con valori True, False o Null

  • D, H, DH per gli oggetti di tipo data, ora, data e ora

  • P per le immagini

Si noti che il sistema cercherà in ogni momento di individuare automaticamente il tipo di campo inserito, tuttavia si consiglia di specificare manualmente il tipo di campo per aumentare il grado di controllo sull’esito di questo processo.

Oltre a questi tipi predefiniti è comunque possibile specificare dei dtype personalizzati a livello di package. Ad esempio, all’interno del main del package fatt troviamo:

def custom_type_money(self):
      return dict(dtype='N',format='#,###.00')

  def custom_type_percent(self):
      return dict(dtype='N',format='##.00')

Specificando quindi dtype='money' come attributo di una qualsiasi colonna di una tabella del package fatt verrà utilizzato il dtype personalizzato. Si noti che con format abbiamo affinato la visualizzazione del campo numerico come desideravamo.


Parametri:

Nome parametro

Tipo

Descrizione

name

T

Generalmente implicito, definisce il nome della colonna (es: “nome”)

size

L

Permette di definire il numero dei caratteri del contenuto della colonna (es: size=”:22”)

dtype

T

Permette di indicare il datatype tra quelli disponibili di default (“T”, “B”, “X”, “I”, “L”, “N”, “D”, “H”, “DH”, “P”) o customizzati. Se omesso è sempre dtype=”T”

name_long

T

Permette di definire il name_long («friendly name») della colonna (es: name_long=”Nome e Cognome”)

name_plural

T

Permette di definire un friendly name al plurale (es: “Numeri di telefono”)

name_short

T

Permette di indicare un friendly name abbreviato (es: name_short=”Pr.”)

group

T

Deprecato, sostituito dai colgroups Permette di indicare un codice di raggruppamento, affinché le colonne siano raggruppate sotto un’unica voce nel selettore delle colonne di destra del tablehandler

unmodifiable

B

Se impostato a True, il campo non sarà più modificabile una volta che è stato salvato (sarà quindi possibile solo il primo inserimento alla creazione del record)

unique

B

Introduce un vincolo di unicità, corrispondente all’SQL UNIQUE. Di default la primary key è sempre unique=True, ma è possibile assegnare questo parametro anche ad altre colonne (per es. in caso di colonne con contatori)

values

T

Se sono presenti solo un limitato numero di valori predeterminati per la colonna, questi vanno indicati in questo campo (es: tbl.column(“type”, name_long=”type”, values=”RESPONSE,UPDATE,MESSAGE_TAG,CONTACT”))

subfields

T

In caso di Bag contenente i dynamic fields di una tabella in relazione, permette di indicare la colonna con i campi da mostrare e che riempiranno la Bag (es: tbl.column(“custom_fields”, dtype=”X”, name_long=”Custom Fields”, subfields=”type_id”))

indexed

B

_sendback

B

defaultFrom

T

Permette di indicare un valore da ereditare e mostrare come default nella Form, partendo da una relazione (es: defaultFrom=”@parent_id.voce_fatturazione_id” in caso di figlio di una tabella gerarchica, o defaultFrom=”@tipo_prodotto_id.tipo_iva” in caso di una relazione).

plugToForm

B

Se impostato a True, permette di mostrare direttamente il field nella Form della tabella, senza necessità di modificare la risorsa. Particolarmente utile in caso di customizzazioni di package.

sql_value

T

Permette di inserire una formula di calcolo del valore della colonna, a livello di sql (quindi ricalcolata a ogni operazione di insert/update, es: sql_value=»:area_modulo_dflt||”/”||:codice_mod ulo_dflt»)

Validations Parameters

validate_

T

Permette di definire i parametri di validazione

validate_notnull

B

Se impostato a True rende il riempimento della colonna obbligatorio

validate_len

L

Permette di indicare una lunghezza affinché il campo della colonna sia valido (es: validate_len=”2:40”)

Autore della sezione: Davide Paci