How to use synchronous call on service portal.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-07-2017 06:47 AM
Hi Team,
I want to do date validation. Here getXMLWait() is not working on service portal. Any other alternative solution for this. Because i can not use asynchronous glide ajax, it will not wait for the service response. I am keeping my code below. I am sure that my script include is working good.
function onSubmit() {
var startDate = g_form.getValue("start");
var endDate = g_form.getValue("end");
if(startDate != undefined && startDate != '' && endDate != undefined && endDate != ''){
var validation = new GlideAjax('OLA_DongleDateValidation');
validation.addParam('sysparm_name','ola_Startvalidation');
validation.addParam('sysparm_Start',startDate );
validation.addParam('sysparm_End',endDate );
//validation.getXMLWait(); not working in portal
//var answer = validation.getAnswer();
validation.getXML(HelloWorldParse);
var valid = new GlideAjax('OLA_DongleDateValidation');
valid.addParam('sysparm_name','ola_currentdatevalidation');
valid.addParam('sysparm_Start',startDate);
valid.addParam('sysparm_End',endDate );
valid.getXMLWait();
var answer1 = valid.getAnswer();
alert(answer1);
valid.getXML(HelloWorld);
}
function HelloWorldParse(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if(answer = false){
alert("End date should not be before start date");
return answer;
}
}
function HelloWorld(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
if(answer = false)
{
alert("Start date should not be a past date");
return answer;
}
}
synchronous
- Labels:
-
Service Catalog
-
Service Portal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-06-2017 08:06 PM
Hi Bosco,
If you want to validate input date of RP (using client script - portal), you can use the moment.js lib.
This is example code:
function onSubmit() {
g_form.hideAllFieldMsgs("error");
var isValid = true;
var formatDate = getFormatDate();
var today = moment();
var starts = moment(g_form.getValue('start_date'), formatDate);
if (starts.isBefore(today)) {
g_form.showErrorBox("start_date", "Start date must be today or a future date!");
isValid = false;
}else{
//add anything you want
}
g_form.submitted = isValid;
return isValid;
}
function getFormatDate() {
var formatDate = "DD-MM-YYYY";
try {
if (g_user_date_time_format.indexOf("MM-dd-yyyy") !== -1) {
formatDate = "MM-DD-YYYY";
} else if (g_user_date_time_format.indexOf("dd/MM/yyyy") !== -1) {
formatDate = "DD/MM/YYYY";
} else if (g_user_date_time_format.indexOf("yyyy-MM-dd") !== -1) {
formatDate = "YYYY.MM.DD";
}
} catch (err) {
formatDate = "DD-MM-YYYY";
}
return formatDate + " HH:mm:ss";
}
Hope this will helpful!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-19-2018 06:20 AM
The answer is that you don't. Synchronous calls are not available on portal, so you are stuck with async. Your goal is to check a remote record's value when you submit the request. Instead, set a hidden value on your request to true or false based on an onChange to the given field(s). Here is an example that checks for a manager:
function onChange(control, oldValue, newValue, isLoading) {
if(newValue != ''){
var usr = g_form.getReference('requested_for', getManagerInfo);
}
}
function getManagerInfo(usr){
if(usr.manager == ''){
g_scratchpad.hasManager = false;
}else if( usr.manager.active == false){
g_scratchpad.hasManager = true;
}
}
Then use an onSubmit to check if that value is true or false.
function onSubmit() {
var manager = g_scratchpad.hasManager;
if (manager){
alert('Please provide Requested for user with a valid Manager.');
return false;
}
}