Autopopulate variable fields when button is clicked on SOW

Rairai31
Giga Guru

Hi,

I have a requirement to autopopulate variable fields when 'Create request' button is clicked on SOW. Once button is clicked, a catalog item will open on a new tab. The expectation is based from incident details, it will populate the variable item on the catalog (e.g. Caller - Requested for, Short Description - Short description of your request....)

 

Here's the script for my UI Action:

function createRequest() {
    var confirmation = confirm("Confirm Action: Convert Incident to Service Request.");
 
    if (!confirmation) {
        return;
    }
 
    var requested_for = g_form.getValue('caller_id');
    var shortDesc = encodeURIComponent(g_form.getValue('short_description'));
    var desc = encodeURIComponent(g_form.getValue('description'));
    var incidentSysId = g_form.getUniqueValue();
 
    var redirectUrl = '/employeehub?id=sc_cat_item&sys_id=45c51348dbe76d10867d9517f39619e9' +
                      '&sysparm_caller=' + requested_for +
                      '&sysparm_shortDesc=' + shortDesc +
                      '&sysparm_desc=' + desc +
                      '&sysparm_inc=' + incidentSysId;
 
    g_navigation.open(redirectUrl, "_blank");
}

 

 

Here's my catalog client script to populate the variable items:

 

function getParameterValue(name) {
    var queryString = top.location.href.split('?')[1];
    if (!queryString) return "";
    
    var params = new URLSearchParams(queryString);
    var value = params.get(name);
    return value ? decodeURIComponent(value) : "";
}
 
function onLoad() {
    g_form.setValue("requested_for", getParameterValue("sysparm_caller"));
    g_form.setValue("short_description_of_your_request", getParameterValue("sysparm_shortDesc"));
    g_form.setValue("additional_information", getParameterValue("sysparm_desc"));
	g_form.setValue("incident_number", getParameterValue("sysparm_inc"));
}

 

 

Scripts are working when clicking the button on native view but not on SOW. Sharing as well the script on declarative action assignment.

 

function onClick() {

    var incidentSysId = g_form.getUniqueValue();
    var caller = g_form.getValue('caller_id');
    var shortDes = g_form.getValue('short_description');
    var desc = g_form.getValue('description');

    var params = {};
    params.sysparm_parent_table = "incident";
    params.sysparm_parent_sys_id = incidentSysId;
    params.sysparm_caller = caller;
    params.sysparm_shortDesc = shortDes;
    params.sysparm_desc = desc;
	params.sysparm_inc = incidentSysId;

    // Open the catalog item
    g_service_catalog.openCatalogItem('sc_cat_item', '45c51348dbe76d10867d9517f39619e9', '-1', params);
}

 

Does autopopulation of variable item is supported on SOW? Thank you.

2 ACCEPTED SOLUTIONS

Ankur Bawiskar
Tera Patron
Tera Patron

@Rairai31 

the way how parameters are passed and grabbed is different for native and SOW/Workspace.

check my blog on how to handle this

1) check if it's native or sow and then handle the logic to grab/fetch the values.

Invoke record producer within Configurable workspace, send parameter & fetch the value 

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

updated client script 

 

function getParameterValue(name) {

    var url = decodeURIComponent(top.location.href); //Get the URL and decode it
    if (url.indexOf('extra-params') > -1) { //workspace
        var workspaceParams = url.split('extra-params/')[1]; //Split off the url on Extra params
        var allParams = workspaceParams.split('/'); //The params are split on slashes '/'

        //Search for the parameter requested
        for (var i = 0; i < allParams.length; i++) {
            if (allParams[i] == name) {
                return allParams[i + 1];
            }
        }
    } else { //native
var url = new URL(self.location.href);
        var value = url.searchParams.get(name);
        return value ? decodeURIComponent(value) : "";
    }
}
 
function onLoad() {
    g_form.setValue("requested_for", getParameterValue("sysparm_caller"));
    g_form.setValue("short_description_of_your_request", getParameterValue("sysparm_shortDesc"));
    g_form.setValue("additional_information", getParameterValue("sysparm_desc"));
	g_form.setValue("incident_number", getParameterValue("sysparm_inc"));
}

View solution in original post

13 REPLIES 13

Ankur Bawiskar
Tera Patron
Tera Patron

@Rairai31 

the way how parameters are passed and grabbed is different for native and SOW/Workspace.

check my blog on how to handle this

1) check if it's native or sow and then handle the logic to grab/fetch the values.

Invoke record producer within Configurable workspace, send parameter & fetch the value 

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

Hi @Ankur Bawiskar, I have checked and updated my script but similar result. It is working on default view, variable items are populated but not on SOW. Thank you

@Rairai31 

it worked fine for me when I have written the blog

did you try adding alert and see what came in URL for SOW?

that will help you to determine and perform string manipulation.

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

Rairai31
Giga Guru

Thank you very much @Ankur Bawiskar and @Pranesh072 for your help. You are both amazing!