templateChunk

Il templateChunk è un widget attivabile con una sola riga di codice che permette di mostrare in qualsiasi area di una pagina di Genropy un blocchetto template personalizzabile poi con il Template Editor. Con il templateChunk è possibile richiamare template già esistenti oppure avviarne la creazione direttamente dall’interfaccia.

Prendendo quindi a titolo di esempio la table fattura di Sandbox, proviamo a modificare l’area di intestazione della fattura per riportare un blocco template in cui mostrare i dati relativi al cliente. Per fare questo sarà sufficiente all’interno della th_resource definire un widget di layout e il templateChunk come segue:

def th_form(self, form):
    bc = form.center.borderContainer()
    bc.contentPane(region='top').templateChunk(table='fatt.fattura', record_id='^#FORM.record.id',
                                                template='dati_cliente', height='150px')
    self.fatturaRighe(bc.contentPane(region='center'))

Nella form di th_fattura prima definiamo un borderContainer che andrà a contenere il nostro templateChunk. Nella seconda riga sostituiamo poi la fatturaTestata di default con il templateChunk, specificando che dovrà essere collocato nella parte superiore di questo borderContainer e che dovrà avere le seguenti caratteristiche:

  • la table (obbligatoria) che lo utilizzerà sarà fattura del package fatt. Indicheremo in questo campo la tabella da cui reperire i dati attraverso la rete di relazioni (in questo caso, la fattura, attraverso la quale risaliremo ai dati del cliente)

  • il record_id (obbligatorio), stesso discorso che nel campo precedente, in questo caso essendo nella form il record della fattura che stiamo visualizzando

  • il template da utilizzare (facoltativo), possiamo crearlo prima e poi richiamarlo in questa sede o alternativamente dargli un nome qui e definirlo direttamente dall’editor nella form della fattura

Se come in questo caso non abbiamo definito precedentemente un template e quindi lo stiamo creando in questo momento, all’apertura di una qualunque fattura ci si presenterà la schermata seguente:

../_images/template-not-yet-created.png

A questo punto sarà sufficiente tenere premuto il tasto shift e fare doppio clic sull’area indicata per avviare il Template Editor e la creazione del template che verrà salvato nella cartella /resources/tables/fattura/tpl/dati_cliente.xml (dove dati_cliente è il nome del template che abbiamo specificato).

Nel template Editor potremo a questo punto (esattamente come nel caso di creazione template per e-mail o stampe) richiamare qualsiasi tipo di campo dalla tabella o dalle tabelle in relazione. Questo tipo di meccanismo è stato mostrato anche in una delle nostre Genropill: Come rappresentare i dati di un record in un blocco template

Suggerimento

Per avviare la creazione e salvare correttamente il template direttamente nella risorsa è fondamentale indicare template='nome' tra i parametri del templateChunk.

Uso nelle webpage

Si noti innanzitutto che all’interno di un TableHandler non è necessario eseguire alcuna importazione, mentre per l’utilizzo all’interno di una qualsiasi webpage è necessario importare il component:

py_requires="gnrcomponents/tpleditor:ChunkEditor"

Inoltre, il templateChunk richiede l’inserimento di un record_id, di conseguenza è probabile che ci troveremo di fronte alla necessità di portare i dati del record nella pagina tramite un elemento Datastore .

Potremmo dunque pensare di attuare una soluzione del genere:

cp = root.contentPane(region='center', datapath='main')
provincia_rec = self.db.table('glbl.provincia').recordAs('MI')
cp.data('.prov_sigla', provincia_rec['sigla'])
cp.templateChunk(table='glbl.provincia', record_id='^.prov_sigla', height='200px', template='provincetpl')

Il problema è relativo all’utilizzo di data , che al momento in cui viene servita la pagina ha già effettuato il posizionamento del valore al path indicato, il che non fa innescare il trigger del templateChunk.

La soluzione da utilizzare è invece la seguente:

cp = root.contentPane(region='center', datapath='main')
provincia_rec = self.db.table('glbl.provincia').recordAs('MI')
cp.dataFormula('.prov_sigla', 'prov', prov=provincia_rec['sigla'], _onStart=True)
cp.templateChunk(table='glbl.provincia', record_id='^.prov_sigla', height='200px', template='provincetpl')

In questo caso usiamo invece un dataFormula , corredato dell’attributo _onStart=True, che ci consente di ottenere lo stesso risultato del caso precedente ma innescando il trigger nativo del templateChunk, che ci mostra così la schermata per inserire il template.


Parametri:

Nome parametro

Tipo

Descrizione

table

T

La table da cui reperire i dati da inserire nel template

record_id

T

L’id del record di cui mostrare i dati nel template (obbligatorio, in alternativo a datasource e dataProvider)

template

T

Il template, se inesistente verrà creato con il nome indicato, se omesso verrà chiamato «default» (es: template=”cliente”). In alternativa, se specificato il parametro editable, può essere un path di una bag invece di un nome (es: template=”^.tpl_bag”)

editable

B

Se uguale a True, invece di creare un file xml con il nome indicato il template verrà salvato al path indicato in una bag

Autore della sezione: Davide Paci