How to redirect a User to a custom page when a particular catalog item is ordered instead of default

Ankur Khare
Tera Contributor

Hi Team,

 

We have a requirement wherein there is a particular catalog item for which if a person clicks in Order Now button it should route to a custom page which we designed instead of generic com.glideapp.servicecatalog_checkout_view_v2.do?v=1&sysparm_sys_id=c36602fa2be166103d13f0845e91bf02&sysparm_new_request=true&sysparm_view=ess&sysparm_catalog=e0d08b13c3330100c8b837659bba8fb4&sysparm_catalog_view=catalog_Service_Catalog

 

We have written onSubmit client script but its still routing to the above view.

Can you tell how to achieve this?

1 ACCEPTED SOLUTION

RobCook86
Tera Expert

You need to set the return action to false when you click order now. If its just for this one item change your on submit client script to the following: 

 

window.location.href = '/sp?id=pd_bar'

return false;

 

if not you can place a check in there to list the item you are using like this: 

 

function onSubmit() {
var itemSysId = g_form.getUniqueValue();

// Optional: check for specific item sys_id if reused
if (itemSysId == 'your cat item') {
window.location.href =  '/sp?id=pd_bar'
return false; // Prevent default submission
}

return true; // Let others pass
}

View solution in original post

15 REPLIES 15

Ankur Khare
Tera Contributor

@Ankur Bawiskar 

Actually later on I made further changes and it was fixed via below script

 

function onSubmit() {
var ga = new GlideAjax('GetLastRequestForUser');
ga.addParam('sysparm_name', 'getLatestRequestForUser');
ga.addParam('sysparm_cat_item', 'ff7088663ba5ae50a8df3541a3e45a89');

var requestId = '';

// Polling with setInterval (you can adjust time interval)
var interval = setInterval(function() {

ga.getXMLAnswer(function(response) {
requestId = response;
if (requestId) {
parent.onbeforeunload = null;
var targetPage = '/sp?id=pd_bar&table=sc_request&sys_id=' + requestId;
parent.location = targetPage;
clearInterval(interval); // Stop the polling once redirected
}
 
});
}, 4000); // Poll every 500 ms
}

@Ankur Khare 

can you explain what that code does?

Does it work in native and portal both?

It would be helpful to other members

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

Yes it works for both native and Portal.

Earlier I was using window instead of Parent and it was not routing to the custom Page i created instead it was routing to Checkoutform which OOB for the catalog item. I wanted to route this to my custom page in the portal. With the help of parent it started working

 

 

  • When you do window.location = targetPage; it tries to redirect only the iframe itself — that means only the inner frame changes URL.

  • However, if you want to redirect the whole portal page (the top-level or parent window), you must assign to parent.location

 

@Ankur Khare 

you are doing a poll every particular seconds?

Is it that you are waiting for the ajax response to come?

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

Ankur Khare
Tera Contributor

@Ankur Bawiskar Yes I am waiting because OOB when we click on Order Now on catalog item it routes to Check out page as below .

AnkurKhare_0-1748495300475.png

 

Therefore in order to route to my custom page I have given wait time because it skips the above checkout page and at backend the request is not created and directly routes to my custom page.

Therefore I am holding it for sometime so that request gets created and then it routes to custom page