.. _widgetpedia/elements/inputfields/dbselect:
dbSelect
========
.. toctree::
:maxdepth: 1
:hidden:
:titlesonly:
remoteSelect
*dbSelect* è uno dei widget più utili ed usati in Genropy.
Lo scopo di dbSelect è essenzialmente quello di inserire nel record corrente la foreignkey da un altro record in relazione.
Uno dei modi più rapidi per ottenere ed inserire la foreign key è fornire all'utente quello che appare come un semplice campo testo, in cui possa **digitare un frammento di testo** (querystring) ed ottenere in tempo reale **un menu a tendina di record compatibili** con la stringa presente nel campo.
Quando l'utente seleziona col click uno dei risultati dalla tendina o facendo invio il primo di essi, la foreignkey viene inserita come reale valore del campo, anche se nella form vedremo la sua rappresentazione, specificata dall'attributo *rowcaption* della table, o ridefinita dall'omonimo parametro.
Il menu a tendina è configurabile (con i parametri columns ed auxcolumns) e può mostrare al suo interno una vera e propria tabella suddivisa in colonne.
L'utilizzo del widget *dbselect* implica l'esecuzione rapidissima e in tempo reale di svariate query che cerchino nella table indicata dal parametro *dbtable* record compatibili con la *querystring*. La colonna su cui viene cercato un match è di default quella specificata dall'attributo *rowcaption*, ma possono essere ridefinite dall'attributo *columns*.
Tipicamente la *querystring* può includere i primi caratteri di un nome o di un codice
*I.E. "smi" per "Smith"*
Ma anche diversi frammenti:
*I.E. "Jo smi" per "John Smith"*
O su diverse colonne presenti nel parametro *columns*
*I.E. "smith boston" per John Smith che ha come colonna città Boston.*
Esempi
~~~~~~~
.. raw:: html
.. raw:: html
.. raw:: html
L'attributo *selected_*
-----------------------
Grazie all'attributo ``selected_`` è possibile portare nel *workspace*, oltre alla *foreignkey* del record selezionato, anche delle altre colonne del record a piacimento, e specificare il *path* nel quale andare a immagazzinare tale valore, nella forma::
selected_nomecolonna = 'pathdidestinazione'
.. raw:: html
Nell'esempio stiamo quindi copiando, al path *.vat_type_code*, il valore della colonna *vat_type_code* del record che andremo a selezionare. Ogni volta che cambieremo la selezione, ovviamente, verrà rieseguita la query e verrà aggiornato il valore al path indicato.
.. hint::
Si noti che non è assolutamente necessario che il nome della colonna e del path corrispondano, ma il nome del path può essere totalmente a piacere
Da un recente aggiornamento di novembre 2022 è anche possibile usare la *selected* con colonne in relazione, senza che sia obbligatorio l'uso di una `aliasColumn `_. La sintassi sarà la seguente::
selected_nomeapiacere = '.pathdidestinazione=@colonnainrelazione'
selected_provincia_cliente = '.provincia=@cliente_id.provincia'
.. raw:: html
.. hint::
Si noti che in questa sintassi andrà indicato il path di destinazione, il path della colonna in relazione, e nella parte dopo *selected_* sarà possibile indicare non il nome della colonna di provenienza, ma un nome totalmente a piacere.
.. raw:: html
**Parametri:**
+------------------------+------+--------------------------------------------------+
| Nome parametro | Tipo | Descrizione |
+========================+======+==================================================+
|hasDownArrow |B |True or False, permette di indicare se il campo |
| | |mostrerà o meno una tendina |
+------------------------+------+--------------------------------------------------+
|selected\_ |T |It's a prefix for kwargs. The parameter value is |
| | |the datapath you want the column's value copied |
| | |into. i.e. selected_firstname="myfriend.firstname"|
+------------------------+------+--------------------------------------------------+
| *Html Parametri* |
+------------------------+------+--------------------------------------------------+
|_class |T |Permette di assegnare una specifica classe CSS al |
| | |widget |
+------------------------+------+--------------------------------------------------+
|height |T |Permette di assegnare un'altezza al widget |
+------------------------+------+--------------------------------------------------+
|width |T |Permette di assegnare una larghezza al widget |
+------------------------+------+--------------------------------------------------+
|border |T |Permette di assegnare un bordo al widget |
+------------------------+------+--------------------------------------------------+
|rounded |L |Permette di assegnare un arrotondamento al widget |
+------------------------+------+--------------------------------------------------+
|style |T |Permette di assegnare uno stile (da esprimersi |
| | |come serie di attributi CSS) al widget |
+------------------------+------+--------------------------------------------------+
|background |T |Permette di assegnare uno sfondo al widget |
+------------------------+------+--------------------------------------------------+
| *Validations Parametri* |
+------------------------+------+--------------------------------------------------+
|validate_empty |T |Restituisce un errore se il valore è nullo o è una|
| | |stringa vuota |
+------------------------+------+--------------------------------------------------+
|validate_notnull |B |Restituisce un errore se il campo è vuoto |
+------------------------+------+--------------------------------------------------+
|validate_call |T |Restituisce un errore js |
+------------------------+------+--------------------------------------------------+
|validate_regex |T |Restituisce un errore se il campo corrisponde |
| | |esattamente a quanto indicato |
+------------------------+------+--------------------------------------------------+
|validate_remote |T |Metodo RPC che effettua la validazione del valore |
| | |inserito |
+------------------------+------+--------------------------------------------------+
| *Common Parametri* |
+------------------------+------+--------------------------------------------------+
|value |T |Permette di inserire un valore, in termini |
| | |assoluti (es. value='Pippo') o posizionali (es. |
| | |value='^.name'). Nel primo caso verrà assegnato il|
| | |valore 'Pippo', nel secondo verrà assegnato a |
| | |'name' il valore che inseriremo nell'inputfield. |
+------------------------+------+--------------------------------------------------+
|lbl |T |Permette di inserire un'etichetta per il campo. |
| | |Per div, caselle e aree di testo la "lbl" verrà |
| | |visualizzata prima del campo, per le checkbox |
| | |invece verrà mostrata dopo. |
+------------------------+------+--------------------------------------------------+
|lbl\_ |T |Permette di assegnare attributi alla lbl (es: |
| | |"lbl_class") |
+------------------------+------+--------------------------------------------------+
|default |T |Valore di default se non modificato |
+------------------------+------+--------------------------------------------------+
|placeholder |T |Testo di anteprima (non rappresenta un valore |
| | |inserito ma solo un suggerimento) |
+------------------------+------+--------------------------------------------------+
|disabled |B |Permette di disabilitare il campo. Es: |
| | |disabled=True |
+------------------------+------+--------------------------------------------------+
|tabindex |L |In un formbuilder con una serie di campi, permette|
| | |di dare un ordinamento personalizzato nella |
| | |compilazione nel passaggio da un campo a un altro |
| | |con il tabulatore (es: tabindex=4) |
+------------------------+------+--------------------------------------------------+
|_autoselect |B |Se impostato a True, alla selezione del campo il |
| | |contenuto del campo sarà automaticamente |
| | |selezionato |
+------------------------+------+--------------------------------------------------+
| *dbSelect Parametri* |
+------------------------+------+--------------------------------------------------+
|emptyLabel |T |Permette di personalizzare la label della riga |
| | |vuota (es: emptyLabel='Nuovo record') |
+------------------------+------+--------------------------------------------------+
|emptyLabel\_ |T |Permette di aggiungere dei parametri |
| | |personalizzati alla emptyLabel (es: |
| | |emptyLabel_first=True per posizionare la |
| | |emptyLabel all'inizio, e emptyLabel_class per |
| | |assegnare una classe css particolare) |
+------------------------+------+--------------------------------------------------+
|alternatePkey |T |Permette di indicare una colonna della tabella da |
| | |salvare al path indicato in alternativa alla pkey |
| | |(es: alternatePkey='code') |
+------------------------+------+--------------------------------------------------+
|zoom |B |Di default True, se impostato a False viene |
| | |disabilitata la freccina accanto alla label che |
| | |permette di aprire in modalità dialog il |
| | |TableHandler della tabella a cui si riferisce il |
| | |widget |
+------------------------+------+--------------------------------------------------+
|rowcaption |T |Overrides table's rowcaption. It's a table's |
| | |column or columns that represents the rowinstead |
| | |of record's pkey. i.e. fullname instead of id. |
+------------------------+------+--------------------------------------------------+
|method |T |Permette di indicare un metodo che sostituisce |
| | |quello standard per recuperare i dati dal server |
+------------------------+------+--------------------------------------------------+
|selectedCb |T |A javascript callback function called when a |
| | |record is selected with dbselect. The callback |
| | |receives an item containing the selected record |
| | |with all columns added in column, auxcolumns and |
| | |hiddencolumns. |
+------------------------+------+--------------------------------------------------+
| *Query Parametri* |
+------------------------+------+--------------------------------------------------+
|dbtable |T |(deprecato, sostituito da "table") |
+------------------------+------+--------------------------------------------------+
|table |T |Indica la tabella da cui reperire i dati, nella |
| | |forma "package.table" |
+------------------------+------+--------------------------------------------------+
|columns |T |Le colonne su cui effettuare la query |
+------------------------+------+--------------------------------------------------+
|auxColumns |T |Per personalizzare l'anteprima dei risultati della|
| | |query, è possibile mostrare subito altre colonne |
| | |da visualizzare |
+------------------------+------+--------------------------------------------------+
|condition |T |È possibile personalizzare la query con una |
| | |"condition" equivalente a una WHERE in SQL |
+------------------------+------+--------------------------------------------------+
|condition\_ |T |Permette di passare i parametri alla condition |
+------------------------+------+--------------------------------------------------+
|weakCondition |B |If there are no results applying the condition |
| | |parameter, the condition is relaxed. |
+------------------------+------+--------------------------------------------------+
|hiddencolumns |T |Per personalizzare l'anteprima dei risultati della|
| | |query, è possibile nascondere subito alcune |
| | |colonne |
+------------------------+------+--------------------------------------------------+
|limit |L |Per personalizzare l'anteprima dei risultati della|
| | |query, è possibile indicare un numero massimo di |
| | |risultati (di default: 10) |
+------------------------+------+--------------------------------------------------+
|order_by |T |Corresponding to the sql "ORDER BY" operator |
+------------------------+------+--------------------------------------------------+