How to create a link in popup using client script in Service Portal

Hiranmayee Moha
Tera Expert

Hi @ Ankur Bawaskar!

If the user selects 'Yes' from choice list of a catalog item, a popup will show with a link that says, Please raise a request to "XYZ Software".

 

The code is attached below:

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
 
   var yes = g_form.getValue('variable');
 
 if (yes) {
    var Url = 'link';
 
g_form.addInfoMessage("Please raise a request to 'xyz Software' in the catalog: <a href='" + Url + "'</a>");
 
    }
}
 
TIA
Hiranmayee Mohanta

 

4 ACCEPTED SOLUTIONS

Ankur Bawiskar
Tera Patron
Tera Patron

@Hiranmayee Moha 

something like this will show link in portal

Ensure you give correct URL

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var yes = g_form.getValue('variableName'); // give the variable name here
    if (yes == 'yes') { // give the value you want to compare
        var urlString = '<p><a class="web" target="_blank" href="' + "/esc" + '">' + "Click Here" + '</a></p>';
        g_form.addInfoMessage("Please raise a request to 'xyz Software' in the catalog:" + urlString);
    }
}

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

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

View solution in original post

SumanthDosapati
Mega Sage
Mega Sage

@Hiranmayee Moha 

Try below approach

var link = '<a href="google.com">URL</a>';
var message = 'Please raise a request to xyz software in the catalog' + ' ' + link + ' ';
gs.addInfoMessage(message);

Accept the solution and mark as helpful if it does, to benefit future readers.
Regards,
Sumanth

View solution in original post

@Hiranmayee Moha 

My mistake, gs wont work in client scripts.

use g_form.addInfoMessage.

 

 

View solution in original post

Hi @Ankur Bawiskar !

 

It worked. I had done a small mistake.

 

Thanks again

Hiranmayee Mohanta

View solution in original post

18 REPLIES 18

Hi @SumanthDosapati !

Thanks for your prompt and proactive response. The code you shared is working as expected; however, the environment doesn’t seem to be functioning properly in that browser.

 

Please find the attached code below.

 

var req = g_form.getValue('variable Name');
    if (req == '1') { 
        var urlString = '<p><a class="web" target="_blank" href="' + "/esc" + '">' + "google.com" + '</a></p>';
       
 g_form.addInfoMessage("Please raise a request to 'XYZ Software' in the catalog:" + urlString);

    var fields = g_form.getEditableFields();
    for (var x = 0; x < fields.length; x++) {
    g_form.clearValue(fields[x]);
    }
}
}
 
Thanks

 

 

 

what do you mean by 'doesn’t seem to be functioning properly in that browser.'

Hi, after resetting the catalog item’s fields to null, the instance becomes unresponsive in that browser for a few minutes. During this time, other modules and applications also fail to open.

Hi @SumanthDosapati !

The code below is working as expected. The instance remains responsive, and other modules and applications are loading and functioning properly.

 

var fieldsToClear = ['field1', 'field2', 'field3']; // replace with actual variable names
fieldsToClear.forEach(function(field) {
g_form.clearValue(field);
});

 

Likely Cause:

Clearing all editable fields in a single operation, especially in forms with many fields or dependent client scripts, can cause the browser to:

  • Re-trigger multiple onChange client scripts.

  • Overload the client-side processing.

  • Introduce rendering delays, especially if there are UI policies, catalog client scripts, or dependent reference fields that react to those changes.

This leads to high client-side resource usage, making the instance appear unresponsive.

 

Thanks again for your help!

 

Regards

Hiranmayee Mohanta

SumanthDosapati
Mega Sage
Mega Sage

@Hiranmayee Moha 

Try below approach

var link = '<a href="google.com">URL</a>';
var message = 'Please raise a request to xyz software in the catalog' + ' ' + link + ' ';
gs.addInfoMessage(message);

Accept the solution and mark as helpful if it does, to benefit future readers.
Regards,
Sumanth