.. _widgetpedia/elements/inputfields/dbselect/remoteSelect:
remoteSelect
============
La ``remoteSelect`` è una variante della *dbSelect* che non si collega però al database della nostra istanza per leggere dei valori, bensì a un **metodo**, che utilizzeremo poi per fare le dovute chiamate al database remoto.
La *remoteSelect* può essere per esempio utilizzata per connettersi a un service esterno e recuperare delle informazioni da visualizzare. Supponiamo per esempio di volerci collegare a un database cinematografico e reperire alcuni dati di un film. Dalla tendina accederemo direttamente a *quel* database, ma esattamente come se fossimo in una *dbSelect* di Genropy:
.. raw:: html
Nell'esempio abbiamo un :ref:`formbuilder` con una remoteSelect, dove specifichiamo un ``method``, ovvero il metodo che vogliamo utilizzare, e che andremo poi a definire subito sotto, infine con ``auxColumns`` faremo visualizzare non solo la colonna di default con l’id del film, ma anche una colonna con il titolo e con l’anno, questo al fine di facilitare la selezione da parte dell’utente.
Si noti che il metodo riceve dalla nostra remoteSelect una ``_querystring``, che sarebbero i caratteri digitati dall’utente. La remoteSelect si aspetta come risultato una **tupla composta da una Bag dei valori compatibili con la querystring e un dizionario con le colonne** che abbiamo indicato come auxColumns.
.. 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. |
+------------------------+------+--------------------------------------------------+
|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 |
+------------------------+------+--------------------------------------------------+
| *remoteSelect Parametri* |
+------------------------+------+--------------------------------------------------+
|method |T |Permette di indicare il metodo da utilizzare per |
| | |la ricerca dei dati. Il metodo deve restituire una|
| | |tupla contenente la Bag dei risultati e un |
| | |dizionario delle colonne |
+------------------------+------+--------------------------------------------------+
.. sectionauthor:: Davide Paci