Libreria di Azioni di utilizzo comune
Si premette che le anche API esposte qui, possono essere utilizzate all'interno dei vari tipi di gwAction creabili dall'utente configuratore, come documentato qui.
Azioni di esportazione e aggiornamento
Esportazione in XLS dati di una classe
Consultare la guida per Import\Export dati
Esportazione in SHP dati di una classe geometrica
standardListSelectedAllAttributeExportToShp(parameterQueryList, grid);
Deprecata dalla versione 4.2.14. Vedi nuova funzione di esportazione Import\Export dati
Aggiornamento Cache (solo per classi gerarchizzate)
updateCache(grid,'nome_classe');
Azioni per l'esecuzione di codice groovy
In Geoweb, il codici contenuti nei file groovy possono essere eseguiti anche attraverso alcune azioni eseguite lato javascript. Per fare questo, all'interno del codice dell'azione, devono essere richiamate delle specifiche function javascript, in base all'esigenza del caso. E' comodo in fase di configurazione, copiare i template della parte javascript e della parte groovy, per poi integrare modifcando secondo le necessità. Di seguito si riporta l'elenco delle funzioni disponibili di tipo groovyAction con i relativi parametri di input necessari alla corretta esecuzione:
groovyActionGeneric
E' la funzione più generale ed è anche la più semplice. Prende in input - in questo ordine - solo quattro variabili:
/*String*/ scriptName, required, ovvero una stringa con il nome del file groovy che deve essere lanciato (senza estensione .groovy)/*Object*/ parameterMap, optional, cioè un oggetto js che può contenere eventuali parametri necessari all'esecuzione del Groovy (ospitati dentro una mappa, ed accessibili lato grooyvy tramite la notazione parameterMap.nome_parametro)/*function*/ callback, optional, una function che viene eseguita dopo il groovy. E' in genere usata per notifiche all'utente o, ma si può eseguire qualunque operazione necessaria./*function*/ errorCallback, optional, una function che puo eventualmente essere eseguita in caso di errore. Normalmente, in caso di errore non gestito nell'ambito del groovy (errori di rete, timeout server) viene generato e notificato un un errore in maniera automatica. Questo parametro può essere usato per una gestione custom dell'eventuale errore.
Template js
Solo scriptName è obbligatorio. Si passa parameterMap per poi poterla usare nel groovy. La callback è qui usata per mostrare messaggi di notifica sia in caso di successo, sia in caso di errore gestito tramite groovy (nel senso di stop controllato dell'esito dell'operazione)
var scriptName = 'groovy_name'; var parameterMap = { p1_name: 'p1_value', p2_name: 2, p3_name: true }; var callback = function(responseHashMap){ var result = responseHashMap.result; var success = result.success; var message = result.message; if(success){ var custom_object= result.custom_object; var title = notificationMessage; showOkDialog({ title: title, message: message, yesCallback: function(){}}); }else{ var title = notificationMessage; var params = { title: title, message: message }; showErrorDialog(params); } }; var errorCallback = null; groovyActionGeneric(scriptName, parameterMap, callback, errorCallback );
Template groovy
Verrà eseguito lato server il codice groovy presente nel file specificato. E' comodo ritornare i dati di output secondo il pattern del template. Bisogna assicurarsi di popolare coerentemente il flag success, ed eventualmente un message. Si può inoltre arricchire la mappa result con ogni oggetto si renda necessario utilizzare in seguito nella callback js lato client.
def result = [:]; def success = false; def message = null; try{ //access incoming parameters retrieving from parameterMap var parameterValue = parameterMap.parameter_name; //TODO //result.custom_object = [a: 1]; // . . . /*if(my_blocking_condition){ success = false; message = 'KO'; }*/ //set success to true success = true; message = 'OK'; }catch(Exception e){ //something goes wrong log.error(e.getMessage(), e); //log it success = false; //set flag to false message = 'ko'; }finally{ result.success = success; result.message = message; } return result;
groovyActionList
Permette di invocare l'esecuzione di codice groovy, avente in ingresso le informazioni di una determinata lista di record della classe in oggetto. E'una API js ad uso interno, invocata automaticamente per le gwAction del tipo Selezionati in Lista.
In alcuni casi può essere usata direttamente dall'utente configuratore, popolando coerentemente l'oggetto queryParameter, al fine di ritrovarsi in ingresso al codice groovy la variabile List<Map<String,Object» items contenente i record selezionati. Parametri (ordinati) in ingresso alla function:
/*String*/ scriptName, required, ovvero una stringa con il nome del file groovy che deve essere lanciato (senza estensione .groovy)/*Object*/ queryParameter, required, oggetto js contenente le informazioni per far si che venagno filtrati i record dati in input al codice groovy. L'unica proprietà dell'oggetto su cui l'utente configuratore dovrebbe agire è filters, un array ordinato contenente gli oggetti filtervar queryParameter = { filters: [ {condition: 'AND', columnName: 'status', operator: '=', filterType: 'STRING', value: 'CLO'}, {condition: 'AND', columnName: 'type', operator: 'IN', filterType: 'INTEGER', value: [1,2,3,5,7]} ] };
/*dojox/EnhancedDatagrid | Object*/ grid, required, nell'uso automatico la griglia di geoweb. Puo essere sostituito con un oggetto javascript, contenenete il gwClassName, fatto cosi {gwClassName: 'gw_class_name'}/*function*/ callback, optional, una function che viene eseguita dopo il groovy. E' in genere usata per notifiche all'utente o, ma si può eseguire qualunque operazione necessaria./*function*/ errorCallback, optional, una function che puo eventualmente essere eseguita in caso di errore. Normalmente, in caso di errore non gestito nell'ambito del groovy (errori di rete, timeout server) viene generato e notificato un un errore in maniera automatica. Questo parametro può essere usato per una gestione custom dell'eventuale errore.
Template js
Solo scriptName è obbligatorio. Si passa queryParameter al fine di permettere a Geoweb di eseguire la query di selezione record per noi, e darci direttamente la lista dei record selezionati nel groovy. La callback è qui usata per mostrare messaggi di notifica sia in caso di successo, sia in caso di errore gestito tramite groovy (nel senso di stop controllato dell'esito dell'operazione)
var scriptName = 'groovy_name'; var queryParameter = { filters: [ {condition: 'AND', columnName: 'status', operator: '=', filterType: 'STRING', value: 'CLO'}, {condition: 'AND', columnName: 'type', operator: 'IN', filterType: 'INTEGER', value: [1,2,3,5,7]} ] }; var gwClassName = 'gw_class_name'; var callback = function(responseHashMap){ var result = responseHashMap.result; var success = result.success; var message = result.message; if(success){ var custom_object= result.custom_object; var title = notificationMessage; showOkDialog({ title: title, message: message, yesCallback: function(){}}); }else{ var title = notificationMessage; var params = { title: title, message: message }; showErrorDialog(params); } }; var errorCallback = null; groovyActionList(scriptName, queryParameter, {gwClassName: gwClassName}, callback, errorCallback );
Template groovy
Verrà eseguito lato server il codice groovy presente nel file specificato. La lista dei record derivanti dal filtro impostato nel javascript sarà ritornata sotto la variabile items (item sarà disponibile e conterrà solo il primo record). E' comodo ritornare i dati di output secondo il pattern del template. Bisogna assicurarsi di popolare coerentemente il flag success, ed eventualmente un message. Si può inoltre arricchire la mappa result con ogni oggetto si renda necessario utilizzare in seguito nella callback js lato client.
def result = [:]; def success = false; def message = null; try{ //cycling items for(def item : items){ var property_value = item .property_name; ... } //access only the first incoming item trought items or item (with only the first element of List, for groovy detail compatibility) var property_value = items[0].property_name; //var property_value = item.property_name; //TODO //result.custom_object = [a: 1]; // . . . /*if(my_blocking_condition){ success = false; message = 'KO'; }*/ //set success to true success = true; message = 'OK'; }catch(Exception e){ //something goes wrong log.error(e.getMessage(), e); //log it success = false; //set flag to false message = 'ko'; }finally{ result.success = success; result.message = message; } return result;
groovyActionDetail
@Deprecated Permette di invocare l'esecuzione di codice groovy, avente in ingresso le informazioni di uno specifico record della classe in oggetto. Era una API js ad uso interno, invocata automaticamente per le gwAction di tipo del tipo Dettaglio. Non andrebbe utilizzata dall'utente configuratore Parametri (ordinati) in ingresso alla function:
/*String*/ scriptName, required, ovvero una stringa con il nome del file groovy che deve essere lanciato (senza estensione .groovy)/*Object*/ item, optional, [non utilizzare] @Deprecated/*Integer*/ rowIndex, optional, [non più usato] @Deprecated/*dojox/EnhancedDatagrid*/ grid, optional, [non più usato] @Deprecated/*Object*/ data, required, è un oggetto contenente dei parametri necessari all'esecuzione del groovy, tra cui varie informazioni sulla classe, come la variabile gwClassName con il nome della classe e il nome della colonna associata alla chiave primaria della relativa tabella/*function*/ callback, optional, una function che viene eseguita dopo il groovy. E' in genere usata per notifiche all'utente o, ma si può eseguire qualunque operazione necessaria./*function*/ errorCallback, optional, una function che puo eventualmente essere eseguita in caso di errore. Normalmente, in caso di errore non gestito nell'ambito del groovy (errori di rete, timeout server) viene generato e notificato un un errore in maniera automatica. Questo parametro può essere usato per una gestione custom dell'eventuale errore.
Template js
Solo scriptName è obbligatorio. Si passa parameterMap per poi poterla usare nel groovy. La callback è qui usata per mostrare messaggi di notifica sia in caso di successo, sia in caso di errore gestito tramite groovy (nel senso di stop controllato dell'esito dell'operazione)
var scriptName = 'groovy_name'; var data= { gwClassName: 'gwClassName ', .. }; var callback = function(responseHashMap){ var result = responseHashMap.result; var success = result.success; var message = result.message; if(success){ var custom_object= result.custom_object; var title = notificationMessage; showOkDialog({ title: title, message: message, yesCallback: function(){}}); }else{ var title = notificationMessage; var params = { title: title, message: message }; showErrorDialog(params); } }; var errorCallback = null; groovyActionDetail(scriptName, null, null, data, callback, errorCallback );
Template groovy
Verrà eseguito lato server il codice groovy presente nel file specificato. Il record in input sarò disponibile sotto la variabile item (o items[0], per compatibilità con i groovy di lista) E' comodo ritornare i dati di output secondo il pattern del template. Bisogna assicurarsi di popolare coerentemente il flag success, ed eventualmente un message. Si può inoltre arricchire la mappa result con ogni oggetto si renda necessario utilizzare in seguito nella callback js lato client.
def result = [:]; def success = false; def message = null; try{ //access incoming item trough item or items (for groovy list compatibility) var property_value = item.property_name; //var property_value = item[0].property_name; //TODO //result.custom_object = [a: 1]; // . . . /*if(my_blocking_condition){ success = false; message = 'KO'; }*/ //set success to true success = true; message = 'OK'; }catch(Exception e){ //something goes wrong log.error(e.getMessage(), e); //log it success = false; //set flag to false message = 'ko'; }finally{ result.success = success; result.message = message; } return result;
Esempi
Di seguito sono riportati alcuni semplici esempi di azioni che possono essere utilizzate in Geoweb per l'esecuzione dei Groovy.
- Azione di esecuzione generica con messaggio di callback: questo codice lancia l'esecuzione del Groovy 'import_csv_talentia' e, come risultato al client, mostra una finestra di dialogo con il messaggio restituito dalla funzione di callback.
var callback = function(responseHashMap){ var result = responseHashMap.result; if(result.success == true){ var title = 'Importazione CSV Talentia'; //optional var message = result.message; //optional var yesCallback = function(){}; var params = { title: title, message: message, yesCallback: yesCallback}; showOkDialog(params); }else{ var title = 'Importazione CSV Talentia'; //optional var message = result.message; //optional var yesCallback = function(){}; var params2 = { title: title, message: message, yesCallback: yesCallback}; showOkDialog(params2); } }; var parameterMapGroovy = {}; groovyActionGeneric('import_csv_talentia', parameterMapGroovy, callback);
- Azione di esecuzione generica con errorCallback per la gestione dell'errore 504 Gateway Timeout: questo codice fa eseguire un Groovy con nome 'testGroovy' e gestisce una finestra di dialogo con un messaggio (personalizzabile) nel caso in cui il server vada in errore di timeout.
var errorCallback = function(error){ if (error.response!=null && error.response!=undefined && error.response.status!=null && error.response.status!=undefined && error.response.status == 504){ var params = { title: notificationMessage, //optional message: "Attenzione: lo svolgimento dell'azione proseguirà in background." //customizable }; showOkDialog(params); }else{ gwServerErrorManagement(error); } }; var parameterMapGroovy = {}; var callback = function(){}; groovyActionGeneric('groovyTest', parameterMapGroovy, callback, errorCallback);
Editing Multiplo di Attributi
Il codice specifico per la configurazione dell'azione di multipleUpdate è il seguente:
if(grid!=null && grid.query!=null) queryParameter.staticFilters = clone(grid.query.query.staticFilters); var detailLayoutName = '[inserire nome Layout]'; var options = { openingDetailMode: 'floatingPane' }; openGwClassDetailMultiple(gwClassName, detailLayoutName, queryParameter, options);
NOTA: l'unico parametro che lo sviluppatore deve impostare autonomamente è il detailLayoutName, che DEVE essere relativo ad un layout creato ad-hoc per la modifica multipla.
ATTENZIONE! Non per tutti gli widget è consentita la modifica multipla. Alcuni sono stati bloccati e non possono accedervi.
Ogni attributo java corrispondente ad un widget è dotato di una proprietà chiamata “allowMultipleEdit()”, tale proprietà definisce se sia possibile o meno utilizzare in modifica multipla tale widget.
Di seguito è esposta una lista di quali possono essere utilizzati e quali non possono, nominati sia per il nome dell'attributo lato java che per il nome del widget corrispondente lato framework.
Widget per cui multipleUpdate è consentito
| Nome Attributo | Nome Widget |
| ActiveGroupWidget | ACTIVE_GROUP_WIDGET |
| ActiveUserWidget | ACTIVE_USER_WIDGET |
| CheckBox | CHECKBOX |
| Classification | CLASSIFICATION |
| ClassificationReference | |
| ColorPicker | COLORPICKER |
| ComboBox | COMBOBOX |
| CronExpGeneratorWidget | CRON_EXP_GENERATOR_WIDGET |
| Date | DATE |
| DBComboBox | DBCOMBOBOX |
| DBImageComboBox | DBIMAGECOMBOBOX |
| DBSuggestBox | DBSUGGESTBOX |
| DBWindowList | DBWINDOWLIST |
| Domain | DOMAIN |
| ExternalTable | EXTERNALTABLE |
| FilterSelectionWidget | FILTER_SELECTION_WIDGET |
| Label | LABEL |
| LabelValuesXmlWidget | LABEL_VALUES_WIDGET |
| Layout2DWidget | LAYOUT_2D_WIDGET |
| MnemonicCodeSelectionWidget | MNEMONIC_CODE_SELECTION_WIDGET |
| MnemonicCodeWidget | MNEMONIC_CODE_WIDGET |
| NumberBox | NUMBERBOX |
| PositionWidget | POSITION_WIDGET |
| Position2Widget | POSITION2_WIDGET |
| ScopeValueWidget | SCOPE_VALUE_WIDGET |
| SelectionListWidget | SELECTION_LIST_WIDGET |
| SelectionList2Widget | SELECTION_LIST2_WIDGET |
| TextBox | TEXTBOX |
| Time | TIME |
| VariableAttributes | VARIABLEATTRIBUTES |
| WidgetBase | NORMAL |
| WidgetBaseAbs | |
Widget per cui multipleUpdate NON è consentito
| Nome Attributo | Nome Widget |
| ActionWidget | ACTION_WIDGET |
| Attachments | ATTACHMENTS |
| BlobObject | |
| ChildList | CHILDLIST |
| CmisDocumentWidget | CMIS_DOCUMENT_WIDGET |
| DataRange | |
| Document | DOCUMENT |
| EventObjectList | EVENT_OBJECT_LIST |
| ExternalLink | EXTERNALLINK |
| FinalBalanceJobsWidget | FINAL_BALANCE_JOBS_WIDGET |
| Geocoding | |
| Html | HTML |
| Image | IMAGE |
| ImgPathGallery | IMG_PATH_GALLERY |
| IncludePage | |
| InsertUserWidget | INSERT_USER_WIDGET |
| Link | |
| LinkList | LINKLIST |
| LinkListNam | LINKLISTNAM |
| Point | POINT |
| Polygon | POLYGON |
| Polyline | POLYLINE |
| RelationWidget | RELATION_WIDGET |
| SpLink | |
| SpLista | |
| Textarea | TEXTAREA |
| ThreeDZoomWidget | 3D_ZOOM_WIDGET |
| VirtualWidget | VIRTUAL_WIDGET |