linkerBox¶
Il linkerBox nel suo habitat¶
Il linkerBox
è un component versatile e potente che consente di digitare caratteri all’interno di un semplice campo testo, fare una ricerca su una tabella in relazione, visualizzare i record risultanti e, a differenza di semplici widget come dbSelect
, modificare e aggiungere record nella tabella collegata:
Tutto questo è possibile perché è composto da elementi distinti che interagiscono tra di loro (un component, appunto) e che, nell’insieme, permettono sia la ricerca e la selezione dei record sia la visualizzazione del form della tabella collegata, fornendo anche comoda possibilità di scegliere (attraverso un Template Editor molto comune in Genropy) cosa mostrare a video:
Se volete vedere all’opera un linkerBox
potete seguire questi link per raggiungere le pagine dove ne viene mostrato l’utilizzo all’interno del Tutorial Fatturazione:
Tutorial fatturazione - Lezione 7: miglioramenti fattura
o la pagina del Manuale Utente che mostra, anche attraverso chiare immagini, l’effetto visivo e pratico che si ottiene sfruttando questo component:
Manuale utente Genropy - Campi in relazione in un form
Suggerimento
Si noti che il linkerBox è utilizzabile esclusivamente all’interno di una Form di un TableHandler, e dovrà essere collocato all’interno del datapath .record
, questo al fine di «ricevere» correttamente i dati del record da visualizzare.
Dietro le quinte¶
Pur essendo un component, il linkerBox
incorpora concetti e comportamenti tipici dei tableHandler, dei quali è quindi parente stretto, e per questo motivo è definito nel modulo th.py e si trova in genropy\resources\common\th\th.py
Se volete approfondire la conoscenza della sua struttura e di come è stato creato, potete aprire il file nel vostro editor preferito e cercare:
def th_linkerBox
Vedrete che un linkerBox
è fatto così:
Un linkerBox
è fondamentalmente un framePane che contiene nella parte top una linkerBar (che a sua volta è semplicemente una slotBar con dentro un linker - dbSelect con pulsante +
- e un titolo customizzato) e nella parte center ha un templateChunk che si occupa di visualizzare i dati scelti attraverso il template editor. Infine, se l’editing è attivato e possibile, viene aggiunta in modo dinamico nella parte bottom un’altra slotBar per contenere il pulsante di Edit.
Nota
Il linkerBox
è per sua natura un «framePane» e in quanto tale va posizionato e deve avere come padre un elemento adatto a contenerlo, come ad esempio un contentPane, mentre non avrebbe senso metterlo come elemento all’interno di un formBuilder. Come promemoria mettiamo qui il link alla pagina dove parliamo degli elementi di Layout e delle loro caratteristiche: Widgetpedia - Elementi di Layout
Per comodità e riferimento veloce riportiamo comunque qui la sua signature, cioè la sua definizione con elenco dei parametri principali e relativi valori di default, e spieghiamo velocemente il significato dei parametri più comunemente usati.
def th_linkerBox(self, pane, field=None, template='default', frameCode=None, formResource=None,
formUrl=None, newRecordOnly=None, openIfEmpty=None,
_class='pbl_roundedGroup', label=None, template_kwargs=None,
margin=None, editEnabled=True, addEnabled=True,
clientTemplate=False, center_class=None, **kwargs)
A titolo di esempio, ecco come è stato usato nella fattura del Tutorial Fatturazione: vedrete i parametri tipici di una chiamata a linkerBox.
bc.contentPane(region='center').linkerBox('cliente_id', margin='2px', openIfEmpty=True,
validate_notnull=True,
columns='$ragione_sociale,$provincia,@cliente_tipo_codice.descrizione',
auxColumns='@comune_id.denominazione,$provincia',
newRecordOnly=True, formResource='Form',
dialog_height='500px', dialog_width='800px')
Nota
Alcuni parametri presenti nel codice non sono espressamente documentati in questa pagina; ad esempio columns e auxColumns, che sono parametri ricevuti dalla linkerBox ma inoltrati direttamente alla dbSelect; stesso discorso per dialog_height e dialog_width che vengono estratti e passati al formHandler di edit del record per dare le dimensioni al dialog. Per avere più informazioni su questi parametri, quindi, potete fare riferimento alla documentazioni dei singoli widget.
Parametri:
Nome parametro |
Tipo |
Descrizione |
---|---|---|
field |
T |
|
LinkerBox Parametri |
||
openIfEmpty |
B |
|
addEnabled |
B |
|
editEnabled |
B |
|
newRecordOnly |
B |
|
label |
T |
|
Edit / Insert Parametri |
||
formResource |
T |
|
formUrl |
T |
|
framePane Parametri |
||
margin |
T |
|
_class |
T |
|
frameCode |
T |
|
Template Parametri |
||
template_kwargs |
T |
|
clientTemplate |
B |
|
template |
T |
|
Internal use Parametri |
||
center_class |
T |
|
Autore della sezione: Danilo Magro