.. _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
dbSelect per selezionare un prodotto
.. raw:: html
dbSelect in un formbuilder e con parametri aggiuntivi
.. raw:: html
dbSelect con condition
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
dbSelect con selected
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
Uso di selected con relazioni
.. 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 | +------------------------+------+--------------------------------------------------+