save (ctrl s) UI action on form widget is not working

Hitesh targe
Tera Expert

Hello Experts,

I have UI action in form widget in service portal. when I click on save it is not showing any progress or nothing happen. same UI action is working fine in different page. Can any one suggest me please.

Thanks

1 ACCEPTED SOLUTION

Hitesh targe
Tera Expert

commented disable UI disable ui action in server script(below line). it works



//data.disableUIActions = options.disableUIActions || false;


View solution in original post

7 REPLIES 7

Raju Koyagura
Tera Guru

Can you please share your widget code? It is very hard to suggest without looking into code.


Hi Raju,



Please find the script below



Sever Script



// form functionality - URL parameter driven


(function($sp, input, data, options, gs) {


  /* "use strict"; -linter issues */


  // populate the 'data' variable


data.attachmentUploadSuccessMsg = gs.getMessage("Attachment upload was successful");


data.recordAddedMsg = gs.getMessage("Record Added");


data.updatedMsg = gs.getMessage("updated_uppercase");


data.exportPDFMsg = gs.getMessage("Export to PDF");


data.exportPDFLandMsg = gs.getMessage("Export to PDF (landscape)");


data.addAttachmentMsg = gs.getMessage("Add an attachment");


data.largeAttachmentMsg = gs.getMessage("Attached files must be smaller than {0} - please try again", "24MB");




data.isAdmin = gs.hasRightsTo('sp/configure.all/execute', null);


data.emptyStateTemplate = options.empty_state_template;


data.disableUIActions = options.disableUIActions || false;


data.hideRelatedLists = options.hideRelatedLists || false;




if (input) {


data.table = input.table;


data.sys_id = input.sys_id;


data.view = input.view;


var result = {};


if (input._fields)


result = $sp.saveRecord(input.table, input.sys_id, input._fields);




if (input.sys_id == '-1'){


data.sys_id = result.sys_id;


data.isNewRecord = true;


}


} else {


data.table = $sp.getParameter("t") || $sp.getParameter("table") || $sp.getParameter("sl_table") || options.table;


data.sys_id = $sp.getParameter("sys_id") || $sp.getParameter("sl_sys_id") || options.sys_id;


data.view = $sp.getParameter("v") || $sp.getParameter("view") || options.view; // no default


}




data.query = $sp.getParameter("query") || options.query;


data.f = {};


if (!data.table)


return;



// Form widget is not a supported way to view an attachment


if (data.table == "sys_attachment") {


data.tableUnsupported = true;


return;


}




if (!GlideTableDescriptor.isValid(data.table))


return;




if (!data.sys_id)


return;




var rec = $sp.getRecord(data.table, data.sys_id);


data.isValid = rec.isValid() || data.sys_id == "-1";


if (!data.isValid)


return;




data.table = rec.getRecordClassName();


data.tableHierarchy = GlideDBObjectManager.getTables(data.table).toArray().join();


data.canWrite = rec.canWrite();


data.canAttach = data.canWrite && gs.hasRole(gs.getProperty('glide.attachment.role')) && !GlideTableDescriptor.get(data.table).getED().getBooleanAttribute("no_attachment");


data.f = $sp.getForm(data.table, data.sys_id, data.query, data.view);




// Activity formatter is hardcoded to set specific options


for (var f in data.f._formatters) {


var fm = data.f._formatters[f];


if (fm.formatter == "activity.xml") {


fm.hardcoded = true;


fm.widgetInstance = $sp.getWidget('widget-ticket-conversation',


{table: data.table,


sys_id: data.sys_id,


includeExtended: true,


title: "${Activity}",


placeholder: "${Add a comment}",


btnLabel: "${Post}"});


} else


fm.widgetInstance = $sp.getWidget(fm.widget, data);


}


})($sp, input, data, options, gs);




Client Script



function ($scope, $rootScope, $timeout, spUtil, $location, $window, nowAttachmentHandler) {


$scope.mandatory = [];


$scope.data.show_sql = false;


$scope.saveButtonSuffix = spUtil.getAccelerator('s');


$scope.adminMenu = {


encodedPageUrl: encodeURIComponent($location.url()),


getClientScriptCount: function() {


var count = 0;


if ($scope.data.f.client_script) {


count += $scope.data.f.client_script.onChange.length;


count += $scope.data.f.client_script.onLoad.length;


count += $scope.data.f.client_script.onSubmit.length;


}


return count;


}


};




$scope.getUIActions = function(type) {


if ($scope.data.disableUIActions)


return [];


if (type) {


return $scope.data.f._ui_actions.filter(function(action) {


//We handle the primary action button separately.


return !action.primary && action['is_' + type];


});


} else {


return $scope.data.f._ui_actions;


}


}




$scope.getPrimaryAction = function() {


var primaryActions = $scope.data.f._ui_actions.filter(function(action) {


return action.primary;


});


return (primaryActions.length) ? primaryActions[0] : null;


}




$scope.getUIActionContextMenu = function(event) {


var menu = [];


if (event.ctrlKey)


return menu;




var contextActions = $scope.getUIActions('context');


contextActions.forEach(function(action) {


menu.push([action.name, function() {


$scope.triggerUIAction(action);


}]);


});




if (contextActions.length > 0)


menu.push(null);


menu.push([$scope.data.exportPDFMsg, function() {exportPDF("");}]);


menu.push([$scope.data.exportPDFLandMsg, function() {exportPDF('true');}]);




return menu;


}




function exportPDF(landscape) {


$window.open("/" + $scope.data.f.table + ".do?PDF&landscape=" + landscape + "&sys_id=" + $scope.data.sys_id + "&sysparm_view=" + $scope.data.f.view);


}




//trigger the primary UI Action on save (if there is one)


var deregister = $scope.$on('$sp.save', function() {


var primaryAction = $scope.getPrimaryAction();


if (primaryAction)


$scope.triggerUIAction(primaryAction);


});


$scope.$on('$destroy', function() {deregister()});




$scope.triggerUIAction = function(action) {


if ($scope.data.disableUIActions)


return;




if (g_form) {


$timeout(function() {


g_form.submit(action.action_name || action.sys_id);


});


}


}




$scope.$on("spModel.uiActionComplete", function(evt, response) {


var sysID = (response.isInsert) ? response.sys_id : $scope.data.sys_id;


loadForm($scope.data.table, sysID).then(constructResponseHandler(response));


});




function constructResponseHandler(response) {


return function() {


var message;


var eventName = "sp.form.record.updated";


if (response.isInsert) {


message = $scope.data.recordAddedMsg;


var search = $location.search();


search.sys_id = response.sys_id;


search.spa = 1;


$location.search(search).replace();


} else


message = $scope.data.updatedMsg;




$scope.data.hideRelatedLists = hideRelatedLists();


$scope.$emit(eventName, $scope.data.f._fields);


$rootScope.$broadcast(eventName, $scope.data.f._fields);


$scope.status = message;


spUtil.addTrivialMessage(message);


$timeout(clearStatus, 2000);


}


}




var ctrl = this;


// switch forms


var unregister = $scope.$on('$sp.list.click', onListClick);


$scope.$on("$destroy", function() {


unregister();


})




function onListClick(evt,arg) {


loadForm(arg.table, arg.sys_id);


}




function loadForm(table, sys_id){


var f = {};


$scope.data.table = f.table = table;


$scope.data.sys_id = f.sys_id = sys_id;


f.view = $scope.data.view;


return $scope.server.update().then(setupAttachmentHandler);


}




function openRelatedList(e, queryString){


// todo: Open this in a modal


$location.search(queryString);


e.preventDefault();


}




$scope.$on('spModel.fields.rendered', function() {


if (ctrl.panels)


ctrl.panels.removeClass('shift-out').addClass('shift-in');


});




var g_form;


$scope.$on('spModel.gForm.initialized', function(e, gFormInstance) {


if (gFormInstance.getTableName() == $scope.data.f.table)


g_form = gFormInstance;


});




// Show or hide related lists


$scope.$watch('data.f._related_lists', function(){


$scope.data.hideRelatedLists = hideRelatedLists();


}, true);




function hideRelatedLists() {


if (!$scope.data.f._related_lists)


return true;




if ($scope.options.hideRelatedLists == true)


return true;




if ($scope.data.sys_id == '-1')


return true;




// If all related lists are visible=false then hide


if ($scope.data.f._related_lists.length > 0) {


for (var i in $scope.data.f._related_lists) {


var list = $scope.data.f._related_lists[i];


if (list.visible) {


return false;


}


}


}


return true;


}




function clearStatus() {


$scope.status = "";


}




function setupAttachmentHandler(){


$scope.attachmentHandler = new nowAttachmentHandler(appendSuccess, appendError);




$timeout(function() {


var sizeLimit = 1024 * 1024 * 24; // 24MB


$scope.attachmentHandler.setParams($scope.data.table, $scope.data.f._attachmentGUID, sizeLimit);


});




$scope.$on('dialog.upload_too_large.show', function(e){


console.log($scope.data.largeAttachmentMsg);


spUtil.addErrorMessage($scope.data.largeAttachmentMsg);


});


}


setupAttachmentHandler();




function appendSuccess() {


spUtil.addTrivialMessage($scope.data.attachmentUploadSuccessMsg);


$scope.$broadcast("sp.attachments.update", $scope.data.f._attachmentGUID);


}




function appendError(error) {


$scope.errorMessages.push(error);


}


}


Hussain Kachwal
Mega Guru

Hello Prasa,



You may go through the below post, that helped me even:



Creating a Save button using UI Action




- Hussain K


Gurpreet07
Mega Sage

There could some error in the script. setAbortAction in before Business rule could also cause the problem. Try to save the form platform side and check if behavior is same ?   Open browser's console and look into errors in there.