====== ''openUploadUI()'' ======
===== Panoramica =====
''openUploadUI()'' apre un'interfaccia grafica per il caricamento di file che invia i file selezionati al server, dove vengono elaborati da uno script **Groovy** specificato dallo sviluppatore.
L'UI offre:
* **Area drag & drop** con selezione via file picker dell'OS
* **Lista dei file selezionati** con possibilità di rimozione singola
* **Validazione client-side** su estensione e dimensione totale
* **Upload automatico** oppure su click di un pulsante "Carica"
* Apertura in **FloatingPane** (default) oppure in un **contenitore esistente**
* **Notifiche** via dialog, MessageToaster o callback personalizzato
UI minimale, nessun parametro:
{{ :custom:openuploadui_1.jpg }}
UI che mostra la selezione corrente
{{ :custom:openuploadui_2.jpg }}
Notifica standard si avvenuto caricamento in base al messaggio ritornato dal groovy
{{ :custom:openuploadui_3.jpg }}
----
===== Firma della funzione =====
openUploadUI(scriptName, options)
^ Parametro ^ Tipo ^ Obbligatorio ^ Descrizione ^
| ''scriptName'' | ''String'' | Sì | Nome in notazione dot del Groovy script da eseguire sul server (es. ''"mypackage.ImportScript"''). L'estensione ''.groovy'' viene aggiunta automaticamente. |
| ''options'' | ''Object'' | No | Oggetto di configurazione opzionale. Tutti i sotto-parametri sono opzionali. |
----
===== Parametri di ''options'' =====
==== Testo e istruzioni ====
^ Parametro ^ Tipo ^ Default ^ Descrizione ^
| ''instructions'' | ''String'' | ''null'' | Testo di istruzioni mostrato all'utente in un'area stilizzata (''gwInstructionsArea'') sopra la drop zone. Accetta HTML. |
{{ :custom:openuploadui_4.jpg }}
----
==== Comportamento upload ====
^ Parametro ^ Tipo ^ Default ^ Descrizione ^
| ''autoupload'' | ''Boolean'' | ''false'' | Se ''true'', l'upload parte automaticamente non appena i file vengono selezionati o trascinati. Il pulsante "Carica" non viene mostrato. |
| ''multiple'' | ''Boolean'' | ''false'' | Se ''true'', permette la selezione e il caricamento di più file contemporaneamente. Se ''false'' e l'utente trascina più file, viene preso solo il primo. |
| ''maxUploadSizeMB'' | ''Number'' | ''null'' | Dimensione massima totale in MB (somma di tutti i file selezionati). Se superata, il pulsante "Carica" viene disabilitato e viene mostrato un messaggio di errore. ''null'' = nessun limite. |
| ''allowedExtensions'' | ''String[]'' | ''null'' | Array di estensioni consentite senza il punto iniziale (es. ''['pdf', 'xlsx']''). La restrizione viene propagata anche al file picker dell'OS tramite l'attributo ''accept''. ''null'' = tutti i tipi consentiti. |
----
==== Posizionamento UI ====
^ Parametro ^ Tipo ^ Default ^ Descrizione ^
| ''containerRef'' | ''String %%|%% Widget %%|%% Node'' | ''null'' | Se assente, l'UI si apre in un FloatingPane. Se presente, l'UI viene inserita all'interno del contenitore indicato. Valori accettati: widget id (String), DOM node id (String), oggetto widget Dojo (ha ''.domNode''), nodo DOM diretto. |
| ''dimensions'' | ''Object'' | ''{w:600, h:600}'' | Dimensioni del FloatingPane in pixel. Ignorato se ''containerRef'' è presente. Formato: ''{w: 800, h: 500}''. |
| ''modal'' | ''Boolean'' | ''false'' | Se ''true'', il FloatingPane apre in modalità modale. Ignorato se ''containerRef'' è presente. |
| ''useCookie'' | ''Boolean'' | ''false'' | Se ''true'', la posizione e le dimensioni del FloatingPane vengono salvate in localStorage e ripristinate alla successiva apertura. Ignorato se ''containerRef'' è presente. |
----
Esempio di validazione fallita
{{ :custom:openuploadui_5.jpg }}
Esempio con utilizzo esteso dei parametri:
{{ :custom:openuploadui_6.jpg }}
==== Notifiche e callback ====
^ Parametro ^ Tipo ^ Default ^ Descrizione ^
| ''useToaster'' | ''Boolean'' | ''false'' | Se ''true'', la notifica di successo viene mostrata via ''messageToaster'' invece di ''showOkDialog()''. Gli errori usano sempre ''showErrorDialog()'' salvo ''errorCallback'' personalizzato. |
| ''callback'' | ''Function'' | ''null'' | Funzione chiamata dopo una risposta di successo. Riceve come unico argomento il ''JsonServerResponse'' completo. Se assente, viene usata la notifica predefinita (dialog o toaster). |
| ''errorCallback'' | ''Function'' | ''null'' | Funzione chiamata in caso di errore. Riceve ''{success: false, description: String}''. Se assente, viene chiamata ''showErrorDialog()''. |
----
==== Parametri aggiuntivi per il Groovy ====
^ Parametro ^ Tipo ^ Default ^ Descrizione ^
| ''parameters'' | ''Object'' | ''null'' | Mappa di parametri aggiuntivi da passare allo script Groovy nel binding. Vedi sezione [[#variabili disponibili nel groovy|Variabili disponibili nel Groovy]]. |
----
===== Comportamento al successo =====
^ Modalità apertura ^ Comportamento on success ^
| **FloatingPane** + ''showOkDialog'' (default) | Il FloatingPane si chiude quando l'utente clicca OK nel dialog. |
| **FloatingPane** + ''useToaster: true'' | Il FloatingPane si chiude immediatamente; poi compare il toaster. |
| **FloatingPane** + ''callback'' personalizzato | Il FloatingPane si chiude immediatamente dopo il callback. |
| **containerRef** + ''showOkDialog'' (default) | L'UI si reimposta allo stato iniziale (vuota) quando l'utente clicca OK. |
| **containerRef** + ''useToaster: true'' | L'UI si reimposta allo stato iniziale immediatamente; poi compare il toaster. |
| **containerRef** + ''callback'' personalizzato | L'UI si reimposta allo stato iniziale immediatamente dopo il callback. |
----
===== Variabili disponibili nel Groovy =====
Lo script Groovy riceve nel ''Binding'' le seguenti variabili:
==== Specifiche dell'upload ====
^ Variabile ^ Tipo ^ Descrizione ^
| ''file'' | ''MultipartFile'' | Il primo file caricato (o ''null'' se nessun file). |
| ''files'' | ''MultipartFile[]'' | Array di tutti i file caricati. |
| ''parametersMap'' | ''HashMap'' | Mappa dei parametri aggiuntivi passati tramite ''options.parameters''. |
| ''parameters'' | ''HashMap'' | Alias di ''parametersMap''. |
| '''' | ''Object'' | Ogni entry di ''parameters'' è anche disponibile come variabile individuale nel binding (es. ''parameters: {userId: 42}'' → la variabile ''userId'' vale ''42''). |
| ''jsonServerResponse'' | ''JsonServerResponse'' | L'oggetto di risposta. Disponibile per lettura; ''success'' e ''description'' vengono applicati dal Map restituito dallo script. |
==== Variabili di sessione (aggiunte da ''addSessionObjectInfo'') ====
^ Variabile ^ Tipo ^ Descrizione ^
| ''gw_activeUser'' | ''String'' | Utente attivo. |
| ''gw_activeGroup'' | ''String'' | Gruppo attivo. |
| ''gw_activeScopes'' | ''List'' | Scope attivi (definizioni). |
| ''gw_activeScopeList'' | ''List