Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Refresh an UI Page with client script

Jeff60
Kilo Expert

Hello everyone.

My question is about UI Page on a Request Item or Task
I would like to refresh a Variable type "UI Page" as soon as there is a change in the value of a "Select box" type variable.

find_real_file.png

But i don't know how to do it properly.

Thanks in advance for your help 😉

11 REPLIES 11

Voona Rohila
Mega Patron
Mega Patron

Hi Jeff,

 

You may find the below thread helpful.

https://community.servicenow.com/community?id=community_question&sys_id=adf44b2ddbd8dbc01dcaf3231f96193e


Mark it helpful if this helps you to understand. Accept solution if this give you the answer you're looking for
Kind Regards,
Rohila V
2022-25 ServiceNow Community MVP

Jeff60
Kilo Expert

Hello @rohila 

Thanks for your answer but this is not my goal. 

My UI Page doesn't contains any function.

I would like to only refresh my UI Page when the value of the varibale change.

find_real_file.png

HTML of my UI PAGE :

<?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:evaluate var="jvar_gr" object="true">
            var ag = current.variables.dmfi_finance_ag_id.getDisplayValue();
            var gr = new GlideRecord('u_financial_activity');
            gr.addQuery('u_activity_group_id', ag);
            gr.query();
			gr;
			ag;
</g:evaluate>

        <table width="100%" borde="1">
            <tr class="header">
                <td colspan="4">Activity Code for ${ag}</td>
            </tr>
			<tr class="header">
                <td>ID</td>
				<td>Name</td>
				<td>CPN</td>
				<td>CPG</td>
            </tr>
            <j:while test="${gr.next()}">
                <tr>
                    <td> ${gr.getValue('u_activity_id')} </td>
                    <td> ${gr.getValue('u_activity_name')} </td>
					<td> ${gr.getValue('u_cpn')} </td>
					<td> ${gr.getValue('u_cpg')} </td>
                </tr>
            </j:while>
        </table>
    </j:jelly>

I think the way is to create a client script (On Change) :

find_real_file.png

 

Thanks for your time 😉

AnirudhKumar
Mega Sage

Jeff, it's not possible to refresh the HTML.

I have a trick for you that I always use. 

 

Just keep a <div> tag in your html.

Give it an id="myTable"

In the client script, call a function constructTable();

This function will have GlideAjax (as you have some server code in g:evaluate).

In your script include, construct your HTML table body( all the tags as string)

Then return that HTML string to the client script.

 

Finally. insert the HTML string into the <div>

$j("#myTable").html(yourHTMLVariable);

 

In your client script, simply calling this function, will force the system to reconstruct the table every time.

 

Edit : Updated the code to html() instead of text()

Thanks @AnirudhKumar 

I understand your process, however I am a bit lost in the code to produce.

I am not against a copy paste of the code that you have already used for this type of need.

Because I am facing a blank sheet of paper 😉

Currently,  i have this :

UI Page

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:evaluate var="jvar_gr" object="true">
		var ag = current.variables.dmfi_finance_ag_id.getDisplayValue();
		var gr = new GlideRecord('u_financial_activity');
		gr.addQuery('u_activity_group_id', ag);
		gr.query();
		gr;
		ag;
	</g:evaluate>

	<div id="TableAC">
		<table width="100%" borde="1">
			<tr class="header">
				<td colspan="4">Activity Code for ${ag}</td>
			</tr>
			<tr class="header">
				<td>ID</td>
				<td>Name</td>
				<td>CPN</td>
				<td>CPG</td>
			</tr>
			<j:while test="${gr.next()}">
				<tr>
					<td> ${gr.getValue('u_activity_id')} </td>
					<td> ${gr.getValue('u_activity_name')} </td>
					<td> ${gr.getValue('u_cpn')} </td>
					<td> ${gr.getValue('u_cpg')} </td>
				</tr>
			</j:while>
		</table>
	</div>
</j:jelly>

Client script  :

function constructTable() {

	???
	
}

Processing script  :

 

 

Catalog Client Scripts

Script :

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading) {
        return;
    }

    $j("#TableAC").html(activity_code_linked);

}

Thanks in advance for your help.