Indice

Azioni

Torna indietro

Le Azioni rappresentano la possibilità di eseguire routines più o meno complesse e attivate da una scelta dell'utente (click sul pulsante o selezione dal menù a tendina) o da eventi specifici (es. apertura della form).

Esse contengono codice eseguibile lato client, e scritto in linguaggio JavaScript. Sono naturalmente accessibili tutte le API Javascript. Tra le API Javascript sono inoltre disponibili funzioni pronte per chiamare delle routine server-side, scritte in linguaggio Groovy, e definite come API Java.

Geoweb mette a disposizione in questa wiki una libreria di azioni da definire e utilizzare dove opportuno.

Dettaglio

Dettaglio Posto nella Toolbar

// Available incoming parameters: 
// 	/*String*/ gwClassName, /*String*/ itemId, /*int*/ rowIndex, /*Object*/ grid, 
// 	/*Object*/ item, /*Object*/ data, 
// 	/*Object*/ detailContainer, /*String*/ detailContainerId 
// 
// Available js API on detailContainer: 
// 	.setFormValues(/*Object*/ mapWithNameAsKey), .getFormValues(/*Boolean, optional*/ onlyModified), .getFormValuesToShow(/*Boolean, optional*/ onlyModified), 
// 	.getGwWidget(/*Object, done so {name: 'att_name'} or so {gwid: 123}*/  params), 
// 	.hideGwActionInToolbarButton(/*String*/ gwActionName), .showGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.disableGwActionInToolbarButton(/*String*/ gwActionName), .enableGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.isSomeFormValueChanged(), .validateGwForm(), .isGwFormValid(), .notifyGwFormNotValidToUser() 
// 
// Available js API on gwWidget: 
// 	.gwSetValue(/*Object*/ value), .gwGetValue(), 
// 	.gwSetReadonly(/*Boolean*/ readonly), .gwGetReadonly(), 
// 	.gwSetRequired(/*Boolean*/ required), .gwGetRequired(), 
// 	.gwSetDisabled(/*Boolean*/ disabled), .gwGetDisabled(), 
// 	.gwSetHidden(/*Boolean*/ hidden), .gwGetHidden(), .gwIsHidden(), .gwHide(eventChain), .gwShow(), .gwToggleHidden() 
// 
// Available properties on gwWidget: 
// 	.gwAttributeName, .gwAttributeGwid 

Esempi

Trasferimento Elaborati in Chiusura Progetto

console.log('UpdateData');
 
var showConnInfo = function(responseHashMap){
 
    invisibleStandbyWidget.hide();
    publishGwClassUpdate( 'cnt_connector');
    var success = responseHashMap.result.success;
    if(success){
        var params = { title: title, message: "Operazione avvenuta con successo", yesCallback: null};
        showOkDialog(params);
    } else {
        showErrorDialog(responseHashMap.result.message)
    }
}
 
 
var upd_data = function(){           
    groovyActionGeneric('connector_cloud_pim_aim_project_out', item, showConnInfo);
};
var title = 'TRASMETTI ELABORATI in CHIUSRA di PROGETTO ad AIM';
var message = 'Sei sicuro di voler trasmettere gli elaborati in chiusura di progetto ad AIM?';
var yesCallback = function(){
    invisibleStandbyWidget.show();
    upd_data();
};
var params = { title: title, message: message, yesCallback: yesCallback};
 
showYesCancelDialog(params);

VerificaElaborati

function action_verify(data,items){
    var gwClassDetailContainer = null;
    var itemId = 'newItem';
    var gwClassName = 'cde_del_verify';
 
    var suffixId = 'detail_'+gwClassName;
	var detailContainerId = gwFloatingPanePrefix+suffixId;
 
    var options = {
        detailContainerId: detailContainerId,
        dimensions: { w: 650, h: 500 },    
        useCookie: false,
        hideTopToolbar: true,
        autoTitle: false,
        title: 'Verifica Elaborato: Esprimi Parere',
        //editIgnorePermissions: true, //(already @Deprecated, @Removed from version 4.7.1)
        hideDefaultButtons: true, 
        attributesOverrisionsMap: {
        },
        initialsValuesMap: {
            cod_deliverable_full: data.itemDB.cod_deliverable_full,
            cod_approval_status:data.itemDB.cod_approval_status,
            cod_approval_model: data.itemDB.cod_approval_model,
            date_verify: Date.now(),
            cod_01_project:data.itemDB.cod_01_project,
            cod_status_deliverable:data.itemDB.cod_status_deliverable,
            cod_approval_status:data.itemDB.cod_approval_status,
            cod_track:data.itemDB.cod_track,
            cod_approval:data.itemDB.cod_approval,
            ruolo_approvativo: items.ruolo_approvativo,
            approval_type: items.approval_type
        },
        extraBottomToolbarButtons: [
            {
                label: closeLabel,
                iconClass: 'iconClose',
                functionCode: function(
                    evt, itemId, gwClassName, detailContainerId, targetId
                ){
                    onDetailCloseButtonClick(detailContainerId, this);
                }
            },
            {
                label: 'Salva Configurazioni',//createAndCloseLabel,
                iconClass: 'iconCreateAndClose', 
                functionCode: function( 
                    evt, itemId, gwClassName, detailContainerId, targetId
                ){
                    debugger;
                    var detailContainerWidget = dijit.registry.byId(detailContainerId);
 
                    if(detailContainerWidget.getGwWidget({name:"approval_type"}).gwGetValue() == "AUT"){
                        if(detailContainerWidget.getGwWidget({name:"chk_promoted"}).gwGetValue() == 0 && detailContainerWidget.getGwWidget({name:"chk_rejected"}).gwGetValue() == 0){
                            showErrorDialog('Attenzione: è necessario specificare l\'esito della verifica selezionado "Promosso" o "Bocciato"');
                            throw "";
                        }
                    }
 
                    detailContainerWidget._hadToBeClosed = true;
                    var callback = function(
                        params
                    ){
                        //TODO aggiungi qui codice js da eseguire al termine della creazione nuovo record
 
                        onDetailCloseButtonClick(detailContainerId, this);
                        var gwClassName = 'cde_deliverable';
    					publishGwClassUpdate(gwClassName);
                    };
 
                    var params = {
                        className: gwClassName,
                        sqlStatement: 'insert',
                        detailContainerId: detailContainerId,
                        buttonWidget: this,
                        callback: callback
                    };
                    sendGwClassDetailForm(params);
                }
            }
        ],
        callback: function(itemId, gwClassName, detailContainerId, items){
            var gwClassDetailContainer = dijit.registry.byId(detailContainerId);
            require(['dojo/topic'], function(topic){
               var handle = topic.subscribe('gwClassDetail/ready', function(params){
    			    if(params && params.gwClassName==gwClassName && params.itemId==itemId && params.detailContainer.id==detailContainerId){
    					handle.remove();
    					    var w1 = gwClassDetailContainer.getGwWidget({name: 'ruolo_approvativo'});
                            if(w1){
                                w1.gwSetValue(items.ruolo_approvativo);
                                w1.recomputeOptions();
                            }
                            window.setTimeout(function(){
 
                                var w2 = gwClassDetailContainer.getGwWidget({name: 'approval_type'});
                                if(w2){
                                    w2.gwSetValue(items.approval_type);
                                    w2.recomputeOptions();
                                }
 
                                window.setTimeout(function(){
                                    // Controllo quali campi abilitare
                                    var cod_approval_status = gwClassDetailContainer.getGwWidget({name: 'cod_approval_status'}).gwGetValue();
                                    var ruolo_approvativo = gwClassDetailContainer.getGwWidget({name: 'ruolo_approvativo'}).gwGetValue();
                                    var approval_type = gwClassDetailContainer.getGwWidget({name: 'approval_type'}).gwGetValue();
 
 
                                    function call_sel(items){
                                        debugger;
                                        items = items[0];
                                        var detailContainer = dijit.byId(detailContainerId);
 
                                        if(items.approval_type=="AUT"){
                                            detailContainer.getGwWidget({name:'chk_promoted'}).gwSetHidden(false);
                                            detailContainer.getGwWidget({name:'chk_rejected'}).gwSetHidden(false);
                                        }else if(items.approval_type="VIEW"){
                                            detailContainer.getGwWidget({name:'chk_viewed'}).gwSetHidden(false);
                                            detailContainer.getGwWidget({name:'chk_viewed'}).gwSetRequired(true);
                                        }
 
                                        if(items.enable_revision == 1){
                                            detailContainer.getGwWidget({name:'allow_revision'}).gwSetHidden(false);
                                        }
 
                                        if(items.enable_note == 1){
                                            detailContainer.getGwWidget({name:'note_verify'}).gwSetHidden(false);
                                        }
 
                                        if(items.enable_attachment == 1){
                                            detailContainer.getGwWidget({name:'attachment_name'}).gwSetHidden(false);
                                        }
                                    }
 
                                    var filters = [
                                        {columnName: 'cod_approval_status', condition: 'AND', filterType: 'STRING', operator: '=', value: [cod_approval_status]},
                                        {columnName: 'approval_role', condition: 'AND', filterType: 'STRING', operator: '=', value: [ruolo_approvativo]},
                                        {columnName: 'approval_type', condition: 'AND', filterType: 'STRING', operator: '=', value: [approval_type]}
                                        ];
                                    selectGwClassRecords('gwd_approval_level', filters, null, call_sel);
                                }, 200);
        					}, 200);
    				}
    			});
    			gwClassDetailContainer.own(handle);
            });
        },  
        callbackParams: [itemId, gwClassName, detailContainerId, items]
    }
    gwClassDetailContainer = openGwClassDetailFloatingPane(itemId, gwClassName, options);
}
 
// Eseguo select 
function callback_gv(items){
    action_verify(data,items.result);
};
 
function error_callback_gv(items){
    showErrorDialog("Attenzione: è stato rilevato un errore durante l'apertura dell'azione.")
};
 
var parameterMap = {};
parameterMap.query = `find_approve`;
parameterMap.stato_firma = 0;
parameterMap.user_approval = activeUser;
parameterMap.cod_deliverable_full = item.cod_deliverable_full;
parameterMap.cod_approval_status = item.cod_approval_status;
parameterMap.cod_approval = item.cod_approval;
groovyActionGeneric('cde_35_verify_utils',parameterMap,callback_gv,error_callback_gv);

Dettaglio Posto nella Toolbar ACL/DACL check

// Available incoming parameters: 
// 	/*String*/ gwClassName, /*String*/ itemId, /*int*/ rowIndex, /*Object*/ grid, 
// 	/*Object*/ item, /*Object*/ data, 
// 	/*Object*/ detailContainer, /*String*/ detailContainerId 
// 
// Available js API on detailContainer: 
// 	.setFormValues(/*Object*/ mapWithNameAsKey), .getFormValues(/*Boolean, optional*/ onlyModified), .getFormValuesToShow(/*Boolean, optional*/ onlyModified), 
// 	.getGwWidget(/*Object, done so {name: 'att_name'} or so {gwid: 123}*/  params), 
// 	.hideGwActionInToolbarButton(/*String*/ gwActionName), .showGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.disableGwActionInToolbarButton(/*String*/ gwActionName), .enableGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.isSomeFormValueChanged(), .validateGwForm(), .isGwFormValid(), .notifyGwFormNotValidToUser() 
// 
// Available js API on gwWidget: 
// 	.gwSetValue(/*Object*/ value), .gwGetValue(), 
// 	.gwSetReadonly(/*Boolean*/ readonly), .gwGetReadonly(), 
// 	.gwSetRequired(/*Boolean*/ required), .gwGetRequired(), 
// 	.gwSetDisabled(/*Boolean*/ disabled), .gwGetDisabled(), 
// 	.gwSetHidden(/*Boolean*/ hidden), .gwGetHidden(), .gwIsHidden(), .gwHide(eventChain), .gwShow(), .gwToggleHidden() 
// 
// Available properties on gwWidget: 
// 	.gwAttributeName, .gwAttributeGwid 

Selezionati in Lista

Azione disponibile sul button 'More Options' (AKA …) della top toolbar di lista classe. Lavora con i record attualmente presenti in griglia, in base ai filtri correnti. Per 'Selezionati' quindi si intende 'Filtrati'. I record checkati con l'apposita colonna a sinistra non rappresentano la selzione, fino a quando non viene anche cliackato il tasto 'Affina', che di fatto impone un filtro alla griglia con le chiavi degli elementi checkati.

// Available incoming parameters: 
// 	In the linkList grid parameter has been added: start class id and name, start class key column and key column type, 
// 	target class name, target class attribute id and target class key column. 
// 	/*String*/ gwClassName, /*Object*/ queryParameter, /*Object*/ grid, /*Object*/ detailContainerId 

Selezionati in Lista (posto nella toolbar)

Azione disponibile direttamente sulla top toolbar di lista classe.

Lavora con i record attualmente presenti in griglia, in base ai filtri correnti. Per 'Selezionati' quindi si intende 'Filtrati'. I record checkati con l'apposita colonna a sinistra non rappresentano la selezione, fino a quando non viene anche clickato il tasto 'Affina', che di fatto impone un filtro alla griglia con le chiavi degli elementi checkati.

Parametri in ingresso:

// Available incoming parameters: 
// 	In the linkList grid parameter has been added: start class id and name, start class key column and key column type, 
// 	target class name, target class attribute id and target class key column. 
// 	/*String*/ gwClassName, /*Object*/ queryParameter, /*Object*/ grid, /*Object*/ detailContainerId 

Esempi

Esporta Lista Elaborati XLS

var callback = function(sessionParameters){
    var reportName='Esportazione Elaborati.xls'; 
    var reportUrl = '/ELABORATI/CDE35_DELIVERABLE_EXPORT.jasper';
    var className = 'cde_deliverable';
    var attachment = true;
    var actionName = 'ActionExportDEL';
    var listKey = "2111183,2111183";
    var reportParameters = {cod_01_project: sessionParameters.var_cod_01_project, className:className, attachment:attachment,listKey:listKey}; 
    var avoidReturn = openGwReport(reportUrl,reportName,reportParameters,className,attachment,actionName);
}
getGwSessionParameters({callback: callback});

Esporta Pacchetto Elaborati

//percorso del documentale
debugger;
var path       = "/${cod_01_project}/${uk_02_team}/${cod_deliverable_full}/";
var folderName = "";
var fileName   = "Esportazione Files.zip";
console.log(path);
 
//
var gwClassName = grid.gwClassName;//se l'azione è usata come azione in lista il className è recuperato in automatico
var params = {};
params.filterQueryMap = queryParameter;
params.path     	  = path;
params.folderName     = folderName;
params.fileName       = fileName;
var url = gwContextPath+'/rest/'+project_name+'/'+gwClassName+'/attachments/downloadAsZipByRecords';
 
customWindowsOpen(url,
	'post',
	'_self',//name used for window and form-target
	'width=0,height=0',//options for window.open
	'gwAttachmentZip',//the name of the json inside _POST
	params//the object to send
);

Cambia Stato Elaborati

debugger;
 
///////////////////////////////////////////////////////////////////////////////////////
 
function actionChangeStatus(detailValues, arr_deliverables_full){
    var itemId = 'newItem';
    var gwClassName = 'cde_del_change_status';
 
    var options = {
        dimensions: { w: 500, h: 500 },    
        useCookie: false,
        hideTopToolbar: true,
        autoTitle: false,
        title: 'Cambia Stato Elaborati - Da Lista',
        detailLayoutName: 'wip_list',
        //editIgnorePermissions: true, //(already @Deprecated, @Removed from version 4.7.1)
        hideDefaultButtons: true, 
        attributesOverrisionsMap: {
            attachment_name: { readonly: false, required: false, hidden: true},
            note_change_status: { readonly: false, required: false, hidden: true}
        },
        initialsValuesMap: {
            date_change_status: Date.now(),
            cod_deliverable_full: detailValues.cod_deliverable_full,
            cod_track: detailValues.cod_track,
            cod_01_project:detailValues.cod_01_project,
            cod_status_deliverable:detailValues.cod_status_deliverable
        },
        extraBottomToolbarButtons: [
            {
                label: closeLabel,
                iconClass: 'iconClose',
                functionCode: function(
                    evt, itemId, gwClassName, detailContainerId, targetId
                ){
                    onDetailCloseButtonClick(detailContainerId, this);
                }
            },
            {
                label: 'Cambia Stato Track',//createAndCloseLabel,
                iconClass: 'iconCreateAndClose', 
                functionCode: function( 
                    evt, itemId, gwClassName, detailContainerId, targetId
                ){
 
                    var detailContainer = registry.getEnclosingWidget(dojo.byId(detailContainerId));
                    var detailContainerWidget = dijit.registry.byId(detailContainerId); // Recupero detail container
                    var formValues = detailContainerWidget.getFormValues(); // Recupero WIdget Detail Contanier
 
                    var parameterMap = {};
                    parameterMap = formValues;
                    parameterMap.arr_deliverables_full = arr_deliverables_full;
 
                    if(detailContainerWidget.isGwFormValid() != true){
                        throw "";
                    }
 
                    //formValues.arr_deliverables_full = document.arr_deliverables_full; // Porto elaborati nel groovy
                    function callback(mapMess){
                        onDetailCloseButtonClick(detailContainerId, this);
                        mappa = mapMess.result; // Valorizzo variable messaggio
                        showOkDialog(mappa); // Mostro messaggio
                        publishGwClassUpdate('cde_deliverable');
                    };
 
                    groovyActionGeneric('cde_del_change_status_list', parameterMap, callback);
                }
            }
        ]
    }
    openGwClassDetailFloatingPane(itemId, gwClassName, options);
}
 
 
///////////////////////////////////////////////////////////////////////////////////////
 
 
 
// Conto Elaborati selezionati
var selected = grid.selection.getSelectedCount();
 
// Se non ho selezionato alcun elaborato mando errore
if(selected == 0){
    showErrorDialog("Attenzione: selezionare almeno un elaborato");
    throw "";
}
 
 
var gwClassName = 'cde_deliverable';
var filters = queryParameter.filters;
var sort = null;
var callback = function(items){
 
    // Eseguo select 
    function callback_gv(items){
        debugger;
        if(items.result.esito == true){ 
            actionChangeStatus(items.result.detailValues, items.result.arr_deliverables_full);
        }else if(items.result.esito == false){
            showErrorDialog(items.result.message);
        }
    };
 
    function error_callback_gv(items){
        debugger;
        showErrorDialog("Attenzione: è stato rilevato un errore durante l'apertura dell'azione.")
    };
 
    var parameterMap = {};
    var arr_deliv = [];
    for(var i=0; i < items.length; i++){
        arr_deliv.push(items[i].id_deliverable)
    }
    parameterMap.id_deliverables = arr_deliv.join();
    parameterMap.gwActiveGroup = gwActiveGroup;
    groovyActionGeneric('cde_35_check_change_status_list',parameterMap,callback_gv,error_callback_gv);
}
 
selectGwClassRecords(gwClassName, filters, sort, callback);

Associa Modello ad Annotazioni

console.log('AssociaModello');
var selected = grid.selection.getSelected();
if(selected.length==0){
    var title = 'modelToAnnotationsAssociation - ALERT';
    var message = 'noAnnotationsPresent';
    var labelMap = {title:title,message:message};
    actionMessagesMapTranslate(labelMap,function(response){
        var title = response.title;
        var message = response.message;
        var yesCallback = function(){
        };
        var params = { title: title, message: message, yesCallback: yesCallback};
        showOkDialog(params);
    });
}else{
    var gridObj
    if(grid) gridObj = grid;
    else gridObj = {gwClassName: 'gwd_annotation'}
 
    groovyActionList('gwd_update_model_list_start_msg', queryParameter, gridObj, function(responseHashMap){
        var result = responseHashMap.result;
        var success = result.success;
        var description = result.description;
        if(success){
    		var taskNextStepInfosHM = result.taskNextStepInfosHM;
    		handleTaskNextStep(taskNextStepInfosHM);
    		//showOkDialog(notificationMessage, description);
        }else{
            showErrorDialog(description);
        }
    });
}

Al caricamento del dettaglio (eseguita in automatico)

Eseguita quando il dettaglio è 'ready'

// Available incoming parameters: 
// 	/*String*/ gwClassName, /*String*/ itemId, 
// 	/*Object*/ detailContainer, /*String*/ detailContainerId, 
// 	/*Object*/ item, /*Object*/ data 
// 
// Available js API on detailContainer: 
// 	.setFormValues(/*Object*/ mapWithNameAsKey), .getFormValues(/*Boolean, optional*/ onlyModified), .getFormValuesToShow(/*Boolean, optional*/ onlyModified), 
// 	.getGwWidget(/*Object, done so {name: 'att_name'} or so {gwid: 123}*/  params), 
// 	.hideGwActionInToolbarButton(/*String*/ gwActionName), .showGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.disableGwActionInToolbarButton(/*String*/ gwActionName), .enableGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.isSomeFormValueChanged(), .validateGwForm(), .isGwFormValid(), .notifyGwFormNotValidToUser() 
// 
// Available js API on gwWidget: 
// 	.gwSetValue(/*Object*/ value), .gwGetValue(), 
// 	.gwSetReadonly(/*Boolean*/ readonly), .gwGetReadonly(), 
// 	.gwSetRequired(/*Boolean*/ required), .gwGetRequired(), 
// 	.gwSetDisabled(/*Boolean*/ disabled), .gwGetDisabled(), 
// 	.gwSetHidden(/*Boolean*/ hidden), .gwGetHidden(), .gwIsHidden(), .gwHide(eventChain), .gwShow(), .gwToggleHidden() 
// 
// Available properties on gwWidget: 
// 	.gwAttributeName, .gwAttributeGwid 

Ad inserimento record concluso (eseguita in automatico)

// Available incoming parameters (between the others): 
// 	/*Object*/ params 
// 		params contains(className, gwClassName, sqlStatement, detailContainer, detailContainerId, buttonWidget) 
// 
// Available js API on detailContainer: 
// 	.setFormValues(/*Object*/ mapWithNameAsKey), .getFormValues(/*Boolean, optional*/ onlyModified), .getFormValuesToShow(/*Boolean, optional*/ onlyModified), 
// 	.getGwWidget(/*Object, done so {name: 'att_name'} or so {gwid: 123}*/  params), 
// 	.hideGwActionInToolbarButton(/*String*/ gwActionName), .showGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.disableGwActionInToolbarButton(/*String*/ gwActionName), .enableGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.isSomeFormValueChanged(), .validateGwForm(), .isGwFormValid(), .notifyGwFormNotValidToUser() 
// 
// Available js API on gwWidget: 
// 	.gwSetValue(/*Object*/ value), .gwGetValue(), 
// 	.gwSetReadonly(/*Boolean*/ readonly), .gwGetReadonly(), 
// 	.gwSetRequired(/*Boolean*/ required), .gwGetRequired(), 
// 	.gwSetDisabled(/*Boolean*/ disabled), .gwGetDisabled(), 
// 	.gwSetHidden(/*Boolean*/ hidden), .gwGetHidden(), .gwIsHidden(), .gwHide(eventChain), .gwShow(), .gwToggleHidden() 
// 
// Available properties on gwWidget: 
// 	.gwAttributeName, .gwAttributeGwid 

A salvataggio record concluso (eseguita in automatico)

// Available incoming parameters (between the others): 
// 	/*Object*/ params 
// 		params contains(className, gwClassName, sqlStatement, detailContainer, detailContainerId, buttonWidget) 
// 
// Available js API on detailContainer: 
// 	.setFormValues(/*Object*/ mapWithNameAsKey), .getFormValues(/*Boolean, optional*/ onlyModified), .getFormValuesToShow(/*Boolean, optional*/ onlyModified), 
// 	.getGwWidget(/*Object, done so {name: 'att_name'} or so {gwid: 123}*/  params), 
// 	.hideGwActionInToolbarButton(/*String*/ gwActionName), .showGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.disableGwActionInToolbarButton(/*String*/ gwActionName), .enableGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.isSomeFormValueChanged(), .validateGwForm(), .isGwFormValid(), .notifyGwFormNotValidToUser() 
// 
// Available js API on gwWidget: 
// 	.gwSetValue(/*Object*/ value), .gwGetValue(), 
// 	.gwSetReadonly(/*Boolean*/ readonly), .gwGetReadonly(), 
// 	.gwSetRequired(/*Boolean*/ required), .gwGetRequired(), 
// 	.gwSetDisabled(/*Boolean*/ disabled), .gwGetDisabled(), 
// 	.gwSetHidden(/*Boolean*/ hidden), .gwGetHidden(), .gwIsHidden(), .gwHide(eventChain), .gwShow(), .gwToggleHidden() 
// 
// Available properties on gwWidget: 
// 	.gwAttributeName, .gwAttributeGwid 

Prima dell'inserimento del record (DETAIL BEFORE DETAIL CREATED)

(da 4.4.13) Precedentemente l'unico modo di sovrascrivere, anche parzialmente ,il comportamento dei button Crea/Crea e Chiudi era quello di nascondere i button con i relativi parametri del tag gwClassDetailSettings nell'xml di progetto (hideCreateButton) e creare i button sostitutivi creando delle gwAction di tipo DETAIL_PUT_IN_BOTTOM_TOOLBAR Ulteriore maniera, ma non centralizzata per aggiungere i button è agire sulle api js di apertura del gwClassDetail E' stato introdotto un meccanismo tale per cui in presenza di queste azioni, esse vengono eseguite prima del normale flusso si creazione. Il flusso successivo può essere pilotato con il pattern del Deferred dojo.

Per ogni classe ne verrà valutata solo UNA (anche se sull'admin non esistono check e se ne possono creare piu di una; verrà usata la prima recuperata, order by gwAction name asc)

Verrano eseguiti i controlli dei permessi statici (no DACL)

Esempio minimale:

//function arguments: [/*Object*/params, /*dojo/Deferred*/ deferred]
try{
	//computataion: success at true to advance
	if(success){
		deferred.resolve(); 
	}else{
		 deferred.cancel('stopped by user/by check'); 
	}
 
}catch(e){ 
	console.log('stopped by error', e); 
	deferred.reject(e.toString());
}

Esempio funzione gwAction previa esecuzione groovy:

//function arguments: [/*Object*/params, /*dojo/Deferred*/ deferred]
try{
     var scriptName = 'script_name'; 
     var parameterMap = detailContainer.getFormValues(); 
     var callback = function(/Object/ data){ 
          var result = data.result; 
          var success = result.success; 
          var description = result.description; 
          if(success){ 
               deferred.resolve(); 
          }else{ 
               var title = confirmRequestLabel; //optional 
               var message = description+'. Andare avanti comunque?'; 
               //optional 
               var yesCallback = function(){ 
                    invisibleStandbyWidget.show(); 
                    deferred.resolve(); 
               }; 
               var noCallback = function(){ 
                    deferred.cancel('stopped by user'); 
               }; 
               var cancelCallback = function(){ 
                    deferred.cancel('stopped by user'); 
               }; 
               var params = {
                    title: title,
                    message: message,
                    yesCallback: yesCallback,
                    noCallback: noCallback,
                    cancelCallback: cancelCallback
               }; 
               showYesNoCancelDialog(params); 
          }
		  invisibleStandbyWidget.hide(); 
     }; 
 
     groovyActionGeneric(scriptName, parameterMap, callback);
 
	 invisibleStandbyWidget.show(); 
 
}catch(e){ 
	console.log('stopped by error', e); 
	deferred.reject(e.toString());
}

Prima del salvataggio del record (BEFORE_DETAIL_SAVED)

(da 4.4.13) Precedentemente l'unico modo di sovrascrivere, anche parzialmente ,il comportamento dei button Salva/Crea e Chiudi era quello di nascondere i button con i relativi parametri del tag gwClassDetailSettings nell'xml di progetto (hideSaveButton) e creare i button sostitutivi creando delle gwAction di tipo DETAIL_PUT_IN_BOTTOM_TOOLBAR Ulteriore maniera, ma non centralizzata per aggiungere i button è agire sulle api js di apertura del gwClassDetail E' stato introdotto un meccanismo tale per cui in presenza di queste azioni, esse vengono eseguite prima del normale flusso si creazione. Il flusso successivo può essere pilotato con il pattern del Deferred dojo.

Per ogni classe ne verrà valutata solo UNA (anche se sull'admin non esistono check e se ne possono creare piu di una; verrà usata la prima recuperata, order by gwAction name asc)

Verranno eseguiti i controlli dei permessi statici e DACL

Verrano anche valuatate nell'ambito di workflow/Procedure.

Esempio minimale:

//function arguments: [/*Object*/params, /*dojo/Deferred*/ deferred]
try{
	//computataion: success at true to advance
	if(success){
		deferred.resolve(); 
	}else{
		 deferred.cancel('stopped by user/by check'); 
	}
 
}catch(e){ 
	console.log('stopped by error', e); 
	deferred.reject(e.toString());
}

Esempio funzione gwAction previa esecuzione groovy:

//function arguments: [/*Object*/params, /*dojo/Deferred*/ deferred]
try{
     var scriptName = 'script_name'; 
     var parameterMap = detailContainer.getFormValues(); 
     var callback = function(/Object/ data){ 
          var result = data.result; 
          var success = result.success; 
          var description = result.description; 
          if(success){ 
               deferred.resolve(); 
          }else{ 
               var title = confirmRequestLabel; //optional 
               var message = description+'. Andare avanti comunque?'; 
               //optional 
               var yesCallback = function(){ 
                    invisibleStandbyWidget.show(); 
                    deferred.resolve(); 
               }; 
               var noCallback = function(){ 
                    deferred.cancel('stopped by user'); 
               }; 
               var cancelCallback = function(){ 
                    deferred.cancel('stopped by user'); 
               }; 
               var params = {
                    title: title,
                    message: message,
                    yesCallback: yesCallback,
                    noCallback: noCallback,
                    cancelCallback: cancelCallback
               }; 
               showYesNoCancelDialog(params); 
          }
		  invisibleStandbyWidget.hide(); 
     }; 
 
     groovyActionGeneric(scriptName, parameterMap, callback);
 
	 invisibleStandbyWidget.show(); 
 
}catch(e){ 
	console.log('stopped by error', e); 
	deferred.reject(e.toString());
}

Alla chiusura del dettaglio (eseguita in automatico)

Eseguita sia al click sul bottone chiudi, che sulla 'X' del dialog/floatingPane/tab

// Available incoming parameters: 
// 	/*String*/ gwClassName, /*String*/ itemId, 
// 	/*Object*/ detailContainer, /*String*/ detailContainerId, 
// 	/*Object*/ item, /*Object*/ data 
// 
// Available js API on detailContainer: 
// 	.setFormValues(/*Object*/ mapWithNameAsKey), .getFormValues(/*Boolean, optional*/ onlyModified), .getFormValuesToShow(/*Boolean, optional*/ onlyModified), 
// 	.getGwWidget(/*Object, done so {name: 'att_name'} or so {gwid: 123}*/  params), 
// 	.hideGwActionInToolbarButton(/*String*/ gwActionName), .showGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.disableGwActionInToolbarButton(/*String*/ gwActionName), .enableGwActionInToolbarButton(/*String*/ gwActionName), 
// 	.isSomeFormValueChanged(), .validateGwForm(), .isGwFormValid(), .notifyGwFormNotValidToUser() 
// 
// Available js API on gwWidget: 
// 	.gwSetValue(/*Object*/ value), .gwGetValue(), 
// 	.gwSetReadonly(/*Boolean*/ readonly), .gwGetReadonly(), 
// 	.gwSetRequired(/*Boolean*/ required), .gwGetRequired(), 
// 	.gwSetDisabled(/*Boolean*/ disabled), .gwGetDisabled(), 
// 	.gwSetHidden(/*Boolean*/ hidden), .gwGetHidden(), .gwIsHidden(), .gwHide(eventChain), .gwShow(), .gwToggleHidden() 
// 
// Available properties on gwWidget: 
// 	.gwAttributeName, .gwAttributeGwid 

Alla apertura del progetto (eseguita in automatico)

Eseguita sempre

// Available incoming parameters: 
// 	/*String*/ gwProjectName, /*Integer*/ gwProjectGwid, /*String*/ gwProjectType, 
// 	/*String*/ gwActiveUser, /*String*/ gwActiveGroup, /*Object*/ gwActiveScopesMap 

Alla apertura del progetto permessi Statici check (eseguita in automatico)

Eseguita in base ai permessi dell'utente

// Available incoming parameters: 
// 	/*String*/ gwProjectName, /*Integer*/ gwProjectGwid, /*String*/ gwProjectType, 
// 	/*String*/ gwActiveUser, /*String*/ gwActiveGroup, /*Object*/ gwActiveScopesMap 

Classe

TODO

Libera

Azione non legata a contesti tipici di esecuzione. I parametri ed il contesto di esecuzione vengono variati in base alle necessità.

Posta in sostituzione del bottone Nuovo

Questo nuovo tipo di gwAction (newButtonReplacement) è stata creata per poter, in alcuni casi, sovrascrivere il comportamento di default del button 'Nuovo' posto sulla toolbar della gwClassList e negli widget (LinkList, ChildList ed ExternalTable).

COMPORTAMENTO:

NOTE: Attualmente l’azione di default si preoccupa, ad inserimento concluso, di pubblicare l’evento che permette il refresh delle varie interfacce. Nello scrivere il codice delle azioni si dovrà effettuare questa operazione con le apposite API js.

PARAMETRI
I parametri che vengono passati per questo tipo di azione sono gwClassName, queryParameter e grid.

Il parametro gwClassName è una stringa che contiene il nome della classe.
Il parametro queryParameter è un oggetto contenente tutti i tipi di filtri applicati al nuovo record.
Il parametro grid è un oggetto contenente:

Esempi

Recupero parametri

// Available incoming parameters: 
// 	In the linkList grid parameter has been added: start class id and name, start class key column and key column type, 
// 	target class name, target class attribute id and target class key column. 
// 	/*String*/ gwClassName, /*Object*/ queryParameter, /*Object*/ grid, /*Object*/ detailContainerId 
 
var classLabel = grid.classLabel;  //recupero il parametro comune 'classLabel'
var gwTargetClassName = grid._gwTargetClassName;  //recupero il parametro '_gwTargetClassName' della linkList
var parentGwClassGwid = grid.parentGwClassGwid;  //recupero il parametro 'parentGwClassGwid' della childList
var gwNameColumn = grid.gwNameColumn;  //recupero il parametro 'gwNameColumn' dell'externalTable

Nuovo Elaborato di Progetto TEAM

var createAndCloseLabel = 'createAndClose';
actionMessagesTranslate(createAndCloseLabel,function(response){
    var label1 = response;
    var callback = function(sessionParameters){
    var itemId = 'newItem';
    var className = 'cde_deliverable';
    var cod_01_project = sessionParameters.var_cod_01_project;
    var options = {
        attributesOverrisionsMap: {
            cod_deliverable: { readonly: false, required: true, hidden: false},
            name_deliverable: { readonly: false, required: true, hidden: false},
            cod_class_type: { readonly: false, required: true, hidden: false},
            uk_02_team:  { readonly: false, required: true, hidden: false},
            cod_03_system:  { readonly: false, required: true, hidden: false},
            cod_04_level:  { readonly: false, required: false, hidden: false},
            label_codifiche: { readonly: false, required: false, hidden: false},
            prog_rev:  { readonly: false, required: false, hidden: true},
            cod_format_document:  { readonly: false, required: true, hidden: false},
            redaction_date:  { readonly: false, required: false, hidden: false},
            name_deliverable:  { readonly: false, required: true, hidden: false},
            descr_deliverable:  { readonly: false, required: true, hidden: false},
            cod_document_type: { readonly: false, required: false, hidden: false}
        },
        initialsValuesMap:{
            cod_01_project: cod_01_project,
            cde_group : 'TEAM'
        },
        detailLayoutName: 'NewDeliverable',
        visualizeIgnorePermissions: true,
        //modal: true,    
        hideTopToolbar: true,
        //dimensions: { w: 550, h: 530 },
        hideDefaultButtons: true,
             extraBottomToolbarButtons: [
            {
                label: closeLabel,
                iconClass: 'iconClose',
                functionCode: function(
                    evt, itemId, gwClassName, detailContainerId, targetId
                ){
                    onDetailCloseButtonClick(detailContainerId, this);
                }
            }
            ,{
                label: label1,//createAndCloseLabel,
                iconClass: 'iconCreateAndClose', 
                functionCode: function( 
                    evt, itemId, gwClassName, detailContainerId, targetId
                ){
                    var detailContainerWidget = dijit.registry.byId(detailContainerId);
                    detailContainerWidget._hadToBeClosed = true;
                    var callback = function(
                        params
 
                    ){
 
                        onDetailCloseButtonClick(detailContainerId, this);
                        var gwClassName = 'cde_deliverable';
    					publishGwClassUpdate(gwClassName);
                        //publishGwClassInsert(gwClassName);
                    };
                    var params = {
                        className: gwClassName,
                        sqlStatement: 'insert',
                        detailContainerId: detailContainerId,
                        buttonWidget: this,
                        callback: callback
                    };
                    sendGwClassDetailForm(params);
                }
            }
        ]
 
    };
    openGwClassDetailFloatingPane(itemId, className, options);
};
var params = {
    callback: callback
};
getGwSessionParameters(params);
});

Oggetti disponibili all'interno delle azioni

[..] var pk_jor=data.itemDB.pk_jor
var selected = grid.selection.getSelected();
var cod_srvc_billing_ecstim_Widget = detailContainer.getGwWidgetFromGwAttributeName('cod_srvc_billing_ecstim');
var formProcessName = detailContainer.gwProcessInfo.formKey; [..]