Valori predefiniti

pkeyValue

Come abbiamo visto in fase di Definizione di una table , in Genropy è possibile utilizzare qualsiasi campo della tabella come primary key. Di default questa corrisponde alla colonna di sistema id di Genropy, ovvero una serie di 22 caratteri casuali.

Al momento della insert viene invocato il metodo di Table pkeyValue:

new_pkey = tbl_prodotto.pkeyValue()
print (new_pkey)

gW6zRisfP6iKjwpD6DM2qg

Se si desidera usare un proprio algoritmo o un metodo alternativo per assegnare i valori alla primary key, scavalcando quindi quello di sistema di Genropy, è possibile ridefinire nella Tabella il metodo pkeyValue per fargli fare l’autoassegnazione ad una colonna specifica secondo un criterio a piacere (es: valori che vengono ad esempio compilati in form o ricevuti da un processo di importazione da sistemi esistenti)

Suggerimento

In caso di primary key di tipo numerico, la pkeyValue è in grado di riconoscere la serialità e provvederà a restituire l’ultimo valore incrementato di 1.

defaultValues

Con il metodo defaultValues è possibile proporre un valore di default durante la compilazione di una Form per creare un record. Il metodo può essere utilizzato all’interno della classe Table del nostro model per «far risparmiare» all’utente tempo nella compilazione o alternativamente per precompilare un campo di sistema non visibile all’utente.

Per esempio, si potrebbe andare a precompilare la colonna data della table con la data di lavoro inserita durante il login:

def defaultValues(self):
      return dict(data=self.db.workdate)

sysRecord

Con il metodo sysRecord è possibile innescare la generazione automatica di un record al lancio della gnrdbsetup -u (o -U). L’unico prerequisito è che la tabella utilizzi i sysFields.

Affinché il metodo funzioni correttamente, è necessario utilizzare il decoratore @metadata.

Vediamo ad esempio come popolare la tabella progetto_evento_tipo con un record di nome start, uno di nome end e uno per gli eventi generici di log:

from gnr.core.gnrdecorator import metadata

class Table(object):
  def config_db(self,pkg):
      tbl =  pkg.table('progetto_evento_tipo',pkey='codice',name_long='Tipo evento',
                          name_plural='Tipi evento',caption_field='descrizione', defaultDataset=True, lookup=True)
      tbl.column('codice',size=':8',name_long='Codice',name_short='Codice',unique=True,indexed=True)
      tbl.column('descrizione',name_long='Descrizione',name_short='Descrizione')
      self.sysFields(tbl, id=False)

  @metadata(mandatory=True)
  def sysRecord_START(self):
      return self.newrecord(codice='START', descrizione='Partenza progetto')

  @metadata(mandatory=True)
  def sysRecord_END(self):
      return self.newrecord(codice='END', descrizione='Conclusione progetto')

Autore della sezione: Davide Paci