.. _widgetpedia/elements/datastore_elements/controllers/dataRpc:
dataRpc
=======
dataRpc è una chiamata ad un metodo server innescata da un evento sulla pagina, lato client. Oltre al ``path`` dove salvare il risultato della chiamata e al *callable* **method** da chiamare, la *dataRpc* riceve una serie di *kwargs*, considerati tutti parametri inviati alla rpc a meno che non siano preceduti da un *underscore*.
Il metodo rpc **deve essere un callable python** definito come metodo server, preceduto per motivi di sicurezza dal decoratore ``@public_method``.
La somma di due numeri attivata dai suoi:
.. raw:: html
Vediamo un altro esempio, analogo al precedente ma con:
.. raw:: html
.. hint::
Da una recente *release* di luglio 2021 il primo parametro (*path*) è diventato facoltativo, ed è quindi possibile ometterlo passando direttamente come primo parametro il ``method``. È inoltre possibile collegare direttamente la *dataRpc* a un :ref:`button` o *menuline*. L'innesco avverrà automaticamente al clic sul bottone o linea di menu, senza quindi la necessità di utilizzare il meccanismo *publish/subscribe* o l'attributo ``fired_``.
Per un dettaglio sulle modalità applicative e sul funzionamento del dataRpc si rimanda alla sezione dedicata nel `Corso Genropy Base `_
.. raw:: html
**Parametri:**
+------------------------+------+--------------------------------------------------+
| Nome parametro | Tipo | Descrizione |
+========================+======+==================================================+
|path |T |Il path in cui verrà salvato il risultato della |
| | |rpc (es: '.result'). |
+------------------------+------+--------------------------------------------------+
|method |T |Il metodo python "callable" chiamato dalla rpc. |
| | |Per motivi di sicurezza deve essere utilizzato il |
| | |decoratore @public_method |
+------------------------+------+--------------------------------------------------+
|_onResult |T |Javascript callback eseguita una volta ottenuto un|
| | |risultato dall'rpc |
+------------------------+------+--------------------------------------------------+
|_onCalling |T |Javascript callback eseguita prima di ottenere il |
| | |risultato dall'rpc |
+------------------------+------+--------------------------------------------------+
|_lockScreen |B |Se impostato a True la schermata si blocca durante|
| | |l'esecuzione dell'rpc, rendendo impossibile |
| | |modificare gli altri elementi |
+------------------------+------+--------------------------------------------------+
|_fired |T |Parametro fittizio, popolato se l'rpc viene |
| | |eseguita (es. _fired='^.result') |
+------------------------+------+--------------------------------------------------+
|_timing |L |Tempo in secondi tra un'esecuzione e la successiva|
| | |(es: _timing=5) |
+------------------------+------+--------------------------------------------------+
| *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 |
+------------------------+------+--------------------------------------------------+
| *Controllers Parametri* |
+------------------------+------+--------------------------------------------------+
|_delay |T |Il ritardo (in ms) tra l'evento trigger e |
| | |l'esecuzione del controller |
+------------------------+------+--------------------------------------------------+
|_onStart |B |Se impostato a True, il controller verrà lanciato |
| | |al caricamento della pagina. Può anche contenere |
| | |un valore numerico (es: _onStart=500), in quel |
| | |caso verrà impostato un ritardo (in ms) prima di |
| | |avviare la chiamata. |
+------------------------+------+--------------------------------------------------+
|subscribe\_ |T | |
+------------------------+------+--------------------------------------------------+
|_ask |T |Permette di identificare in un dizionario i |
| | |parametri da richiedere all'utente alla pressione |
| | |del bottone, che verranno poi utilizzati |
| | |nell'azione (es. _ask=dict(title='Test',fields=[di|
| | |ct(name='msg',lbl='Message')])) |
+------------------------+------+--------------------------------------------------+
|_if |T |Espressione javascript che permette di |
| | |condizionare l'avvio del controller alla presenza |
| | |di un valore (es: _if='value') |
+------------------------+------+--------------------------------------------------+
|_else |T |Frammento di codice javascript che completa _if, |
| | |indicando un altro comportamento da seguire |
| | |qualora _if fosse falsa |
+------------------------+------+--------------------------------------------------+
|_userChanges |T |Se impostato a "True" fa scattare il controller |
| | |solo in caso di modifiche al record |
+------------------------+------+--------------------------------------------------+