values undefined whenever passed from client to server side

kunalsmhatr
Tera Contributor

client side:

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}

// Ensure all required fields have values
var vehicleSysId = g_form.getValue('vehicle');
var startDate = g_form.getValue('pickup_date');
var endDate = g_form.getValue('return_date');

if (!vehicleSysId || !startDate || !endDate) {
return; // Exit if any value is missing
}
alert("Vehicle: " + vehicleSysId + "\nPickup Date: " + startDate + "\nReturn Date: " + endDate);
console.log("Vehicle ID Sent: " + vehicleSysId);
console.log("Start Date Sent: " + startDate);
console.log("End Date Sent: " + endDate);
var ga = new GlideAjax('testtest'); // Call Script Include
ga.addParam('sysparm_name', 'calculateTotalCost');
ga.addParam('sysparm_vehicleId', vehicleSysId);
ga.addParam('sysparm_startDate', startDate);
ga.addParam('sysparm_endDate', endDate);
alert("waitingfor rsponse ");
ga.getXMLAnswer(function(response) {
if (response) {
g_form.setValue('total_cost', response);
console.log("Total Cost Calculated: " + response);
} else {
console.error("Error: Null response from Script Include");
}
});
}
 
script include
var testtest = Class.create();
testtest.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {

calculateTotalCost: function(vehicleId, startDate, endDate) {
// var vehicleId = gs.getParameter('sysparm_vehicleId');
//var startDate = gs.getParameter('sysparm_startDate');
//var endDate = gs.getParameter('sysparm_endDate');

gs.info("Received Vehicle ID: " + vehicleId);
gs.info("Received Start Date: " + startDate);
gs.info("Received End Date: " + endDate);
if (!vehicleId || !startDate || !endDate) {
return "Error: Missing required fields";
}

var vehicleGR = new GlideRecord('x_calit_ar_fltmgr_vehicle');
if (!vehicleGR.get(vehicleId)) {
return "Error: Vehicle not found";
}

var dailyRate = parseFloat(vehicleGR.getValue('cost'));
if (isNaN(dailyRate)) {
return "Error: Invalid vehicle cost";
}

var start = new GlideDateTime(startDate);
var end = new GlideDateTime(endDate);

var duration = gs.dateDiff(start.getValue(), end.getValue(), true);
var totalDays = Math.ceil(duration); // Round up to next day if partial

var totalCost = totalDays * dailyRate;
gs.info("Calculated Total Cost: " + totalCost); // Log for debugging

return totalCost.toString(); // Return as string for GlideAjax
},



type: 'testtest'
});
1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

@kunalsmhatr 

you have the 3 lines commented and hence you won't get the value from client side to Server side via Ajax

Also the syntax is this.getParameter() and not gs.getParameter()

It seems you want to re-use the function both from GlideAjax and via server side. If yes then update the 3 lines as this

calculateTotalCost: function(vehicleId, startDate, endDate) {
        // var vehicleId = gs.getParameter('sysparm_vehicleId');
        //var startDate = gs.getParameter('sysparm_startDate');
        //var endDate = gs.getParameter('sysparm_endDate');

        var vehicleId = this.getParameter('sysparm_vehicleId') || vehicleId;
        var startDate = this.getParameter('sysparm_startDate') || startDate;
        var endDate = this.getParameter('sysparm_endDate') || endDate;

If my response helped please mark it correct and close the thread so that it benefits future readers.

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

View solution in original post

3 REPLIES 3

Bert_c1
Kilo Patron

You have the lines to get the values from the client script commented out:

 

// var vehicleId = gs.getParameter('sysparm_vehicleId');
//var startDate = gs.getParameter('sysparm_startDate');
//var endDate = gs.getParameter('sysparm_endDate');
 
at the start of your script. uncomment those and see what you get.

same issue with var startDate = gs.getParameter('sysparm_startDate');
i used below method and it worked fine. not sure why but thanks for help

 var vehicleId = this.getParameter('sysparm_vehicleId');
        var startDate = this.getParameter('sysparm_startDate');
        var endDate = this.getParameter('sysparm_endDate');

Ankur Bawiskar
Tera Patron
Tera Patron

@kunalsmhatr 

you have the 3 lines commented and hence you won't get the value from client side to Server side via Ajax

Also the syntax is this.getParameter() and not gs.getParameter()

It seems you want to re-use the function both from GlideAjax and via server side. If yes then update the 3 lines as this

calculateTotalCost: function(vehicleId, startDate, endDate) {
        // var vehicleId = gs.getParameter('sysparm_vehicleId');
        //var startDate = gs.getParameter('sysparm_startDate');
        //var endDate = gs.getParameter('sysparm_endDate');

        var vehicleId = this.getParameter('sysparm_vehicleId') || vehicleId;
        var startDate = this.getParameter('sysparm_startDate') || startDate;
        var endDate = this.getParameter('sysparm_endDate') || endDate;

If my response helped please mark it correct and close the thread so that it benefits future readers.

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