- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-20-2022 11:33 PM
Hello Experts,
I have a catalog item, When i submit a request ten it should create a user record in a custom table.
the requirement is not to create a duplicate user in that custom table, So i have written a script that should throw an error message comparing the first name and the last name from table and catalog item.
Now i need help about after approval of RITM then the record insert in the custom table, So different users should not able to create RITM's for same user.
EX : i have submitted a request for a user through the catalog item and it is ready for approval, Then again my colleauge/manager trying to submit a request for the same user. Then it should get restrict saying that an request has been already raised for this user.
Please help ASAP.
Looping
Thanks in advance
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-22-2022 09:08 AM
Hi,
yes in script include function add this query
So here is your final code
Script Include:
var check_for_users = Class.create();
check_for_users.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getUserDetails: function() {
var firstName = this.getParameter('sysparm_old_first_name');
var lastName = this.getParameter('sysparm_old_last_name');
var catItemSysId = this.getParameter('sysparm_catItemSysId');
var che = "";
var oldUser = new GlideRecord('u_contractors_onboarding');
oldUser.addQuery('u_first_name', firstName);
oldUser.addQuery('u_last_name', lastName);
oldUser.query();
if (oldUser.hasNext())
che = "exist";
var found = this.checkExistingRITM(firstName,lastName,catItemSysId);
if(che == 'exist' || found == 'exist'){
return 'exist';
}
return '';
},
checkExistingRITM: function(firstName,lastName,catItemSysId) {
var found = 'not exist';
var ritm = new GlideRecord('sc_req_item');
ritm.addQuery('cat_item', catItemSysId);
ritm.addEncodedQuery('stateIN-5,1,2'); // work in progress or open or Pending
ritm.query();
while(ritm.next()){
if(ritm.variables.u_first_name == firstName && ritm.variables.u_last_name == lastName){
found = 'exist';
break;
}
}
return found;
},
type: 'check_for_users'
});
onSubmit:
function onSubmit() {
if (!g_form.ajaxComplete) {
ajaxCall();
return false;
}
function ajaxCall(){
//Type appropriate comment here, and begin script below
var gr = new GlideAjax("check_for_users");
gr.addParam("sysparm_name", "getUserDetails");
gr.addParam("sysparm_old_first_name", g_form.getValue('u_first_name'));
gr.addParam("sysparm_old_last_name", g_form.getValue('u_last_name'));
gr.addParam("sysparm_catItemSysId", g_form.getUniqueValue());
gr.getXML(ajaxResponse);
function ajaxResponse(answers) {
var answer = answers.responseXML.documentElement.getAttribute("answer");
if (answer == 'exist') {
g_form.addErrorMessage('The user is already available in Contractor onboarding table');
return false;
} else {
g_form.ajaxComplete = true;
g_form.submit();
}
}
}
}
Please mark my response as correct and helpful to close the thread
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-20-2022 11:58 PM
Hi,
you can use onSubmit with GlideAjax
But remember these points:
1) Asynchronous GlideAjax won't work as by the time ajax function returns the value your form will get submitted
2) Synchronous GlideAjax is not allowed in portal and scoped application
Refer this link
Refer these links for workaround/solution on how to use Synchronous GlideAjax in onSubmit
How To: Async GlideAjax in an onSubmit script
Asynchronous onSubmit Catalog/Client Scripts in ServiceNow
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-21-2022 12:21 AM
Hi
Im pasting the code below and explain the issue :
script include :
client script :(on submit)
with the above it is showing me the alert and it is able to submit.
Requirements :
1. it should not submit when the user is already present in the table.
2. we should not submit 2 requests on the same user.
Ex : when i submit a request for a user to add in a custom table then he will get added into the table after approval. if i submit a request for a user to that table and without knowledge if any other of my colleauge/manager were trying to add the same user to the table through catalog item, then it throw an error saying "There is alrerady a request raised for this user".
Thanks in advance.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-21-2022 12:26 AM
Hi,
I think you didn't check my above point
remember these points:
1) Asynchronous GlideAjax won't work as by the time ajax function returns the value your form will get submitted
2) Synchronous GlideAjax is not allowed in portal and scoped application
Refer this link
Refer these links for workaround/solution on how to use Synchronous GlideAjax in onSubmit
How To: Async GlideAjax in an onSubmit script
Asynchronous onSubmit Catalog/Client Scripts in ServiceNow
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-21-2022 12:35 AM
Hi
I didnt get answer from the above.
Please help me changing the code above.
Please.
Thanks in advance