Restrict in RITM level

Chaithu3
Tera Contributor

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 @Ankur Bawiskar @Allen Andreas @Dan H @Mark Roethof 

 

Thanks in advance

 

 

1 ACCEPTED SOLUTION

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

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

View solution in original post

16 REPLIES 16

Ankur Bawiskar
Tera Patron
Tera Patron

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

How to limit the total quantity of a shopping cart for a specific service catalog item in New York v...

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

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

Hi @Ankur Bawiskar ,

Im pasting the code below and explain the issue :

script include :

find_real_file.png

client script :(on submit)

find_real_file.png

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.

 

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

How to limit the total quantity of a shopping cart for a specific service catalog item in New York v...

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

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

Hi @Ankur Bawiskar ,

 

I didnt get answer from the above.

Please help me changing the code above.

Please.

 

Thanks in advance