- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-28-2022 07:29 AM
I'm developing a script that determines the value of a field in the catalog client script and makes the submission an error.
I would like to pass a parameter to the script include so that the existing record and the record to be created do not have the same value.
However, the client script "getXMLAnswer" did not return the return value to "test_response".
does anyone know how?
In the script include, judge based on the argument of "param_1" and return "true" or "false".
function onSubmit() {
var ga = new GlideAjax('test_script');
ga.addParam('sysparm_name', 'test');
//Pass the status as an argument to see if it is duplicated
ga.addParam('param_1', "status");
//"true" if the status is duplicated
//I expect it to return "false" if it's not a duplicate.
var test_response = ga.getXMLAnswer(callback);
//I want to determine and process the return value of "getXMLAnswer"! !
if (test_response == false) {
alert(response);
}
}
function callback(response) {
alert(response);
return response;
}
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-29-2022 09:55 AM
As you are using getXMLWait() on portal which is no longer supported, you might have received an error message in your browser console. As for getXMLAnswer() or getXML() both are asynchronous in nature so they cannot validate/stop submission using onSubmit().
I found a knowledge article How to do async validation in an onsubmit client script , which might help in resolving your requirement. I tried to implement it, and it was working fine.
What you can do is create 2 onSubmit() Catalog Client Scripts one for Desktop and second for Mobile/Service Portal to tackle your requirement.
Desktop
function onSubmit() {
var ga = new GlideAjax('test_script');
ga.addParam('sysparm_name', 'test');
ga.getXMLWait();
var test_response = ga.getAnswer();
if (test_response.toString() == 'false') {
g_form.addInfoMessage('Response: ' + answer);
g_form.addInfoMessage('Response Type: ' + typeof answer);
return false;
}
}
See the image for reference.
Mobile / Service Portal
function onSubmit() {
if (g_scratchpad.isFormValid) {
return true;
}
var actionName = g_form.getActionName();
var ga = new GlideAjax('test_script');
ga.addParam('sysparm_name', 'test');
ga.getXML(function(response) {
var answer = response.responseXML.documentElement.getAttribute('answer');
g_form.addInfoMessage('Response: ' + answer);
g_form.addInfoMessage('Response Type: ' + typeof answer);
if (answer.toString() == 'false') {
g_form.addErrorMessage('Cannot Submit');
return false;
} else {
g_scratchpad.isFormValid = true;
g_form.submit(actionName);
}
});
return false;
}
See the image for reference.
Hopefully, this will help you resolve your query.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-30-2022 04:17 AM
that saved my day!
Thanks loads😁
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-30-2022 04:39 AM
Glad to know it helped!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-28-2022 07:39 PM
Hi,
Try this script -
function onSubmit() {
var ga = new GlideAjax('test_script');
ga.addParam('sysparm_name', 'test');
//Pass the status as an argument to see if it is duplicated
ga.addParam('sysparm_1', "status");
ga.getXMLAnswer(callback);
function callback(answer) {
if(answer==false){
alert(answer);
}
}
}
Thanks,
Sagar Pagar
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-28-2022 07:51 PM
Thank you for answering!
It certainly worked!
But I can't seem to get the value back in "onSubmit()" which is my purpose.
function onSubmit() {
var ga = new GlideAjax('test_script');
ga.addParam('sysparm_name', 'test');
//Pass the status as an argument to see if it is duplicated
ga.addParam('sysparm_1', "status");
var tmp_msg = ga.getXMLAnswer(callback);
alert(tmp_msg); //←The purpose is to get the return value of "function callback(answer) "
//This doesn't work. . . . .
function callback(answer) {
if(answer==false){
alert(answer);
return "test";
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-29-2022 12:40 AM
Hi,
I would suggest to write your logic inside the callback function and add alert as well.
function onSubmit() {
var ga = new GlideAjax('test_script');
ga.addParam('sysparm_name', 'test');
//Pass the status as an argument to see if it is duplicated
ga.addParam('sysparm_1', "status");
ga.getXMLAnswer(callback);
function callback(answer) {
if(answer==false){
alert("add your message here!");
// add your logic here
}
}
}
Feel free to mark helpful and correct!
Thanks,
Sagar Pagar