Colonne di sistema

I sysFields

Nella Definizione della table abbiamo costruito manualmente una colonna chiave utilizzata come primary_key e una colonna data_inserimento per la data di inserimento del record.

In realtà Genropy ci mette a disposizione un sistema alternativo per la definizione di alcune colonne «di sistema», che possiamo definire automaticamente nel model con la chiamata a sysFields:

class Table(object):
  def config_db(self, pkg):
      tbl = pkg.table('nominativo', pkey='chiave', name_long='!![it]Nominativo',
                      name_plural='!![it]Nominativi',caption_field='nome')
      self.sysFields(tbl)

Così facendo verranno automaticamente create una serie di colonne:

id
__ins_ts
__mod_ts
__ins_user

per citarne alcune. Se questi campi vengono aggiunti al model della table, verranno valorizzati automaticamente dall’ORM, che li popolerà autonomamente qualora non fossero già valorizzati al momento della insert. Ciò avviene anche in caso di una qualsiasi Operazione di scrittura .

In questo modo per esempio utilizzeremo l”id di default di Genropy, ovvero una serie di caratteri random uuid di 22 caratteri.

Come abbiamo visto in fase di definizione della Table , è possibile utilizzare qualunque tipo di chiave primaria. Tuttavia, se si utilizzano i sysFields, questi di default genereranno anche la colonna id di Genropy, a meno che non si specifichi diversamente.

Suggerimento

Se si utilizza una chiave primaria personalizzata ma si desidera utilizzare le altre colonne di sistema di Genropy, è sufficiente passare l’attributo id=False al metodo sysFields:

self.sysFields(tbl, id=False)

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»)

tbl

T

Inserendo self.sysFields(tbl) vengono aggiunti l’id autogenerato, __ins_ts,__mod_ts, etc. Alternativamente può essere omesso

id

B

Se impostato a False permette di annullare la creazione della colonna id automatica (obbligatorio se si indica un’altra pkey)

ins

B

Di default True, aggiunge la colonna __ins_ts con data e ora della creazione del record

upd

B

Di default True, aggiunge la colonna __mod_ts con data e ora dell’ultima modifica del record

full_upd

B

Di default False, aggiunge la colonna __full_mod_ts con la storia completa di data e ora delle modifiche del record

ldel

B

Di default True, aggiunge la colonna __del_ts con data e ora dell’eliminazione del record (abilita o meno l’archiviazione)

user_ins

B

Di default True, aggiunge la colonna __ins_user con username del creatore del record

user_mod

B

Di default True, aggiunge la colonna __mod_user con username di chi ha modificato il record

counter

B

Se impostato a True permette di aggiungere una colonna _row_count che funge da contatore e sulla base della quale verranno ordinati i record. Alternativamente, è possibile indicare un campo specifico su cui effettuare il controllo di unicità (es: counter=True o counter=”fattura_id”)

hierarchical

B

Se impostato a True permette di contrassegnare la table come gerarchica. Alternativamente è possibile indicare una colonna (es: hierarchical=True o hierarchical=”descrizione”)

df

B

Se impostato a True permette di attivare i dynamic fields per la tabella in questione

draftField

B

Di default False, aggiunge la colonna __is_draft se il record può avere uno status Bozza

useProtectionTag

T

Permette di indicare la categoria di user al di sotto della quale la tabella risulterà visibile ma protetta (es:useProtectionTag=”superadmin”)

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