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

Hi @Sam Motley 

update as this

UI Action:

function commentsDialog() {
	var gm = new GlideModal('Add Parent Reference');
	gm.setTitle('Show title');
	gm.setPreference('sys_id', g_form.getUniqueValue());
	gm.render();
}

UI Page: No processing script required

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().sysid"/>
		<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() {
	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.update();
		}
		window.open('/incident.do?sys_id='+sysId);
	}
}

Regards
Ankur

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

Hi @Ankur Bawiskar , 

Thanks for posting the above. I've tried your suggestion however on clicking ok it opens a window with error "No Record Found" url was incident.do?sys_id=*Undefined(RP.getWindowProperties().sysid) 

The parent request field still did not populate either 😞 

Thank you for your help so far i really appreciate it as i'm just about ready to throw my laptop out the window 🙂 

 

 

Hi,

try to debug and check what came in alert for client script

are you sure the field name parent_request is correct on incident table

are you saying you want to update parent_incident field?

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;
        
        alert('sysId' + sysId);
        alert('parentValue' + parentValue);
        
        var app = new GlideRecord("incident");
        if(app.get(sysId)){
            app.parent_incident = parentValue;
            app.update();
        }
        window.open('/incident.do?sys_id='+sysId);
    }
}

Regards
Ankur

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

Hi @Ankur Bawiskar 

I'll try this today thank you.

There are 2 fields for parent one for request and other for incident depending on ticket type currently i'm trying to get it to work for request form with the idea to duplicate and amend for incident form 

find_real_file.png

find_real_file.png

@Sam Motley 

Logic and script I shared will work fine.

Just ensure you are debugging it correctly and enhance your logic.

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards
Ankur

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