How to hide 'Close task' UI action on SC tasks when state is changed to closed rejected

sath
Tera Expert

Hi,

When an user sets the state to closed rejected on first catalog task, an alert will be triggered asking them to click on save button instead of close task button(it sets the state to closed complete). Still some users are clicking on close task button after setting the state to closed rejected and the state is getting closed complete instead of closed rejected.

So, we have decided to hide 'close task' UI action on first catalog task. I have created a UI policy with the below condition and selected isolate script to false.

function onCondition() {
$$('#close_sc_task')[0].hide();
}

It's working as per the requirement, but previewing the reference records from SC task form (like request item, requested for, item) is not working.

I have tried inserting the condition within UI action condition field, but it works only during onLoad. I need this functionality to work during onChange. Please assist.

1 ACCEPTED SOLUTION

Hi @sath ,

 

I am not sure what logic you are applying to check whether that's a first task or not. I applied my own logic to determine it, if it is the first one to be closed and all the remaining SC Tasks of that Requested Item are in the open state then I am considering it as an open Task.

 

In order to achieve this I am using a Display Business Rule and declared a scratchpad variable. Please find the code below.

 

Display BR Code:-

 

(function executeRule(current, previous /*null when async*/) {
// Add your code here
var notFirst;
var scTaskRec = new GlideRecord('sc_task');
scTaskRec.addQuery('request_item',current.request_item);
scTaskRec.query();
while(scTaskRec.next())
{
if(scTaskRec.state == '3' || scTaskRec.state == '4' || scTaskRec.state == '7') // if any sc task is closed
{
notFirst = 'yes';
}
}
if(notFirst == 'yes')
{
g_scratchpad.FirstTask = 'no';
}
else
{
g_scratchpad.FirstTask = 'yes';
}
})(current, previous);
MallidiSuma_0-1684256994693.png

 

 
Close Task UI action Code:-
function closeTask() {
    var state_val = g_form.getValue('state');
 
    if (state_val == '4' && g_scratchpad.FirstTask == 'yes') { // 4 is the backend value of Closed Incomplete
        alert("check the state");
    }
 
else {
        g_form.setValue('state', 3);
        //Call the UI Action and skip the 'onclick' function
        gsftSubmit(null, g_form.getFormElement(), 'close_sc_task');
    }
}
//Code that runs without 'onclick'
//Ensure call to server-side function with no browser errors
if (typeof window == 'undefined')
    updateTask();
 
function updateTask() {
    current.state = 3;
    current.update();
}
 
In short, you can achieve this by using Display Business Rule.
 
Please mark my answer as helpful,  if it helps!!
 
Thanks & Regards,
Suma.
 

 

 

View solution in original post

14 REPLIES 14

Hi @sath ,

 

You already applied the logic to hide the Button based on the field change. If it is not working then you can go with a workaround of aborting the action.

Hi @Mallidi Suma I have the logic to check if its first catalog task, but couldn't hide the button. Tried to modify the UI action conditions field, but its not working. How do I abort the action?

Othman Arkab
Tera Expert

Hi @sath 

You can try to uncheck isolate script field on your UI policy 

Hi @Othman Arkab , I have unchecked isolate script already, its not allowing to preview records. If I check isolate script, it's not working.

try to create script include to check if the selected scTask (current) is the first one created if so you can call you hide function 
Something like this:

 

script include :

 

var checkiffirst = Class.create();
checkiffirst.prototype = Object.extendsObject(AbstractAjaxProcessor, {
process: function() {
var scReqItem = this.getParameter("sysparm_scReqItem");
var scTask = this.getParameter("sysparm_scTask");
var gr = new GlideRecord("sc_task");
gr.addQuery("requested_item", scReqItem);
gr.orderByDesc('sys_created_on');
gr.query();
if (gr.next()) {
if(gr.sys_id == scTask)
return true;
else
return false;
}


},
type: 'checkiffirst'
});

 

ui policy :

 

function onCondition() {

var ga = new GlideAjax('checkiffirst');

ga.addParam('sysparm_scReqItem', g_form.getValue('request_item'));

ga.addParam('sysparm_scTask', g_form.getUniqueValue());

ga.getXML(resp);

function resp(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if(answe == 'true')
$$('#close_sc_task')[0].hide(); or show

}

}