UI Action Prompt for User input

Sam Motley
Giga Guru

Hi All, 

We've been asked to create a ui action to close duplicate tickets in the incident table but when closed the advisor should be prompted to input the parent request ticket number if it's empty. 

I've looked around and found various ways to do this but was hoping to seek advice here if someone has had something like this asked from their team? 

I've tried using GlideModalV3 but honestly the documentation leaves much to be desired 

 

Thanks all 

1 ACCEPTED SOLUTION

@Sam Motley 

so your final code will be like this

HTML:

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    <g:ui_form>
        
        <g:evaluate var="jvar_sysid" expression="RP.getWindowProperties().get('sys_id')"/>
        <input type="hidden" id="cancelled" name="cancelled" value="false"/>
        <input type="hidden" id="incidentSysID" name="incidentSysID" value="${jvar_sysid}"/>
        <table>
            <tr>
                <td id="label.parent request" class="label" nowrap="true" height="23px" type="string" choice="0"><span id="status." class="mandatory label_description" mandatory="true" oclass="mandatory">$[SP]</span><label for="parent request" onclick="" dir="">Parent Ticket:</label></td>
                <td nowrap="true"><g:ui_reference name="parent_request" id="parent request" table="incident"/></td></tr>
        </table> 
        <table width="100%" cellpadding="0" cellspacing="0">
            <tr><td align="left" nowrap="true"><br /><g:dialog_buttons_ok_cancel ok="return validateForm();" cancel="return onCancel();"/></td></tr>
        </table>
    </g:ui_form>
</j:jelly>

Client Script:

function onCancel() {
	var c = gel('cancelled');
	c.value = "true";
	GlideDialogWindow.get().destroy();
	return false;
}

function validateForm() {
	alert('inside validateform');
	if (gel('parent_request').value == '') {
		alert("${JS:gs.getMessage('Please input Parent Ticket')}");
		return false;
	}
	else {
		var sysId = gel('incidentSysID').value;
		var parentValue = gel('parent_request').value;
		var app = new GlideRecord("incident");
		if(app.get(sysId)){
			app.parent_request = parentValue;
			app.incident_state = '7';
			app.work_notes = "Closed as Duplicate";
			app.close_code = "Duplicate Call";
			app.close_notes = "Closed as Duplicate";
			app.state = '7';
			app.update();
		}
		window.open('/incident.do?sys_id='+sysId,'_self');
	}
}

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

32 REPLIES 32

Mohith Devatte
Tera Sage
Tera Sage

hello @Sam Motley ,

your exact requirement is documented here try this script which uses glide dialog window 

https://servicenowguru.com/system-ui/glidedialogwindow-advanced-popups-ui-pages/

Hope this helps 

Please mark my answer correct if this helps you

Hi Monhith, 

Thanks for your reply. 

I've seen this previously, if this is the best method i'll see if i can get it working. 

Thank you 

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

you can use UI page based approach

There are numerous links available

what did you start with and where are you stuck?

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi Ankur, 

I've tried a ui action that applies fixed values but doesn't prompt for parent request yet.

I created a new ui page and then set this code for my ui action....

var gm = new GlideModal('Add Parent Reference');
//Sets the dialog title
gm.setTitle('Show title'); 
gm.setPreference('table', 'incident');             
gm.setPreference('parent_request', 'value');            

//Opens the dialog
gm.render();

ui page details: 

 

html: 

<g:ui_form>
<input type="hidden" id="cancelled" name="cancelled" value="false"/>
<input type="hidden" id="incidentSysID" name="incidentSysID" value="$"/>
<table>
 <tr>
<td id="label.parent request" class="label" nowrap="true" height="23px" type="string" choice="0"><span id="status." class="mandatory label_description" mandatory="true" oclass="mandatory">$[SP]</span><label for="parent request" onclick="" dir="">Parent Ticket:</label></td>
<td nowrap="true"><g:ui_reference name="location" id="parent request" table="incident"/></td></tr>
</table> 
<table width="100%" cellpadding="0" cellspacing="0">
 <tr><td align="left" nowrap="true"><br /><g:dialog_buttons_ok_cancel ok="return validateForm();" cancel="return onCancel();"/></td></tr>
</table>
</g:ui_form>

 

client script: 

function onCancel() {
 var c = gel('cancelled');
 c.value = "true";
 GlideDialogWindow.get().destroy();
 return false;
}
function validateForm() {
 if (gel('parent_request').value == '') {
alert("${JS:gs.getMessage('Please input Parent Ticket')}");
return false;
 }
    else {
 return true;
}
 }

When i test this it does show the correct box and i am able see the box and it does search the incident table 

i'm not overly sure what i need to put in for processing script 

Thank you