.. _orm_genropy/orm_genropy/model/column/sysFields: Colonne di sistema ================== I sysFields ~~~~~~~~~~~ Nella :ref:`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 :ref:`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 :ref:`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. .. hint:: 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) .. raw:: html
**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') | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Davide Paci