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.

// 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);
// 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 

Azione disponibile sul button 'More Options' (AKA …) della top toolbar di lista classe

// 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 

Azione disponibile direttamente sulla top toolbar di lista classe. 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);
        }
    });
}

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 
// 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 
// 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 

(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());
}

(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());
}

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 

Eseguita sempre

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

Eseguita in base ai permessi dell'utente

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

TODO

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

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:

  • Il codice di questa azione verrà eseguito al click del ‘Nuovo’ della scheda gwClassList o degli widget LinkList, ChildList ed ExternalTable;
  • L’azione verrà visualizzata in base ai permessi statici sull'azione;
  • Si potranno configurare più azioni di questo tipo per ogni gwClass. Verrà usata la prima disponibile con i permessi abilitati (lista ordinata per nome). Sarà onere del configuratore settare i permessi in maniera tale da avere, in ogni dato momento, solo un’azione abilitata;
  • In caso sia presente l’azione newButtonReplacement, verranno utilizzati icona, label e tooltip definiti nell'azione;

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:

  • Parametri comuni a tutti gli oggetti che utilizzano questo tipo di azione:
    • l'id della classe: classGwid;
    • il nome della classe: gwClassName;
    • la colonna nome della classe: gwNameColumn;
    • la colonna chiave della classe: classKeyColumn;
    • il tipo di valore della colonna chiave: classKeyColumnDataType;
    • l'etichetta della classe: classLabel;
  • Parametri specifici per ogni componente:
    • Nel caso della LinkList:
      • il nome della classe: _gwTargetClassName (corrisponde al “nome della classe” dei parametri comuni);
      • l'id dell'elemento della classe: _targetClassAttributeGwid;
      • la colonna chiave della classe: _targetClassKeyColumn (corrisponde alla “colonna chiave della classe” dei parametri comuni);
      • nome della classe padre: _gwStartClassName;
      • l'id dell'elemento padre: _gwStartClassItemId;
      • il valore e il relativo tipo della colonna chiave della classe padre: _startClassKeyColumnValue, _startClassKeyColumnValueType.
    • Nel caso della ChildList:
      • il nome della classe: gwClassName (corrisponde al “nome della classe” dei parametri comuni);
      • l'id della classe: classGwid;
      • la colonna chiave della classe e il relativo tipo: classKeyColumn (corrisponde alla “colonna chiave della classe” dei parametri comuni), classKeyColumnDataType (corrisponde al “tipo di valore della colonna chiave” dei parametri comuni);
      • la chiave esterna della classe nella relazione e il suo valore: fkAttributo e fkAttrValue;
      • nome della classe padre: parentGwClassName;
      • l'id della classe classe padre: parentGwClassGwid;
      • la chiave esterna della classe padre nella relazione: parentFkAttributo.
    • Nel caso dell'ExternalTable:
      • il nome della classe: gwClassName (corrisponde al “nome della classe” dei parametri comuni);
      • l'id della classe: classGwid;
      • la colonna chiave della classe: classKeyColumn (corrisponde alla “colonna chiave della classe” dei parametri comuni);
      • la colonna nome della classe: gwNameColumn (corrisponde alla “colonna nome della classe” dei parametri comuni).
    • La gwClassList non ha parametri specifici.

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);
});

[..] 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; [..]

  • gwusermanual/interface/action.txt
  • Ultima modifica: 2024/07/25 18:18
  • da giorgio.scali