- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2025 11:20 PM
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-13-2025 01:14 AM
Try below approach.
- Write an onChange client script on primary contact as below"
function onChange(control, oldValue, newValue, isLoading) { if (isLoading || newValue == '') { return; } // Call GlideAjax to check existing RITMs var ga = new GlideAjax('CheckUserRITMs'); ga.addParam('sysparm_name', 'hasExistingRITM'); ga.addParam('sysparm_user_id', newValue); ga.addParam('sysparm_catalog_item', g_form.getUniqueValue()); // catalog item sys_id ga.getXMLAnswer(function(response) { if (response == 'true') { g_form.showFieldMsg('primary_contact', 'This user has already requested this item.', 'error'); //check field name } else { g_form.hideFieldMsg('primary_contact', true); //check field name } }); }
- Write a New Client callable script include as below
Name: CheckUserRITMs
Accessible from: All application scopes
Client Callable: Truevar CheckUserRITMs = Class.create(); CheckUserRITMs.prototype = Object.extendsObject(AbstractAjaxProcessor, { hasExistingRITM: function() { var userId = this.getParameter('sysparm_user_id'); var catalogItemId = this.getParameter('sysparm_catalog_item'); if (!userId || !catalogItemId) { return 'false'; } var ritmGR = new GlideRecord('sc_req_item'); ritmGR.addQuery('cat_item', catalogItemId); ritmGR.addQuery('u_primary_contact', userId); // replace with actual field name if different ritmGR.query(); if (ritmGR.hasNext()) { return 'true'; } return 'false'; } });
This will show an error message at the field level and also user cannot submit even if they click the order button.
Accept the solution and mark as helpful if it does, to benefit future readers.
Regards,
Sumanth
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-13-2025 06:47 AM
it seems script include is not getting called and hence the 3 parameters are coming as empty
a) account variable refers to which table?
b) the onChange is running on which table? that variable refers to which table?
Client Script:
1) pass the catalog item sysId as hard-coded value
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
if (g_user.hasRole('agent_workspace_user')) {
alert('welcome');
var ga = new GlideAjax('BT_CSR_SSR_CatalogUtils');
ga.addParam('sysparm_name', 'hasExistingRITM');
ga.addParam('sysparm_user_id', newValue);
ga.addParam('sysparm_account', g_form.getValue('account'));
ga.addParam('sysparm_catalog_item', 'catalogItemSysId'); // catalog item sys_id
ga.getXMLAnswer(function(response) {
alert(response);
if (response == 'true') {
alert(true);
g_form.showFieldMsg('contact_name', 'This user has already requested this item.', 'error'); //check field name
} else {
alert(false);
g_form.showFieldMsg('contact_name', 'This user has already nottttt requested this item.', 'error'); //check field name
}
});
}
}
Script Include: it should be client callable
1) pass the correct sysparm name
var BT_CSR_SSR_CatalogUtils = Class.create();
BT_CSR_SSR_CatalogUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
hasExistingRITM: function() {
var checkingRITM;
var userId = this.getParameter('sysparm_user_id');
var catalogItemId = this.getParameter('sysparm_catalog_item');
var userAccount = this.getParameter('sysparm_account');
gs.info('agentIsh279 ' + userId);
gs.info('agentIsh280 ' + catalogItemId);
gs.info('agentIsh281 ' + userAccount);
var ritmGR = new GlideRecord('sc_req_item');
ritmGR.addEncodedQuery('cat_item.sys_id=' + catalogItemId + '^company.sys_id=' + userAccount + '^requested_for.sys_id=' + userId);
ritmGR.setLimit(1);
ritmGR.query();
gs.info('agentIsh292 ' + ritmGR.getRowCount());
return ritmGR.hasNext().toString();
},
type: 'BT_CSR_SSR_CatalogUtils'
});
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-13-2025 11:21 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-13-2025 11:36 PM
what came in row count in logs?
what came in alert? true or false?
any body has created custom query business rule on sc_req_item table which is restricting?
OOTB there is no query business rule
try to use setWorkflow(false) before query to disable that in GlideRecord
var ritmGR = new GlideRecord('sc_req_item');
ritmGR.addEncodedQuery('cat_item.sys_id=' + catalogItemId + '^company.sys_id=' + userAccount + '^requested_for.sys_id=' + userId);
ritmGR.setLimit(1);
ritmGR.setWorkflow(false); // to disable any query business rule
ritmGR.query();
gs.info('agentIsh292 ' + ritmGR.getRowCount());
return ritmGR.hasNext().toString();
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-14-2025 12:00 AM
1) rowCount I'm getting 0, there are 2records with same account, primary contact in th sc_req_item,
2) In the alert - false is returing
and I tried by setWorkFlow(false) still it is the same
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-14-2025 12:06 AM
are you running with admin user?
share the sc_req_item.LIST filter screenshot as per the values you got from log
In this case it should work fine then, I don't see any other issue
If my response helped please mark it correct and close the thread so that it benefits future readers.
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-14-2025 11:17 PM