|
| fieldToShow| campo con il valore da mostrare|
| fieldToStore| campo con il valore da salvare in tabella |
| initSelValue| valore iniziale di default|
----
==== LABEL ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Inserisce un testo descrittivo non collegato ad alcun campo del database. Viene utilizzato generalmente per qualificare il gruppo di attributi che lo seguono.
{{:gwusermanual:interface:label.png|}}
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| text| Testo dell'etichetta|
----
==== HTML ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Questo widget serve per renderizzare codice html contenuto in un campo di una tabella di classe.\\
In pratica rende possible inserire nel dettaglio di classe un elemento di spicco, popolato a runtime o derivato da altre informazioni o calcoli della vista associata alla classe.
Ad esempio, per mostrare eventuali errori risultanti dalla validazione di un serviceTask di processo, a questa stringa sul db corrisponderà:
Test messaggio errore. Test messaggio errore. Test messaggio errore. Test messaggio errore. Test messaggio errore. Test messaggio errore. Test messaggio errore.
{{:gwusermanual:interface:html.png|}}
\\
E' supportata anche la visualizzazione in lista.
E' possibile utilizzare un set di stili creati ad hoc. Questi possono essere definiti in apposite regole in un apposito foglio di stile, situato nel war del client:
\\
META-INF/static-resources/css/configuratorRules.css
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| useColSpan |se a true elimina lo spazio destinato alla label dell'attributo (che di norma rende allineati verticalmente gli input della form); default: true|
| showLabelInDetail | stabilisce se deve essere visualizzata o meno l'etichetta dell'attributo; default: false|
----
==== HTMLTEMPLATE ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Il widget htmlTemplate permette di definire un testo fisso formattato in html definito in maniera fissa, sia nel contenuto che nella formattazione, in fase di configurazione.
Può essere utilizzato, ad esempio, per mostrare all'utente delle istruzioni per la compilazione dei campi della classe.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^ Descrizione ^
| textHtml| String. Codice html che verrà formattato e visualizzato |
| behaviorType | Integer. Default 1. Possibili valori [1,0]. Di norma vengono sostituite dinamicamente tutte le espressioni del tipo //${field_name}// e del tipo //${session_var_name}// in base al contesto. Per la lista vengono passati i valori dei soli widget aggiunti in lista. Analogamente per il dettaglio di classe. Se behaviorType è impostato a 0 vengono valutati i valori di tutti gli attributi anche quelli non presenti nella lista o nel dettaglio. Questo comporta una query sul dettaglio aggiuntiva, che può causare dei rallentamenti. **Nota: behaviorType a 0 è tassativamente da evitare se il widget va in lista.** Come best practise vanno nel caso messi tutti i field di riferimento in lista, al limite nascondendoli agendo nell'**xml del widget**, cosi: **display:none;display:none;**. Sul dettaglio di classe, invece, si può valutare l'utilizzo di behaviorType a 0 nel caso in cui nell'htmlTemplate si richiamino molti attributi attualmente non presenti nel dettaglio, e non si voglia aggiungerli manualmente per poi nasconderli|
----
==== MAIN_ACTION_WIDGET ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Analogamente al widget Action, permette di inserire un pulsante all'interno della dettaglio/lista, al quale associare una Action definita a livello di classe. Questo pulsante ha un alto impatto visivo. Ha inoltre una stilizzazione dinamica che dipende dai dati, che determinano: label, tooltip, icon, color.
Vengono eseguiti i check statici e dinamici sull'azione.
=== Nota ===
nella gwClassList, i campi che contengono le stilizzazioni del widget, devono essere presenti in lista (tuttalpiù nascosti nell'xml del widget con la regola css //display: none;// nello style della cella e dell'header) per poter funzionare con il widget in lista.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
|actionName|String, required, nome della Action definita a livello di classe|
|useColSpan|Impostato a True, il pulsante compare senza l'etichetta definita a livello di Attributo, e allineato con le altre etichette del form. \\ Impostato a False, l'etichetta viene stampata, e il pulsante viene allineato in corrispondenza della colonna delle altre caselle dei controlli. \\ default=//true// (ha senso solo nel gwClassDetail)|
|alignment|Definisce l'allineamento del pulsante rispetto alla colonna sopra definita. \\ default=//left// (ha senso solo nel gwClassDetail)|
|labelField|String, required, campo che contiene la il valore della label da utilizzare |
|tooltipField|String, optional, in caso di assenza viene utilizzato il valore recuperato tramite labelField |
|iconField|String, optional, configura l'icona da utilizzare per il button. Ammesse notazioni: Geoweb, Fontawesome e css class|
|hexColorField|String, optional, esadecimale nel formato FFFFFF (senza #)|
\\
{{:custom:main_action_widget.jpg?800|}}
==== LINKLIST ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Il controllo permette di presentare il contenuto di una classe relazionata, all'interno della classe corrente. I record che vengono visualizzati sono unicamente quelli collegati 1 a N rispetto al record attivo.
La classe collegata deve essere configurata attraverso la definizione di una [[relazione]] Geoweb esplicita.
\\
La link list viene normalmente configurata per conto suo dentro ad un Gruppo Attributi, che viene a sua volta posizionato dentro ad una sezione del layout, adatta a contenere un elenco di record.
\\
Le colonne visualizzate sono quelle definite in Lista nella classe relazionata. Viene inoltre riportata la toolbar di lista, completa di tutte le azioni e operazioni che possono essere eseguite nella classe relazionata, da parte dell'utente connesso.
\\
{{:gwusermanual:interface:linklist.png|}}
\\
Il click sull’elenco darà accesso al record visualizzato nel form di dettaglio e la navigazione si sposterà alla classe collegata, aprendo il record di dettaglio in pop-up o tab, secondo la configurazione già definita nel progetto per la classe collegata.
\\
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| relationName| nome della relazione da utilizzare; la relazione porta in sé la definizione dei campi padre e figlio delle classi collegate, che quindi non occorre ripetere. |
| columnNamesToHide| colonne da nascondere rispetto a quelle definite in Lista per la classe relazionata|
| onRowClickGwActionName| azione che può essere eseguita al click sulla riga. Usata normalmente per disabilitare l'apertura della scheda di dettaglio |
| onInsertButtonClickGwActionName| azione che può essere eseguita quando si clicca sul pulsante 'Nuovo'|
| onDeleteButtonClickGwActionName| azione che può essere eseguita quando si clicca sul pulsante 'Nuovo'|
| insertCallbackGwActionName| azione che può essere inserita come callback della transazione di Inserimento nuovo record|
| updateCallbackGwActionName| azione che può essere inserita come callback della transazione di Aggiornamento di un record|
| deleteCallbackGwActionName| azione che può essere inserita come callback della transazione di Eliminazione di un record|
| refreshDetailOnChange| se impostato a true, esegue il refresh del dettaglio della classe corrente (padre) ad ogni modifica della classe relazionata; default=false |
| inheritClassPermission| se impostato a true, il controllo eredita i permessi della classe corrente (padre), sovrascrivendo i permessi della classe relazionata; default=false |
| hideActionsDropDownButtonColumn| se impostato a true, nasconde il tasto 'More Options' (con i tre puntini), indipendentemente dal contenuto; default=false |
| hideIndirectSelectionColumn| se impostato a true, nasconde la colonna di selezione i record in lista, indipendentemente dai permessi; default=false |
| hideNewIgnorePermissions| se impostato a true, nasconde il tasto 'Nuovo', indipendentemente dai permessi; default=false |
| hideDeleteIgnorePermissions| se impostato a true, nasconde il tasto 'Elimina', indipendentemente dai permessi; default=false |
----
==== LINKLISTNAM ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Il controllo permette di presentare il contenuto di una classe relazionata con collegamento N a M (molti a molti), all'interno della classe corrente. I record che vengono visualizzati sono unicamente quelli collegati rispetto al record attivo.
Il tipo di collegamento N a M presuppone l'esistenza di una tabella/classe intermedia che mette in collegamento la classe padre con quella di destinazione, e nella quale sono presenti sia le chiave della classe padre che le chiavi della tabella/classe collegata. C
\\
La classe collegata deve essere configurata attraverso la definizione di due [[relazioni]] Geoweb esplicite:
* la prima relazione è tra la classe padre e la tabella intermedia, ed è definita nella classe corrente.
* la seconda relazione è definita nella tabella intermedia, e deve puntare alla tabella\classe collegata.
\\
Un esempio di relazione N a M è data tra clienti e prodotti: i clienti possono acquistare diversi prodotti e i prodotti possono essere acquistati da diversi clienti. La tabella intermedia può essere quella degli acquisti, in cui vengono annotati gli acquisti dei prodotti effettuati dai diversi clienti.
\\
**Configurazione e utilizzo**
\\
La link list viene normalmente configurata per conto suo dentro ad un Gruppo Attributi, che viene a sua volta posizionato dentro ad una sezione del layout, adatta a contenere un elenco di record.
\\
Le colonne visualizzate sono quelle definite in Lista nella classe relazionata. Viene inoltre riportata la toolbar di lista, completa di tutte le azioni e operazioni che possono essere eseguite nella classe relazionata, da parte dell'utente connesso.
\\
{{:gwusermanual:interface:linklistnam.png|}}
\\
La selezione dei record associati avviene tramite la presentazione di un form che contiene: in basso i record che possono essere selezionati, in alto i record che vengono scelti per essere associati.
\\
{{:gwusermanual:interface:linklistnam_edit.png|}}
\\
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| relationAssociationName| nome della relazione definita nella classe padre e che punta alla classe intermedia |
| relationTargetName| nome della relazione definita nella classe intermedia e che punta alla classe relazionata|
| columnNamesToHide| nome delle colonne in Lista, definite nella classe relazionata, da nascondere |
| queryClausole| eventuale filtro da applicare all'elenco dei record da selezionare mostrati nel form di Associa/Dissocia |
| inheritClassPermission| se impostato a true, il controllo eredita i permessi della classe padre, sovrascrivendo i permessi della classe relazionata; default=false |
| hideActionsDropDownButtonColumn| se impostato a true, nasconde il tasto 'More Options' (con i tre puntini), indipendentemente dal contenuto; default=false |
| hideIndirectSelectionColumn| se impostato a true, nasconde la colonna di selezione i record in lista, indipendentemente dai permessi; default=false |
| afterSelectionScriptName| **(da 4.7.4)** String, opzional. Nome dello script da eseguire alla fine della selezione. Il groovy viene eseguito nella medesima transazione delle associazioni/disassociazioni (rollback in caso di exception). Variabili disponibili: **services, all session variables, scriptName, log, parameters/parameterMap** (con dentro: **attributeGwid, projectName, associationClassKeyColumnValue, associatedList, removedList, startClass, associationClass, targetClass, associationRelation, targetRelation**)|
----
==== EXTERNALTABLE ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Elenco di scelta mono/multi selezione che permette di selezionare uno o più valori presenti in una classe definita in Geoweb. Viene mostrata con una finestra modale che si apre in pop-up.
Il widget presenta le colonne definite in Lista nella classe di riferimento.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| classReference| Classe di riferimento |
| queryClausole| Clausola where che può essere utilizzata come filtro. La parola 'where' va omessa. Può accettare delle [[gwusermanual:interface:widget#espressioni_nei_widget_sintassi|espressioni]] |
| fieldToShow| Campo da mostrare (ATTENZIONE, il campo scelto deve essere uno degli attributi in LISTA della classe di riferimento) |
| fieldToStore| Campo da salvare |
| allowMultipleSelection| Accetta una selezione multipla, se impostato a true |
| multipleSelectionSeparator| Separatore dei valori in caso di selezione multipla |
| hideSelectInMapButton | Nasconde la selezione in mappa |
| tableName | |
| initSelValueToShow | Valore di default del campo da mostrare |
| isVariableAttribute | Identifica il widget come un attributo variabile |
| isGeometricGwClassType | |
| dialogWidth | Larghezza in pixel della finestra di dialogo che sarà aperta |
| dialogHeight | Altezza in pixel della finestra di dialogo che sarà aperta |
|attributeNamesToHide | Permette di selezionare una o più colonne da nascondere|
|openDialogExpanded | Se impostato a true, apre la finestra di dialogo espansa in modo che copra le dimensioni massime |
| initSelValue| Valore di default |
----
==== CHILDLIST ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Questo controllo consente di gestire una sottotabella della anagrafica principale, permettendo l'editing dei record direttamente dalla lista visualizzata.
La relazione che c’è tra le anagrafiche è la seguente:
\\
**TabellaPartenza.CampoPartenza = TabellaDestinazione.CampoDestinazione**
\\
La sottotabella deve essere definita essa stessa come classe, in quanto lo widget fa riferimento alla sua definizione.
Le colonne della lista sono le colonne della lista sono infatti quelle configurate nell’anagrafica di destinazione.
{{:gwusermanual:interface:childlist.png?800|}}
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
|fkClasse |Campo della classe padre (classe di partenza) collegato al campo della classe figlia (classe di destinazione) |
|fkAttributo |Campo della classe figlia (classe di destinazione) collegato al campo della classe padre (classe di partenza) |
|className |Nome della classe di destinazione|
|columnsToHide |Se si vuole ottenere la lista della classe di destinazione privata di alcune colonne reputate inutili nel contesto corrente |
----
==== NORMAL ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Questo tipo di controllo è una semplice casella di testo in cui viene editata e mostrata l’informazione.
Il widget utilizza solamente i [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]]
----
==== NUMBERBOX ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Il numberbox è uno widget studiato per i valori di tipo numerico. E' possibile stabilire un pattern per le cifre, il numero di cifre dopo la virgola, e un formato di presentazione (es. Valuta, Percentuale, ecc.).
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
|numberFormatType |Formato del Numero per default NUMBER.\\ Valori ammessi (scrivere in maiuscolo): NUMBER, CURRENCY, PERCENT|
|pattern|Pattern da utilizzare sia per la visualizzazione che per l'input del numero. Per la documentazione fare riferimento alla guida in linea della [[https://cldr.unicode.org/translation/number-currency-formats/number-and-currency-patterns|Unicode CLDR ]]|
|min|Numero minimo accettabile in fase di input|
|max|Numero massimo accettabile in fase di input|
|currencyCode |Codice della valuta utilizzabile in caso che il Formato del Numero sia stato impostato a CURRENCY. Fare riferimento alla codifica attiva [[https://cldr.unicode.org/translation/currency-names-and-symbols/currency-names|Unicode CLDR]]|
|placeHolder|Testo che compare all'interno della casella di testo, come un suggerimento|
|promptMessage|Messaggio che compare come tooltip quando il focus viene spostato sullo widget|
|invalidMessage|Messaggio che compare se l'input utente non è conforme alle regole configurate|
|missingMessage|Messaggio che compare se il campo è in modalità 'required' e non è stato compilato|
----
==== TEXTAREA ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Casella di testo pensata per inserire testi piuttosto lunghi, strutturati anche su più righe. La caseela di testo si può allungare o allargare anche a run-time, ovvero quando la maschera è in visualizzazione.
Inoltre la casella di testo può essere renderizzata sia come sermplice boh html, che come un Editor di testo struttturato con gli strumenti base necessari ad una fromattazione del testo da inserire.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^Parametro xml^
|numRows|Numero di righe della casella di testo|
|numCols|Numero di colonne della casella di testo|
|type|Tipo di controllo, numerico, utilizzato nella form. I valori possibili sono: \\ 0 (HTML), 1 (Editor Semplice), 2 (Editor Avanzato)|
|maxWidth|Larghezza massima a cui si può portare, a run-time, la casella di testo|
|maxHeight|Altezza massima a cui si può portare, a run-time, la casella di testo|
----
==== HTMLEDITOR ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
L'html editor è un widget utile alla scrittura di testo formattato, pensato per il corpo delle email.
In edit è possibile modificare e formattare il testo, mentre in visualize viene mostrato il testo formattato.
Il widget utilizza i [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]]
----
==== TEXTBOX ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Analogo allo widget NORMAL, ma strutturato per il controllo raffinato dell'input. Permette di verificare il testo inserito tramite Espressioni regolari, e di modificare il testo appena inserito con trasformazioni in maiuscolo, minuscolo, ecc.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
|regExp|Stringa di espressione regolare che verrà applicata per validare il testo inserito. E' disponibile on line parecchia documentazione utile a definire una espressione regolare corretta. Sono suggerite una [[http://www.zytrax.com/tech/web/regex.htm|guida completa]] in inglese e un [[https://www.evemilano.com/come-funzionano-le-espressioni-regolari-regex/|articolo in italiano]] ben fatto. \\ Esempi: \\ Espressione regolare per evitare l'inserimento di caratteri diversi da lettere, numeri e tratti bassi: %%^[\w\d_]*$%% \\ Stessa Espressione regolare vista sopra, che include nel set ammesso anche gli spazi vuoti: %%^[\w\d\s_]*$%% \\ indirizzo email: %%[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}%% \\ codice fiscale: %%[a-zA-Z]{6}\d\d[a-zA-Z]\d\d[a-zA-Z]\d\d\d[a-zA-Z]%% \\ numero telefonico (solo numeri): %%[0-9]+\-[0-9]+%% \\ partita iva: %%^[0-9]{11}$%%|
|regExpGen|Funzione javascript che effettua la validazione. \\ Deve tornare il corpo dell'espressione regolare senza marcatori di inizio: **^[** e di fine **]*$** \\ Esempio:|
function(constraints){
if(true) return "\\d{5}";
return "\\d{10}";
}
|trim|Toglie i caratteri SPAZIO a inizio e a fine del testo inserito|
|lowercase|Trasforma il testo inserito in minuscolo|
|uppercase|Trasforma il testo inserito in maiuscolo|
|propercase|Trasforma il testo mettendo in maiuscolo le iniziali di parola|
|placeHolder|Testo che compare all'interno della casella di testo, come un suggerimento|
|promptMessage|Messaggio che compare come tooltip quando il focus viene spostato sullo widget|
|invalidMessage|Messaggio che compare se l'input utente non è conforme alle regole configurate|
|missingMessage|Messaggio che compare se il campo è in modalità 'required' e non è stato compilato|
==== POINT ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Il widget si applica ai campi di tipo geometry, Point. Permette di gestire la visualizzazione, l'inserimento e la modifica, e di effettuare lo zoom su mappa o su planimetria, utilizzando il visualizzatore 2D.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| type| Tipo di geometria, in questo caso deve essere impostato, in maniera fissa, a //point// |
| drawing| se impostato a //true// indica che la geometria viene gestita in un disegno CAD, e quindi viene caricata e tenuta aggiornata tramite tale disegno (drawing) |
| drawingType| qualora //drawing// sia impostato a true, compilare con il NAME della definizione di disegno contenuto nella classe DRAWING_TYPE. Tale classe contiene le regole xml di configurazione ed interpretazione del disegno |
| coordinateSystem| codice del Sistema di Coordinate. Formati ammessi: ['EPSG:3857', '3857']. Se specificato viene usato per convertire il sistema di coordinate di origine della geometria (qui indicato) in maniera da essere correttamente visualizzata e gestita nella mappa, se questa utilizza una proiezione in un sistema di coordinate differente. Es. se il sistema di origine è LatLon, specificare il valore '4326' |
| persistSridToDB | Valutato solo se coordinateSystem non è nullo. Di norma l'SRID della geometria non viene persistito sul DB, perchè viene impostato nella definizione della fonte dati in fase di configurazione della mappa in Mapguide. Ponendo questo flag a true, lo srid viene aggiunto esplicitamente all'oggetto geometry del DB|
| startingScale| valore intero, per default -1. Indica a quale scala verrà visualizzato in mappa l'oggetto di tipo puntuale al momento dell'esecuzione dell'azione di 'Zoom' ( button con icona a forma di 'mirino'). Verrà usata la scala supportata dalla mappa uguale o immediatamente più grande del valore impostato. Se vale -1, essa viene aperta al massimo zoom possibile (*)|
| multipleEditing | deprecato|
(*) Il valore dello zoom minimo raggiungibile dalla mappa dipende SEMPRE dalla base cartografica utilizzata come sfondo. Ad esempio, GoogleMaps, per ogni zona del globo, ha diversi livelli di zoom differenziati sia in base alla tipologia della mappa che in base al dettaglio disponibile per le varie zone del mondo (le città hanno in genere dettaglio più grande rispetto agli oceani..).
-------
==== POLYGON ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Il widget si applica ai campi di tipo geometry, Poligono. Permette di gestire la visualizzazione, l'inserimento e la modifica, e di effettuare lo zoom su mappa o su planimetria, utilizzando il visualizzatore 2D.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| type| Tipo di geometria, in questo caso deve essere impostato, in maniera fissa, a //polygon// |
| drawing| se impostato a //true// indica che la geometria viene gestita in un disegno CAD, e quindi viene caricata e tenuta aggiornata tramite tale disegno (drawing) |
| drawingType| qualora //drawing// sia impostato a true, compilare con il NAME della definizione di disegno contenuto nella classe DRAWING_TYPE. Tale classe contiene le regole xml di configurazione ed interpretazione del disegno |
| coordinateSystem| codice del Sistema di Coordinate. Formati ammessi: ['EPSG:3857', '3857']. Se specificato viene usato per convertire il sistema di coordinate di origine della geometria (qui indicato) in maniera da essere correttamente visualizzata e gestita nella mappa, se questa utilizza una proiezione in un sistema di coordinate differente. Es. se il sistema di origine è LatLon, specificare il valore '4326' |
| persistSridToDB | Valutato solo se coordinateSystem non è nullo. Di norma l'SRID della geometria non viene persistito sul DB, perchè viene impostato nella definizione della fonte dati in fase di configurazione della mappa in Mapguide. Ponendo questo flag a true, lo srid viene aggiunto esplicitamente all'oggetto geometry del DB|
| startingScale| valore intero, per default -1. Indica a quale scala verrà visualizzato in mappa l'oggetto di tipo puntuale al momento dell'esecuzione dell'azione di 'Zoom' ( button con icona a forma di 'mirino'). Verrà usata la scala supportata dalla mappa uguale o immediatamente più grande del valore impostato. Se vale -1, essa viene aperta al massimo zoom possibile (*)|
| multipleEditing | deprecato|
| editAsRectangle| Se impostato a //true// abilita l'interfaccia di editing all'editazione dei poligoni esclusivamente come rettangoli allineati secondo gli assi cartesiani |
(*) Il valore dello zoom minimo raggiungibile dalla mappa dipende SEMPRE dalla base cartografica utilizzata come sfondo. Ad esempio, GoogleMaps, per ogni zona del globo, ha diversi livelli di zoom differenziati sia in base alla tipologia della mappa che in base al dettaglio disponibile per le varie zone del mondo (le città hanno in genere dettaglio più grande rispetto agli oceani..).
-------
==== POLYLINE ====
[[gwusermanual:interface:widget#elenco_generale_widget|(torna a elenco widget)]]\\
Il widget si applica ai campi di tipo geometry, Polilinea. Permette di gestire la visualizzazione, l'inserimento e la modifica, e di effettuare lo zoom su mappa o su planimetria, utilizzando il visualizzatore 2D.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| type| Tipo di geometria, in questo caso deve essere impostato, in maniera fissa, a //linestring// |
| drawing| se impostato a //true// indica che la geometria viene gestita in un disegno CAD, e quindi viene caricata e tenuta aggiornata tramite tale disegno (drawing) |
| drawingType| qualora //drawing// sia impostato a true, compilare con il NAME della definizione di disegno contenuto nella classe DRAWING_TYPE. Tale classe contiene le regole xml di configurazione ed interpretazione del disegno |
| coordinateSystem| codice del Sistema di Coordinate. Formati ammessi: ['EPSG:3857', '3857']. Se specificato viene usato per convertire il sistema di coordinate di origine della geometria (qui indicato) in maniera da essere correttamente visualizzata e gestita nella mappa, se questa utilizza una proiezione in un sistema di coordinate differente. Es. se il sistema di origine è LatLon, specificare il valore '4326' |
| persistSridToDB | Valutato solo se coordinateSystem non è nullo. Di norma l'SRID della geometria non viene persistito sul DB, perchè viene impostato nella definizione della fonte dati in fase di configurazione della mappa in Mapguide. Ponendo questo flag a true, lo srid viene aggiunto esplicitamente all'oggetto geometry del DB|
| startingScale| valore intero, per default -1. Indica a quale scala verrà visualizzato in mappa l'oggetto di tipo puntuale al momento dell'esecuzione dell'azione di 'Zoom' ( button con icona a forma di 'mirino'). Verrà usata la scala supportata dalla mappa uguale o immediatamente più grande del valore impostato. Se vale -1, essa viene aperta al massimo zoom possibile (*)|
| multipleEditing | deprecato|
(*) Il valore dello zoom minimo raggiungibile dalla mappa dipende SEMPRE dalla base cartografica utilizzata come sfondo. Ad esempio, GoogleMaps, per ogni zona del globo, ha diversi livelli di zoom differenziati sia in base alla tipologia della mappa che in base al dettaglio disponibile per le varie zone del mondo (le città hanno in genere dettaglio più grande rispetto agli oceani..).
==== POSITION_WIDGET ====
**(da finire)**
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| strQuery| select code_position,descr_position_type,descr_position,pk_plan from \\ view_gwd_position |
| queryClausole| pk_plan=#{id_plan} |
| fieldToShow| code_position |
| fieldToStore| code_position |
| initSelValue |
| toTranslate| false |
| columnsLabel| Codice,Tipo,Descrizione |
| columnsView| code_position,descr_position_type,descr_position |
| allowMultipleSelection| false |
| multipleSelectionSeparator|
| geometryClassReference |
-----
==== POSITION2_WIDGET ====
**(da finire)**
Il widget Position2 permette di memorizzare l'informazione della posizione di un record di una classe. La posizione è rappresentata dal codice di un site o di un building o di una room o di una workstation o di una generic position.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| classToHide | |
| classList | gwd_site \\ gwd_building \\ gwd_room \\ gwd_workstation \\ gwd_generic_position |
| codeColumnList | site_code \\ cod_building \\ cod_room \\ cod_workstation \\ cod_position |
| nameColumnList | name_site \\ name_building \\ description \\ name \\ cod_position |
| descriptionColumnList | description \\ descr_building \\ description \\ name \\ cod_position |
| filterColumnNameList | site_code \\ type_building \\ room_number \\ type_workstation \\ cod_position |
| showMapSelectionButtonList | true \\ true \\ true \\ true \\ true |
| showZoomButtonList | true \\ true \\ true \\ true \\ true |
==== LABEL_VALUE_JSON_WIDGET ====
**(dalla 4.7.4, issue #1484)**
Il widget LabelValueJsonWidget permette di visualizzare le informazioni contenute in un campo JSON.
Rappresenta il corrispettivo del labelValuesXmlWidget, che invece lavora con tipo di dato testuale in formato xml.
Caratteristiche:
* In particolare vengono presentate le coppie chiave valore esclusivamente del primo livello.
* Eventuali valori con JSON annidati vengono trasformati in String JSON e visualizzati come tali
* Le coppie chiave valore sono rese tramite una elenco di coppie label-widget.
* Le coppie label-widget possono essere raggruppati in sezioni.
* Se dall'elaborazione dei dati dovesse risultare un solo raggruppamento (configurato o automatico), la relativa intestazione non verrà visualizzata
* I widget senza raggruppamento, vengono raccolti in un gruppo creato automaticamente //'Altri'// (localizzato)
* Di base i widget vengono resi mediante un semplice campo di testo in sola lettura.
* Nel JSON possono essere configurati dei metadati (in "_metadata", key riservata e pertanto non oggetto di rendering), che sono utilizzati per una rappresentazione più rispondente alla natura del dato.
* I dati di tipo immagini sono sempre su documentale (supportati sia CMIS che CMS), ed il value è sempre il nome dell'immagine, comprensivo di path relativo (che viene aggiunto in automatico al root path configurato nel configuration.properties)
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
| labelWidth| string (html width), optional, default "250px" usata per il dimensionamento delle label |
| valueWidth| string (html width), optional, default "400px" usata per il dimensionamento dei widget dei valori |
Il widget si costruisce sopra un attributo con **dataType JSON** (costruito a sua volta su un campo appropriato nel database: //json// o //jsonb// per Postgres).
Nella versione più semplice il JSON viene rappresentato automaticamente:
* usando la key per la label
* usando il valore cosi come è dentro un TextBox in sola lettura
{
"Label 1": "uno",
"Label 2": 2,
"Label 3": true
}
A sinistra il JSON di origine in un widget //codeEditor//, e a destra la relativa rappresentazione //labelValueJsonWidget//.
{{:gwusermanual:interface:labelvaluejsonwidget_simple.jpg?600|}}
Opzionalmente, è possibile configurare nel valore JSON anche la key **_metadata**. Dentro sono presenti due sezioni:
* **groups**, contiene informazioni relative ad eventuali raggruppamenti, ogni //key// rappresenta il //codice del gruppo// (in rapporto 1:1 con i vari "group_code" in //parameters//), e per //value// un oggetto con:
* **label** string, usata come intestazione del raggruppamento
* **order** integer, usato per l'ordinamento (gli elementi senza ordine hanno precedenza, in base all'ordine di comparsa nel JSON)
* **parameters**, contiene i metadati relativi alle singole coppie chiave valore, organizzate per chiave. **Ogni key è in rapporto 1:1 con le key di primo livello del JSON**, e nel relativo oggetto //value// sono presenti:
* **type** string, optional, default "string", valori possibili **string**, **numeric**, **date**, **image**, **html**
* **label** string, optional, label da usare per la rappresentazione. In sua assenza viene usata la medesima //key// di primo livello del JSON
* **order**, integer, optional, determina l'ordine all'interno del gruppo (gli elementi senza ordine hanno precedenza, in base all'ordine di comparsa nel JSON)
* **group_code**, string, optional, se configurato determina i quale gruppo verrà posizionata la coppia chiave-valore. In sua assenza verrà usato un raggruppamento predefinito con label localizzata //'Altri'//
* **params**, object, optional, se configurato specializza la rappresentazione del valore. I parametri variano in base al //type//
* //type string//
* **useTextArea**, boolean, optional, default false. Quando a true viene usata una TextArea per la rappresentazione
* **height**, string (HTML height), optional, default "40px". Da usare solo con useTextArea true, determina l'altezza iniziale della TextArea
* **maxHeight**, string (HTML height), optional, default "120px". Da usare solo con useTextArea true, determina l'altezza massima della TextArea
* //type numeric//
* **constraints**, object, optional, default null. Con dentro:
* **places** integer, optional, default null. Numero di cifre da visualizzare dopo la virgola nei numeri decimali (ha priorità sul pattern)
* **pattern** string, optional, default null. Stesso funzionamento del //widget NumberBox//. Esempi: "#.", "#.00", "#.## %", "#.00 €", "#. €"
* //type date// (nel //value// del primo livello del JSON ammessi valori nel formato stringa e intero (data in millisecondi))
* **constraints**, object, optional, default null. Con dentro:
* **datePattern** string, optional, default "dd/MM/yyyy". Formati ammessi: //"dd-MM-yyyy", "yyyy-MM-dd", "yyyy/MM/dd", "dd/MM/yyyy", "dd MMMM yyyy", "yyyy MMMM dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "dd-MM-yyyy HH:mm:ss", "dd-MM-yyyy HH:mm", "dd/MM/yyyy HH:mm:ss", "dd/MM/yyyy HH:mm", "HH:mm:ss": "HH:mm:ss", "EEEE, dd MMMM yyyy"//
* **format** @Deprecated from 4.7.4 (usare constraints.datePattern), string, optional default "dd/MM/yyyy". Formati ammessi: //"dd-MM-yyyy", "yyyy-MM-dd", "yyyy/MM/dd", "dd/MM/yyyy", "dd MMMM yyyy", "yyyy MMMM dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "dd-MM-yyyy HH:mm:ss", "dd-MM-yyyy HH:mm", "dd/MM/yyyy HH:mm:ss", "dd/MM/yyyy HH:mm", "HH:mm:ss": "HH:mm:ss", "EEEE, dd MMMM yyyy"//
* //type image// (nel //value// del primo livello del JSON ammessi solo valori stringa (nome del file, con estenzione, con eventuale path relativo))
* **height**, string (HTML height), optional, default "100px". Quando usato imposta un'altezza specifica per l'immagine
* //type html// (nel //value// del primo livello del JSON ammessi solo valori stringa, contenenti codice html)
=== Esempi ===
**Esempio semplificato**
Configurazione con metadati minimale per un tipo di dato stringa.
{
"key_date_1": "valore 1",
"_metadata": {
"groups": {
"group_1": {
"label": "Testo (\"type\": \"string\")",
"order": 1
}
},
"parameters": {
"key_date_1": {
"type": "string",
"label": "Label visualizzata",
"order": 1,
"group_code": "group_1"
}
}
}
}
**Esempio esteso**
In questo esempio sono presenti tutte le tipologie di dato, predisposte con molte varianti di presentazione.
A sinistra del gwClassDetail è presente il dato JSON in un widget codeEditor. A destra il relativo risultato finale.
{{:gwusermanual:interface:labelvaluejsonwidget.jpg?1000|}}
Relativo dato JSON comprensivo di metadati
{
"key_date_1": 1738573528392,
"key_date_2": "2025-02-03T09:16:00.565Z",
"key_date_3": 1738573528392,
"key_date_4": "2025-02-03T09:16:00.565Z",
"key_date_5": "2025-02-03T09:16:00.565Z",
"key_html_1": "Approved",
"key_image_1": "TEST/Galleria/12023.jpg",
"key_image_2": "TEST/Galleria/download.jpg",
"key_string_1": "Yes",
"key_string_2": "Questa è una nota estesa. Questa è una nota estesa.",
"key_string_3": "Questa è una nota estesa. Questa è una nota estesa. Questa è una nota estesa. Questa è una nota estesa. Questa è una nota estesa.",
"key_numeric_1": 12345,
"key_numeric_2": 12.345,
"key_numeric_3": 1,
"key_numeric_4": 1,
"key_numeric_5": 0.569,
"key_numeric_7": 600000,
"key_numeric_8": 10.57,
"Image senza _metadata": "TEST/Galleria/download.jpg",
"String senza _metadata": "generic string",
"Date senza _metadata ms": 1738573528392,
"Numeric senza _metadata": 999,
"Date senza _metadata string ISO-8601": "2025-02-03T09:16:00.565Z",
"_metadata": {
"groups": {
"group_1": {
"label": "Testo (\"type\": \"string\")",
"order": 1
},
"group_2": {
"label": "Numeri (\"type\": \"numeric\")",
"order": 2
},
"group_3": {
"label": "Date (\"type\": \"date\")",
"order": 3
},
"group_4": {
"label": "Immagini (\"type\": \"image\")",
"order": 4
},
"group_5": {
"label": "HTML (\"type\": \"html\")",
"order": 5
}
},
"parameters": {
"key_date_1": {
"type": "date",
"label": "Data ms default",
"order": 1,
"group_code": "group_3"
},
"key_date_2": {
"type": "date",
"label": "Data string ISO-8601 default",
"order": 2,
"group_code": "group_3"
},
"key_date_3": {
"type": "date",
"label": "Data ms params.format 'yyyy-MM-dd HH:mm:ss'",
"order": 3,
"params": {
"constraints": {"datePattern": "yyyy-MM-dd HH:mm:ss"}
},
"group_code": "group_3"
},
"key_date_4": {
"type": "date",
"label": "Data string ISO-8601 params.format 'dd-MM-yyyy HH:mm:ss'",
"order": 4,
"params": {
"constraints": {"datePattern": "dd-MM-yyyy HH:mm:ss"}
},
"group_code": "group_3"
},
"key_date_5": {
"type": "date",
"label": "Data string ISO-8601 params.format 'HH:mm:ss'",
"order": 5,
"params": {
"constraints": {"datePattern": "HH:mm:ss"}
},
"group_code": "group_3"
},
"key_html_1": {
"type": "html",
"label": "custom html",
"order": 1,
"params": {},
"group_code": "group_5"
},
"key_image_1": {
"type": "image",
"label": "Immagine da CMS (default)",
"order": 1,
"group_code": "group_4"
},
"key_image_2": {
"type": "image",
"label": "Immagine da CMS (height 50px)",
"order": 2,
"params": {
"height": "50px"
},
"group_code": "group_4"
},
"key_string_1": {
"type": "string",
"label": "Confermi?",
"order": 1,
"group_code": "group_1"
},
"key_string_2": {
"type": "string",
"label": "Testo (useTextArea true)",
"order": 2,
"params": {
"useTextArea": true
},
"group_code": "group_1"
},
"key_string_3": {
"type": "string",
"label": "Testo (useTextArea true, height 100px, maxHeight:300px)",
"order": 3,
"params": {
"height": "100px",
"maxHeight": "300px",
"useTextArea": true
},
"group_code": "group_1"
},
"key_numeric_1": {
"type": "numeric",
"label": "Numero intero",
"order": 1,
"params": {
"constraints": {
"places": 0,
"pattern": "#."
}
},
"group_code": "group_2"
},
"key_numeric_2": {
"type": "numeric",
"label": "Numero decimale",
"order": 2,
"params": {
"constraints": {
"places": 2,
"pattern": "00#."
}
},
"group_code": "group_2"
},
"key_numeric_3": {
"type": "numeric",
"label": "Numero decimale places 4",
"order": 3,
"params": {
"constraints": {
"places": 4,
"pattern": "#."
}
},
"group_code": "group_2"
},
"key_numeric_4": {
"type": "numeric",
"label": "Numero intero 0 leading",
"order": 4,
"params": {
"constraints": {
"places": 0,
"pattern": "000#."
}
},
"group_code": "group_2"
},
"key_numeric_5": {
"type": "numeric",
"label": "% completamento",
"order": 5,
"params": {
"constraints": {
"places": 2,
"pattern": "#.## %"
}
},
"group_code": "group_2"
},
"key_numeric_6": {
"type": "numeric",
"label": "% completamento places 2",
"order": 6,
"params": {
"constraints": {
"pattern": "#. %"
}
},
"group_code": "group_2"
},
"key_numeric_7": {
"type": "numeric",
"label": "Importo",
"order": 7,
"params": {
"constraints": {
"pattern": "#.00 €"
}
},
"group_code": "group_2"
},
"key_numeric_8": {
"type": "numeric",
"label": "Importo no decimals",
"order": 8,
"params": {
"constraints": {
"pattern": "#. €"
}
}
}
}
}
}
=== Popolamento JSON tramite groovy ===
Il widget nasce con finalità di presentazione del dato. Nelle varie piattaforme il dato tipicamente deriva da attributi variabili, ospitati in classi/tabelle differenti dalla classe padre dove tipicamente dov'à essere usato questo widget.
Nella classe padre si avrà quindi un campo JSON, che verrà popolato con solo una sintesi di tutta la mole di dati presente negli attributi variabili.
Il popolamento del dato avviene tipicamente tramite groovy.
Sotto un groovy di esempio per la creazione del JSON con relativi metadati.
Si tenga presente che quando nel GwAdmin è impostato il tipo di dato JSON per un attributo, nella mappa destinata all'insert/update, si può usare indistintamente sia una string in formato JSON, che una mappa, con coppie chiave valore.
Per praticità conviene sempre usare una mappa.
Questo anche perchè nei anche nei vari metodi di seleizone il valoredi un field json viene restituito come mappa.
String gwClassName = "gw_class_name";
def map = [:];
def jsonMap = [:];
//popolamento key-value primo livello json
//TODO rinominare le key e recuperare i valori da altre classi/tabelle
jsonMap.key_date_1 = 1738573528392;
jsonMap.key_date_2 = "2025-02-03T09:16:00.565Z";
jsonMap.key_date_3 = 1738573528392;
jsonMap.key_date_4 = "2025-02-03T09:16:00.565Z";
jsonMap.key_date_5 = "2025-02-03T09:16:00.565Z";
jsonMap.key_html_1 = "Approved";
jsonMap.key_image_1 = "TEST/Galleria/12023.jpg";
jsonMap.key_image_2 = "TEST/Galleria/download.jpg";
jsonMap.key_string_1 = "Yes";
jsonMap.key_string_2 = "Questa è una nota estesa. Questa è una nota estesa.";
jsonMap.key_string_3 = "Questa è una nota estesa. Questa è una nota estesa. Questa è una nota estesa. Questa è una nota estesa. Questa è una nota estesa.";
jsonMap.key_numeric_1 = 12345;
jsonMap.key_numeric_2 = 12.345;
jsonMap.key_numeric_3 = 1;
jsonMap.key_numeric_4 = 1;
jsonMap.key_numeric_5 = 0.569;
jsonMap.key_numeric_7 = 600000;
jsonMap.key_numeric_8 = 10.57;
//popolamento key-value primo livello json senza _metadata (e con key complessa che viene usata come label)
jsonMap["Image senza _metadata"] = "TEST/Galleria/download.jpg";
jsonMap["String senza _metadata"] = "generic string";
jsonMap["Date senza _metadata ms"] = 1738573528392;
jsonMap["Numeric senza _metadata"] = 999;
jsonMap["Date senza _metadata string ISO-8601"] = "2025-02-03T09:16:00.565Z";
//popolamento key _metadata
//definizione dei gruppi
def groupsMap = [
group_1: [
label: "Testo (\"type\": \"string\")",
order: 1
],
group_2: [
label: "Testo (\"type\": \"numeric\")",
order: 2
],
group_3: [
label: "Testo (\"type\": \"date\")",
order: 3
],
group_4: [
label: "Testo (\"type\": \"image\")",
order: 4
],
group_5: [
label: "Testo (\"type\": \"html\")",
order: 5
]
];
//definizione dei parametri dei metadata
def parametersMap = [
key_string_1: [
type: "string",
label: "Confermi?",
order: 1,
group_code: "group_1"
],
key_string_2: [
type: "string",
label: "Testo (useTextArea true)",
order: 2,
params: [
useTextArea: true
],
group_code: "group_1"
],
key_string_3: [
type: "string",
label: "Testo (useTextArea true, height 100px, maxHeight:300px)",
order: 3,
params: [
useTextArea: true,
height: "100px",
maxHeight: "300px"
],
group_code: "group_1"
],
key_numeric_1: [
type: "numeric",
label: "Numero intero",
order: 1,
params: [
constraints: [
places: 0,
pattern: "#."
]
],
group_code: "group_2"
],
key_numeric_2: [
type: "numeric",
label: "Numero decimale",
order: 2,
params: [
constraints: [
places: 2,
pattern: "00#."
]
],
group_code: "group_2"
],
key_numeric_3: [
type: "numeric",
label: "Numero decimale places 4",
order: 3,
params: [
constraints: [
places: 4,
pattern: "#."
]
],
group_code: "group_2"
],
key_numeric_4: [
type: "numeric",
label: "Numero intero 0 leading",
order: 4,
params: [
constraints: [
places: 0,
pattern: "000#."
]
],
group_code: "group_2"
],
key_numeric_5: [
type: "numeric",
label: "% completamento",
order: 5,
params: [
constraints: [
places: 2,
pattern: "#.## %"
]
],
group_code: "group_2"
],
key_numeric_6: [
type: "numeric",
label: "% completamento places 2",
order: 6,
params: [
constraints: [
pattern: "#. %"
]
],
group_code: "group_2"
],
key_numeric_7: [
type: "numeric",
label: "Importo",
order: 7,
params: [
constraints: [
pattern: "#.00 €"
]
],
group_code: "group_2"
],
key_numeric_8: [
type: "numeric",
label: "Importo no decimals",
order: 8,
params: [
constraints: [
pattern: "#. €"
]
]
],
key_date_1: [
type: "date",
label: "Data ms default",
order: 1,
group_code: "group_3"
],
key_date_2: [
type: "date",
label: "Data string ISO-8601 default",
order: 2,
group_code: "group_3"
],
key_date_3: [
type: "date",
label: "Data ms params.format 'yyyy-MM-dd HH:mm:ss'",
order: 3,
params: [
format: "yyyy-MM-dd HH:mm:ss"
],
group_code: "group_3"
],
key_date_4: [
type: "date",
label: "Data string ISO-8601 params.format 'dd-MM-yyyy HH:mm:ss'",
order: 4,
params: [
format: "dd-MM-yyyy HH:mm:ss"
],
group_code: "group_3"
],
key_date_5: [
type: "date",
label: "Data string ISO-8601 params.format 'HH:mm:ss'",
order: 5,
params: [
format: "HH:mm:ss"
],
group_code: "group_3"
],
key_image_1: [
type: "image",
label: "Immagine da CMS (default)",
order: 1,
group_code: "group_4"
],
key_image_2: [
type: "image",
label: "Immagine da CMS (height 50px)",
order: 2,
params: [
height: "50px"
],
group_code: "group_4"
],
key_html_1: [
type: "html",
label: "custom html",
order: 1,
params: [],
group_code: "group_5"
]
];
jsonMap._metadata = [
groups: groupsMap,
parameters: parametersMap
];
map.id_field = 123;
//...
map.jsonb_field = jsonMap;
services.classService.updateClassRecord(gwClassName, map);
=== Note implementative per le date ===
Sebbene il visualizzatore JSON supporto formalmente una grande varietà di formati supportati per il type 'date', nelle implementazioni va usato la versione stringa nel formato **'dd-MM-yyyy HH:mm:ss'** (uguale al //timestamp// del database). Quindi NON la versione ISO-8601, con o senza TIMEZONE.
Questo per le logiche dei filtri del queryBuilder di geoweb.
====== Configurazione Widget Enterprise ======
===== Plugin Classification =====
Questo plugin nasce per definire in Geoweb delle classi 'gerarchizzate' o 'classificate'. In particolare tali classi servono per descrivere degli oggetti che vanno inventariati e gestiti allo stesso modo tra loro, ma possono essere di diversa natura, e quindi avere una definizione di attributi diversa una dall'altra.
Tipicamente, in una azienda, classi di questo genere sono utili a descrivere l'elenco degli Asset che costituiscono l'inventario aziendale.
Ad esempio fanno parte degli Asset aziendali le apparecchiature informatiche, gli arredi, le auto aziendali ecc.
Pur essendo quindi un insieme di oggetti che costituiscono nel loro insieme il patrimonio aziendale, questi oggetti hanno natura diversa e quindi caratteristiche diverse tra loro che occorre annotare e gestire.
Quindi la struttura della 'Classificazione' permette di raggruppare tali oggetti in Famiglie e SottoFamiglie (gerarchie di oggetti), e ognuna delle sottofamiglie può avere una serie di attributi che la caratterizzano per la sua particolare Natura (RAM del computer, piuttosto che cavalli fiscali dell'auto aziendale, ecc.).
Il plugin quindi fornisce una serie di componenti, quali un componente di Menu ([[gwusermanual:interface:interface:leafitem#leafitemclassificationmenu|leafItemClassificationMenu]]) che permette di sfogliare la gerarchia delle famiglie, di definire nuove famiglie e definire/modificare il set di attributi variabili.
Il plugin mette a disposizione inoltre dei Widget che permettono di classificare un nuovo oggetto, modificarne uno esistente, visionare e inserire dati negli Attributi Variabili.
Di seguito il collegamento alla prima analisi di modello dati su cui è stato basato il plugin.
{{ :gwusermanual:interface:classificazione_datamodel_vintage.pdf |}}
==== CLASSIFICATION ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget enterprise)]]\\
Questo widget permette di definire la famiglia di appartenenza dell'Oggetto che si sta inserendo o modificando. Permette di scegliere la Famiglia grazie a un componente che fa sfogliare il tree su una pop-up.
\\
In visualizzazione che ne presenta la gerarchia definita
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
|classReference|fa riferimento alla classe gerarchizzata |
|mapPath|percorso delle mappe, utile per la tematizzazione automatica, in mappa, delle famiglie che vengono aggiunte [[gwtipstricks:idxtipstricks:configuralayerclassificata#istruzioni_da_seguire_lato_geoweb_maestro|vedi riferimenti]]|
==== VARIABLEATTRIBUTES ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget enterprise)]]\\
(to do)\\
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
|par1||
|par2||
==== RELATION_WIDGET ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget enterprise)]]\\
(to do)\\
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
|par1||
|par2||
===== Plugin Workflow =====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget Enterprise)]]\\
Il plugin Workflow contiene le funzionalità di interfacciamento al motore Activiti. In questa sezione vengono descritti i soli widget, ma tutto l'argomento è trattato diffusamente nel capitolo [[gwusermanual:interface:workflow]].
----
==== GW_RELATED_PROCESSES_WIDGET ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget Enterprise)]]\\
Questi nuovi widget nascono dall’esigenza di rendere evidente all’utente tutti i processi in qualche maniera collegati ad una specifica entità in Geoweb (siano essi lanciabili, in corso o già terminati). Se questa entità potrà essere del tutto arbitraria, di fatto lo sviluppo dei nuovi componenti è stato dettato dalla necessità di esplicitare tutti i processi in qualche modo collegati a specifiche istanze dell’entità **digital document** (oggetto di uno sviluppo parallelo).
Date le specifiche funzionali richieste, si è deciso di racchiudere il loro soddisfacimento nel widget **gwRelatedProcessesWidget**. Questo widget va a riunire e potenziare le funzionalità già implementate nei widget **gwTasksWidget** e **gwArchivedProcessesWidget**, che vengono ancora supportati, ma di fatto ne viene scoraggiato l’uso.
Questo widget rende fruibili per l’utente, in maniera semplice e concentrata in un unico cruscotto, le seguenti funzionalità relative all’oggetto collegato:
* Possibilità di avviare istanze di processo;
* Eventuale visualizzazione delle istanze di processo in corso;
* Eventuale visualizzazione delle istanze di processo concluse.
Il widget è renderizzato con un contenitore esterno simile all'AccordionContainer dojo, che ospita due sottosezioni:
* Sezione **processi avviabili/in corso**. Questa ospiterà una lista di oggetti eterogenei. Il numero, la tipologia e l’ordinamento di tali oggetti è configurabile tramite in un apposito file .groovy (vedi sotto), che viene valutato a //runtime// e permette di cambiare dinamicamente l’interfaccia, in base a tutta una serie di parametri. Questi oggetti possono essere di due tipologie:
* Button per avviare nuove istanze di processo (eventualmente personalizzabile da file .groovy in icona e label);
* Blocco con informazioni sull’istanza di processo in corso (label ed icona personalizzazbili in groovy), e il(i) task corrente(i). Al click su(i) task in corso verrà aperta la corrispettiva scheda gwTaskDetail con, a seconda dei casi, la possibilità di completare o richiedere l’esecuzione del task o di poter solo visualizzarlo.\\ Il blocco presenta la possibilità di essere espanso e mostrare ulteriori informazioni:
* Eventuale button per cancellare l’istanza di processo in corso (la cui visibilità icona e label è configurabile da file .groovy). Da notare che a monte verrà comunque verificato l’apposito permesso statico ‘Cancella istanza di processo’, legato a gruppo ed ambito, configurabile nel gwAdmin). L’annullamento dell’istanza di processo comporterà la ricomparsa del button per avviare il processo;
* Lista delle attività (//task//) passate già eseguite, in ordine di data completamento decrescente. Vengono visualizzate le seguenti informazioni:
* //nome attività//;
* //data di completamento//;
* Sezione dei **processi conclusi** ospiterà i processi conclusi.
Il widget permette di avviare più tipologie di processo alla volta, ma vincola l’esecuzione di una sola istanza di processo alla volta per una data tipologia (//processDefinitionKey//). Sta all’utente configuratore specificare nell’implementazione del file .groovy se un’eventuale istanza di processo in corso di una certa tipologia, debba inibire anche la possibilità di avviare un’istanza di processo di un’altra tipologia, o meno. A tale scopo viene fornita come parametro nel metodo del .groovy anche la lista delle istanze di processo: List processInstanceList
Il widget tiene sincronizzate nelle istanze di processo generate in Activiti le seguenti variabili di processo, con nome fisso:
* **gw_related_entity_id**, String, il contenuto del campo dichiarato //keyColumn// per la classe;
* **gw_related_entity_name**, String, il contenuto del campo con name //entityCodColumnName// specificato nel file .groovy, oppure, in sua assenza, il contenuto del campo configurato come //nameColumn// per la classe.
E’ obbligatorio per l’utente configuratore la creazione, nella tabella e relativa gwClass di processo, dei campi //gw_related_entity_id// e //gw_related_entity_name// e relativi gwAttribute in modo da averli sincronizzati in automatico e poterli eventualmente usare in ogni momento per eseguire delle query. Volutamente non verranno riversate fra le variabili di processo tutte le variabili della entità collegata (es: //digital document//). Sia per evitare un inutile sovraffollamento, che per evitare possibili collisioni dei nomi usati nella classe collegata con quelli propri delle variabili di processo (tipo generici //start_date//, etc..). Se necessario, nei groovy di processo si potranno recuperare tutte le informazioni della classe collegata tramite //gw_related_entity_id// o //gw_related_entity_name//.
Es. (postgres)
ALTER TABLE test_gw44data.aim_wpi_asset_assignto ADD COLUMN gw_related_entity_id character varying(250);
ALTER TABLE test_gw44data.aim_wpi_asset_assignto ADD COLUMN gw_related_entity_name character varying(250);
PARAMETRI
^ Parametro ^ Descrizione ^
|entityCodColumnName| String, optional. Nome della colonna della classe del widget che verrà usata per recuperare il valore con cui eseguire la query in Activiti. Se omessa, o valorizzata come stringa vuota, di default verrà utilizzata la //name_column// della gwClass. Il parametro può essere utile in quei casi dove per la stessa entità in geoweb si prevede che possano essere collegati in maniera indipendente diversi processi in Activiti, che però fanno riferimento a contesti diversi. Per esempio, questo campo potrebbe essere generato da una vista, concatenando qualche informazione che funga da ambito/contesto (es: cod_commessa) al contenuto del columnName base della classe, cosicché il widget possa mostrare in maniera certa solo i processi che fanno riferimento alla determinata entità nello specifico contesto|
|entityStatusColumnName| String, optional. Nome della colonna della classe del widget che verrà usata per recuperare lo stato del record corrente. Il valore dello stato verrà passato come parametro (//entityStatus//) nell’invocazione del metodo del file groovy (vedi sotto). Se omesso, verrà passato //null//|
|groovy| String, required. Nome del file groovy (comprensivo di estensione .groovy) che ospiterà una class java. In alternativa si potrà impostare direttamente una java class disponibile nel //classPath//, indicandone il nome preceduto dal path completo. Questa java class dovrà estendere i metodi della classe //GwRelatedProcessesConfigImpl// (che a sua volta implementa i metodi dell'interfaccia //GwRelatedProcessesConfigAbs//). Se omesso verrà utilizzata una implementazione base dell’interfaccia che ritorna una lista di definizione di comandi vuota|
Esempio di configurazione xml widget:
…
TestGwRelatedProcessesWidgetConfigImpl
Esempio configurazione groovy:
import org.activiti.engine.runtime.ProcessInstance;
import com.geowebframework.workflowplugin.model.widget.GwRelatedProcessesWidgetConfigImpl;
public class TestGwRelatedProcessesWidgetConfigImpl extends GwRelatedProcessesWidgetConfigImpl {
public List< Map> getRelatedProcessDefinitionList (
String entityId,
String entityName,
String entityStatus,
String gwUser,
String gwGroup,
Map gwActiveScopesMap,
List processInstanceList
){
return [
[
processDefinitionKey: "",
message: "", //required if necessary
isStartable: true, //default true
startLabel: "", //optional
startIconClass: "", //optional
startIconImage: "", //optional
runningIsVisible: true, //optional, default true
runningLabel: "", //optional
runningIconClass: "", //optional
runningIconImage: "", //optional
isCancelable: true, //optional
cancelLabel: "", //optional
cancelIconClass: "", //optional
cancelIconImage: "", //optional
archivedIsVisible: true, //optional, default true
processCodRelatedEntityVariableName: "" //optional, default provided
]
]
}
}
----
==== GW_ARCHIVED_PROCESSES_WIDGET ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget Enterprise)]]\\
Questi nuovi widget nascono dall’esigenza di rendere evidente all’utente tutti i processi in qualche maniera collegati ad una specifica entità in Geoweb (siano essi lanciabili, in corso o già terminati). Se questa entità potrà essere del tutto arbitraria, di fatto lo sviluppo dei nuovi componenti è stato dettato dalla necessità di esplicitare tutti i processi in qualche modo collegati a specifiche istanze dell’entità **digital document** (oggetto di uno sviluppo parallelo).
Questo widget si preoccuperà di mostrare all’utente una griglia contente tutte le istanze di processo che si sono concluse e che hanno riguardato l’entità collegata.
PARAMETRI
^ Parametro ^ Descrizione ^
|entityCodColumnName| String, optional. Nome della colonna della classe del widget che verrà usata per recuperare il valore con cui eseguire la query in Activiti. Se omessa, o valorizzata come stringa vuota, di default verrà utilizzata la //name_column// della gwClass. Il parametro può essere utile in quei casi dove per la stessa entità in geoweb si prevede che possano essere collegati in maniera indipendente diversi processi in Activiti, che però fanno riferimento a contesti diversi. Per esempio, questo campo potrebbe essere generato da una vista, concatenando qualche informazione che funga da ambito/contesto (es: cod_commessa) al contenuto del columnName base della classe, cosicché il widget possa mostrare in maniera certa solo i processi che fanno riferimento alla determinata entità nello specifico contesto|
|entityStatusColumnName| String, optional. Nome della colonna della classe del widget che verrà usata per recuperare lo stato del record corrente. Il valore dello stato verrà passato come parametro (//entityStatus//) nell’invocazione dei vari metodi groovy (vedi sotto). Se omesso, verrà passato //null//|
|groovy| String, optional. Nome del file .groovy (comprensivo di estenzione .groovy) che ospiterà una class java. In alternativa si potrà impostare direttamente una java class disponibile nel //classPath//, indicandone il nome preceduto dal path completo. Questa java class dovrà estendere la classe //GwArchivedProcessesWidgetConfigImpl// (che implementa l'interfaccia //GwArchivedProcessesWidgetConfigAbs//). Se omesso verrà utilizzata una implementazione base dell’interfaccia che ritorna una lista di definizione di comandi vuota|
Esempio configurazione xml widget:
…
generic_document_gwArchivedProcessesWidgetConfigImpl
Esempio configurazione groovy:
import com.geowebframework.workflowplugin.model.widget.GwArchivedProcessesWidgetConfigImpl;
public class TestGwArchivedProcessesWidgetConfigImpl extends GwArchivedProcessesWidgetConfigImpl {
public List
----
==== GW_TASKS_WIDGET ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget Enterprise)]]\\
Questo nuovo widget nasce dall’esigenza di rendere evidente all’utente tutti i processi in qualche maniera collegati ad una specifica entità in Geoweb (siano essi lanciabili, in corso o già terminati). Se questa entità potrà essere del tutto arbitraria, di fatto lo sviluppo dei nuovi componenti è stato dettato dalla necessità di esplicitare tutti i processi in qualche modo collegati a specifiche istanze dell’entità **digital document** (oggetto di uno sviluppo parallelo).
Questo widget si preoccuperà di:
* Rendere usufruibili per l’utente, in maniera semplice e concentrata in un’unica interfaccia, tutti i //comandi// che permettano di innescare i vari processi necessari:
* I comandi saranno disponibili come button contenuti nel widget, sotto la //label// configurata nel //gwAttribute//, disposti in verticale, uno sotto l’altro. Essi occuperanno in orizzontale tutto lo spazio disponibile;
* Le definizioni di questi comandi in grado di avviare processi (startableProcessDefinition) saranno recuperate dinamicamente invocando l’esecuzione di un metodo List
della class java (che implementa l’interfaccia //GwTasksWidgetConfigAbs//) contenuta nel file configurato nel parametro **groovy** (vedi sotto). Queste definizioni sono state volutamente fatte ritornare da un metodo groovy (da implementare ed invocato dinamicamente), per riuscire un domani a rendere configurabili da interfaccia lato client i processi che l’utente può lanciare (Creando apposite classi di gestione in geoweb, per poi eseguire dal groovy delle query sulle tabelle delle classi al fine di recuperare le informazioni sui processi avviabili);
* Tipicamente questi processi avranno come effetto ultimo sul documento, la variazione dello stato: il valore contenuto nella colonna **status_column**;
* Vincolare l’esecuzione di una sola istanza di processo (//processInstance//) alla volta (e quindi ovviamente una sola //processDefinition//):
* Quindi all’avvio di una data istanza di processo, verrà inibita la possibilità di avviarne altre di una qualsiasi tipologia. La UI presentata non sarà più quella iniziale, ma i button per avviare i processi saranno sostituiti da un layout toolbar+griglia (sotto maggiori dettagli). Inoltre la sotto label del widget in alto, comparirà un ulteriore label indicante la tipologia di istanza di processo in corso, con il pattern ‘In Corso: ’+;
* Per tutta la durata dell’esecuzione della istanza di processo dovrà essere possibile, in qualunque momento, annullare l’esecuzione dell’istanza stessa (l’annullamento potrà essere lanciato da un apposito button che comparirà sulla toolbar);
* L’annullamento dell’istanza di processo potrà essere abilitato/disabilitato mediante implementazione del metodo Map getCancelableProcessDefinition()
della classe .groovy (da notare che a monte verrà comunque verificato l’apposito permesso statico ‘//Cancella istanza di processo//’, legato a gruppo ed ambito, configurabile nel gwAdmin);
* L’annullamento dell’istanza di processo comporterà la ricomparsa del layout del widget iniziale, con tutti i comandi dichiarati compatibili (tramite groovy) con lo stato corrente dell’entità collegata (es: //digital document//);
* Rendere visibili i task utente in corso e conclusi riguardanti l’eventuale istanza di processo in corso:
* Questi verranno mostrati come record di simil griglia, disposta sotto la toolbar, dove compariranno le seguenti colonne:
* label task;
* data creazione task;
* data completamento task;
* o I record verranno ordinati mettendo in cima i task in corso seguiti da quelli completati. Come secondo criterio di ordinamento verrà usata la data di creazione dei task (desc);
* I task in corso rispetteranno le convenzioni cromatiche tipiche delle altre liste dei processi (verde=task propri, giallo=task richiedibili, bianco= task assegnati ad altri);
* Solo al click sui task in corso verrà aperta la corrispettiva scheda gwTaskDetail con, a seconda dei casi, anche la possibilità di completare o richiedere l’esecuzione del task;
* Tenere sincronizzate nelle istanze di processo generate in Activiti le variabili di processo **gw_related_entity_id** (il contenuto del campo configurato come //keyColumn//) e **gw_related_entity_name** (il contenuto del campo configurato come //nameColumn//) con nome fisso.\\ E’ mandatorio per l’utente configuratore la creazione, nella tabella e relativa gwClass di processo, dei campi e relativi gwAttribute in modo da averli sincronizzati in automatico e poterli eventualmente usare in ogni momento per eseguire query. Volutamente non verranno riversate fra le variabili di processo tutte le variabili della entità collegata (es: digital document). Sia per evitare un inutile sovraffollamento, che per evitare possibili collisioni dei nomi usati nella classe collegata con quelli propri delle variabili di processo (tipo generici start_date, etc..). Se necessario, nei groovy di processo si potranno recuperare tutte le informazioni della classe collegata tramite //gw_related_entity_id// o //gw_related_entity_name//.
PARAMETRI
^ Parametro ^ Descrizione ^
|entityCodColumnName| String, optional. Nome della colonna della classe del widget che verrà usata per recuperare il valore con cui eseguire la query in Activiti. Se omessa, o valorizzata come stringa vuota, di default verrà utilizzata la //name_column// della gwClass. Il parametro può essere utile in quei casi dove per la stessa entità in geoweb si prevede che possano essere collegati in maniera indipendente diversi processi in Activiti, che però fanno riferimento a contesti diversi. Per esempio, questo campo potrebbe essere generato da una vista, concatenando qualche informazione che funga da ambito/contesto (es: //cod_commessa//) al contenuto del //columnName// base della classe, cosicché il widget possa mostrare in maniera certa solo i processi che fanno riferimento alla determinata entità nello specifico contesto|
|entityStatusColumnName| String, optional. Nome della colonna della classe del widget che verrà usata per recuperare lo stato del record corrente. Il valore dello stato verrà passato come parametro (//entityStatus//) nell’invocazione dei vari metodi groovy (vedi sotto). Se omesso, verrà passato //null//|
|groovy| String, optional. Nome del file groovy (comprensivo di estenzione .groovy) che ospiterà una class java. In alternativa si potrà impostare direttamente una java class disponibile nel //classPath//, indicandone il nome preceduto dal path completo. Questa java class dovrà implementare i metodi dell'interfaccia //GwTasksWidgetConfigAbs//. Se omesso verrà utilizzata una implementazione base dell’interfaccia che ritorna una lista di definizione di comandi vuota|
Esempio configurazione xml widget:
…
generic_document_gwTasksWidgetConfigImpl
Esempio configurazione groovy:
import org.activiti.engine.runtime.ProcessInstance;
import com.geowebframework.workflowplugin.model.widget.GwTasksWidgetConfigImpl;
public class TestGwTasksWidgetConfigImpl extends com.geowebframework.workflowplugin.model.widget.GwTasksWidgetConfigImpl {
public List< Map> getStartableProcessDefinitionList (String entityId, String entityName, String entityStatus, String gwUser, String gwGroup, Map gwActiveScopesMap){
def res = [] ;
def definition1 = [ processDefinitionKey: "utc_gwprocess_wiz" ];
def definition2 = [
processDefinitionKey: "utc_gwprocess_proc",
message: "utc_gwprocess_proc_start_message",
label: "Start Process utc_gwprocess_proc (c)",
iconClass: ""
];
res.add(definition1);
if(entityStatus!="cannotValidate") res.add(definition2);
return res;
}
public Map getCancelableProcessDefinition (String processDefinitionKey, String processInstanceId, String entityId, String entityName, String entityStatus, String gwUser, String gwGroup, Map gwActiveScopesMap){
return [
isCancelable: true
];
}
}
----
===== Plugin ThreeDVisualizer =====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget Enterprise)]]\\
Questo plugin racchiude tutti i widget che fanno riferimento al modulo relativo al Bim Explorer. La definizione e il funzionamento generale di un singolo widget è del tutto analoga agli altri.
==== GRAPHIC_LAYOUT_WIDGET ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget Enterprise)]]\\
Definisce un pulsante, collocabile sia all'interno della scheda di dettaglio che in lista, che permette di aprire un nuovo tab dove sarà visualizzata la mappa, associata al widget in questione. Al click sul pulsante viene recuperata nel database la mappa associata al valore del widget tramite una query sulla tabella gwd_layout e questa viene mostrata in un nuovo tab. Inoltre all'interno della scheda di dettaglio è stato creato un altro pulsante tramite il quale si può modificare il layout, e di conseguenza pure la mappa che viene recuperata, scegliendo fra tutte quelli disponibili nel database.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
|FieldToStore| Corrisponde alla colonna della tabella gwd_layout il cui valore viene salvato nel database. Può essere scelto fra layout_code o pk_layout.|
|FieldToShow| Corrisponde alla colonna della tabella gwd_layout il cui valore viene mostrato all'utente. Può essere scelto fra layout_code o layout_label. I due valori possono essere differenti.|
|isCode|Flag booleano attraverso il quale va indicato se l'attributo corrisponde ad un Integer oppure a String. Se il valore è True allora l'attributo corrisponde a String altrimenti se il valore è false allora l'attributo corrisponde ad Integer |
\\
==== INDIRECT_LOCALIZATION ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget Enterprise)]]\\
Definisce un pulsante, collocabile sia all'interno della scheda di dettaglio che in lista, che permette di selezionare e fare lo zoom sull'oggetto al quale è associato. Nel momento in cui si clicca sul pulsante, viene aperto un nuovo tab contenente una scena del Bim Explorer sulla quale sono caricati i modelli associati all'oggetto, ottenuti tramite la relazione fra il //codeColumnName3D// e il //codeColumnRelationTableName3D//. La camera sarà inizialmente impostata in modo tale da avere in primo piano l'oggetto su cui viene fatto lo zoom.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
^ Parametro ^Descrizione ^
|codeColumnName3D|Corrisponde al nome della colonna della tabella, corrispondente alla classe sulla quale viene definito il widget, che è in relazione con la colonna della //relationTableName3D// definita in //codeColumnRelationTableName3D//. |
|relationTableName3D| Corrisponde al nome della tabella sulla quale vengono ricercati gli oggetti sui quali fare lo zoom.|
|codeColumnRelationTableName3D| Corrisponde al nome della colonna della //relationTableName3D// che è in relazione con la colonna //codeColumnName3D//. |
|defaultGwmScene|Questo valore indica la scena di default dalla quale deve essere ricavato l'insieme dei modelli ad essa associata. |
|openInNewTab|Questo flag deve essere popolato tramite un booleano. Se TRUE allora il widget mantiene il solito comportamento e viene aperto un tab con il Bim Explorer nella stessa scheda, mentre se FALSE viene aperto un nuovo progetto (projectName) in un’altra scheda. In tutti gli altri casi viene eseguito di default il comportamento che ha il widget se il flag è FALSE |
|projectName|Indica il nome del progetto da aprire in caso di widget openInNewTab è FALSE. Di default si cercherà di aprire il progetto BIM_DATA |
|sessionCodeField|Indica il nome della variabile in sessione in cui andare a mettere il codice del gwdBimProject che deve essere aperto. Viene inserito fra i parametri in sessione tramite gwp solamente se è popolato questo campo|
\\
AZIONE DI ZOOM INDIRETTO MULTIPLO\\
Parallelamente all’introduzione di questi due nuovi flag in fase di configurazione è stata sviluppata un’azione che permette di eseguire lo zoom selezionando più di un elemento della lista.
In fase di configurazione deve essere creata una azione da porre in lista sulla toolbar, il codice dell’azione deve essere il seguente:
multipleIndirectLocalization(grid,attributeName);
I parametri in ingresso per questa funzione devono essere grid e attributeName (ovvero il nome dell’attributo su cui è configurato l’indirectLocalizationWidget)
===== Plugin gwMnemonicCode =====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget Enterprise)]]\\
Questo plugin nasce per definire in Geoweb dei **codici parlanti**, ovvero codici composti di varie 'sezioni', ognuna delle quali corrisponde ad uno specifico oggetto, il cui ordine definisce una gerarchia tra gli oggetti che queste rappresentano.
Quindi la struttura del 'MnemonicCode' permette di raggruppare tali oggetti in gerarchie che ne permettono la facile organizzazione e gestione grazie agli strumenti messi a disposizione da questo plugin, quali un componente di Menu ([[gwusermanual:interface:schede#gwmnemoniccodesheet|gwMnemonicCodeSheet]]), che permette di visualizzare e gestire in un'unica scheda l'intera gerarchia di oggetti relativi ad un codice parlante definito in una classe, uno widget ([[gwusermanual:interface:widget#mnemonic_code_widget|MnemonicCodeWidget]]) di creazione di codici parlanti ed uno widget ([[gwusermanual:interface:widget#mnemonic_code_selection_widget|MnemonicCodeSelectionWidget]]) che permette di effettuare una selezione da un albero gerarchico di codici parlanti.
Il plugin mette a disposizione inoltre una sezione, nella configurazione (lato admin) di una classe, di [[gwusermanual:gwobjects:start#mnemonic_code|creazione di un MnemonicCode]] al quale i vari componenti possono riferirsi. Ogni classe può avere più MnemonicCode configurati ed i singoli componenti possono fare riferimento ad uno di essi.
==== MNEMONIC_CODE_WIDGET ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget enterprise)]]\\
Questo widget permette di definire un codice parlante per il record in cui viene inserito. La struttura di tale codice parlante dipende dalla [[gwusermanual:gwobjects:start#mnemonic_code|configurazione del MnemonicCode]] relativo a questo attributo.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici per questo widget sono i seguenti:
|mnemonicCodeName|il nome del MnemonicCode su cui questo widget viene configurato|
|widgetIsEditable|boolean, indica se questo widget può o meno essere modificato anche dopo essere stato definito alla creazione. Se 'false', una volta definito, il codice di questo widget potrà essere visualizzato ma non modificato, anche se si hanno i permessi di modifica|
|progressivePopulation|boolean, indica se questo widget debba essere compilato seguendo l'ordine delle varie parti, e quindi senza lasciare vuote delle parti intermedie|
==== MNEMONIC_CODE_SELECTION_WIDGET ====
[[gwusermanual:interface:widget#widget_enterprise|(torna a elenco widget enterprise)]]\\
Questo widget permette di selezionare un codice parlante per il record, scegliendolo da un albero gerarchico relativo al [[gwusermanual:gwobjects:start#mnemonic_code|MnemonicCode]] a cui esso fa riferimento.
Oltre ai [[gwusermanual:interface:widget#Elenco dei Parametri comuni alla maggior parte degli widget|parametri comuni]], i parametri specifici sono i seguenti:
|rootLabel|il titolo della finestra in cui verrà visualizzato l'albero|
|initSelValue|opzionale: valore iniziale impostato se questo widget non ha valore all'apertura della finestra|
|classReference|il nome della classe in cui è configurato il MnemonicCode su cui questo widget viene configurato|
|queryClausole|opzionale: clausola SQL che definisce la condizione con cui filtrare i valori di questo widget|
|initialFilterRoot|opzionale: codice iniziale che funge da filtro. Se impostato, nell'albero saranno visibili solo i 'figli' diretti del codice inserito|
|selectabilityDepth|opzionale: livello di profondità minimo entro cui è possibile selezionare i record in questo albero. Ad esempio, se impostato a 2, permetterà di selezionare solo record presenti negli ultimi due livelli di profondità. Se impostato a 0, o lasciato vuoto, permetterà di selezionare qualunque livello di profondità|
|mnemonicCodeName|il nome del MnemonicCode su cui questo widget viene configurato|
|selectionModeMultiple|DEPRECATO|
|nodeLabelType|DEPRECATO|