- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-11-2025 09:04 AM
Need help identifying why my Catalog CS is not able to get a response from my Script Include (see below):
SI:
var LARFStudentInformation = Class.create();
LARFStudentInformation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
// Client callable function to fetch student data
fetchStudentInfo: function() {
// Get the c_num parameter passed from the client script
var cnum = this.getParameter('c_num'); // Retrieve the c_num passed via GlideAjax
try {
gs.info('Script Include entered with c_num: ' + cnum); // Log entry into the Script Include
if (!cnum) {
gs.error('Error: c_num is required');
return null;
}
var restMessage = new sn_ws.RESTMessageV2();
restMessage.setRestResourceName('DEFAULT');
restMessage.setHttpMethod('GET');
restMessage.setQueryParameter('c_num', cnum);
var response = restMessage.execute();
if (!response) {
gs.error('No response received from REST API for c_num: ' + cnum);
return null;
}
var responseBody = response.getBody();
gs.info('API Response Body for c_num ' + cnum + ': ' + responseBody);
var parsedResponse = JSON.parse(responseBody);
if (!Array.isArray(parsedResponse) || parsedResponse.length === 0) {
gs.error('No student data found for c_num: ' + cnum);
return null;
}
var studentData = parsedResponse[0];
gs.info('Student Data Found: ' + JSON.stringify(studentData));
// Return student data as a JSON string to the client
return JSON.stringify({
pidm: studentData.pidm,
cnumber: studentData.cnumber,
stst_code: studentData.stst_code,
gpa_ind: studentData.gpa_ind,
guest_ind: studentData.guest_ind,
hold_ind: studentData.hold_ind,
hold_codes: studentData.hold_codes
});
} catch (e) {
gs.error('Error fetching student data for c_num: ' + cnum + '. Error: ' + e.message);
return null;
}
}
});
CS:
function onChange(control, oldValue, newValue, isLoading) {
// Exit if the form is still loading
if (isLoading) {
return;
}
// Exit if the c_num field is empty or hasn't changed
if (!newValue || newValue === oldValue) {
return;
}
console.log('onChange triggered. New c_num: ' + newValue); // Log new c_num value
// Call the Script Include function to fetch student information
getStudentInfo(newValue);
}
function getStudentInfo(cnum) {
var ga = new GlideAjax('LARFStudentInformation'); // Name of Script Include must match exactly
ga.addParam('sysparm_name', 'fetchStudentInfo'); // Name of the method to call in the Script Include
ga.addParam('c_num', cnum); // Pass c_num to the Script Include
// Add a callback function to process the response
ga.getXMLAnswer(function(response) {
console.log('GlideAjax response received: ' + response);
// Check if response is valid
if (response) {
var studentInfo = JSON.parse(response);
if (studentInfo) {
g_form.setValue('student_information', JSON.stringify(studentInfo));
} else {
g_form.setValue('student_information', 'No student data found.');
}
} else {
console.error('No response from Script Include for c_num: ' + cnum);
g_form.setValue('student_information', 'Error fetching student data.');
}
});
}
The idea here is there is a field named student_information (string) on the form. When the c_num field changes, the client script should call the Script Include and pass c_num as an http parameter back to the REST API to return the matching string. Maybe there is a better way to do this? We can't use tables to store data, since student data is rather large and contains sensitive information.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-11-2025 12:16 PM - edited 03-11-2025 12:17 PM
Hello @appstorm
Please adhere the script include and client script settings shown below:
Here is when I tried with dummy response in my PDI:
Dummy Catalog Item:
Script Include with Glide Ajax Enabled / Client Callable
var LARFStudentInformation = Class.create();
LARFStudentInformation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
// Client callable function to fetch student data
fetchStudentInfo: function() {
// Get the c_num parameter passed from the client script
var cnum = this.getParameter('c_num'); // Retrieve the c_num passed via GlideAjax
try {
gs.info('Script Include entered with c_num: ' + cnum); // Log entry into the Script Include
if (!cnum) {
gs.error('Error: c_num is required');
return null;
}
// var restMessage = new sn_ws.RESTMessageV2();
// restMessage.setRestResourceName('DEFAULT');
// restMessage.setHttpMethod('GET');
// restMessage.setQueryParameter('c_num', cnum);
// var response = restMessage.execute();
//dummy payload
var response = {
getBody: function() {
return JSON.stringify([{
pidm: "12345",
cnumber: "C12345",
stst_code: "VJ",
gpa_ind: "Y",
guest_ind: "N",
hold_ind: "Y",
hold_codes: ["HOLD1", "HOLD2"]
}]);
},
getStatusCode: function() {
return 200;
}
};
if (!response) {
gs.error('No response received from REST API for c_num: ' + cnum);
return null;
}
var responseBody = response.getBody();
gs.info('API Response Body for c_num ' + cnum + ': ' + responseBody);
var parsedResponse = JSON.parse(responseBody);
if (!Array.isArray(parsedResponse) || parsedResponse.length === 0) {
gs.error('No student data found for c_num: ' + cnum);
return null;
}
var studentData = parsedResponse[0];
gs.info('Student Data Found: ' + JSON.stringify(studentData));
// Return student data as a JSON string to the client
return JSON.stringify({
pidm: studentData.pidm,
cnumber: studentData.cnumber,
stst_code: studentData.stst_code,
gpa_ind: studentData.gpa_ind,
guest_ind: studentData.guest_ind,
hold_ind: studentData.hold_ind,
hold_codes: studentData.hold_codes
});
} catch (e) {
gs.error('Error fetching student data for c_num: ' + cnum + '. Error: ' + e.message);
return null;
}
}
});
Catalog Client Script
function onChange(control, oldValue, newValue, isLoading) {
// Exit if the form is still loading
if (isLoading) {
return;
}
// Exit if the c_num field is empty or hasn't changed
if (!newValue || newValue === oldValue) {
return;
}
console.log('onChange triggered. New c_num: ' + newValue); // Log new c_num value
// Call the Script Include function to fetch student information
getStudentInfo(newValue);
}
function getStudentInfo(cnum) {
var ga = new GlideAjax('LARFStudentInformation'); // Name of Script Include must match exactly
ga.addParam('sysparm_name', 'fetchStudentInfo'); // Name of the method to call in the Script Include
ga.addParam('c_num', cnum); // Pass c_num to the Script Include
// Add a callback function to process the response
ga.getXMLAnswer(function(response) {
console.log('GlideAjax response received: ' + response);
// Check if response is valid
if (response) {
try {
var studentInfo = JSON.parse(response);
if (studentInfo) {
//displaying key:value pair formatting
var formattedInfo = '';
for (var key in studentInfo) {
if (studentInfo.hasOwnProperty(key)) {
formattedInfo += key + ': ' + studentInfo[key] + '\n';
}
}
g_form.setValue('student_information', formattedInfo.trim());
} else {
g_form.setValue('student_information', 'No student data found.');
}
} catch (e) {
console.error('Error parsing student information JSON:', e);
g_form.setValue('student_information', 'Error parsing student data.');
}
} else {
console.error('No response from Script Include for c_num: ' + cnum);
g_form.setValue('student_information', 'Error fetching student data.');
}
});
}
Before c_num value change
After c_num value change
Hope it helps!
Hope that helps!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-11-2025 10:42 AM
It's worth trying the full API name call, in case that's the issue:
var ga = new GlideAjax('sn_uni_req.LARFStudentInformation'); // Name of Script Include must match exactly
Also add an alert or console log at the beginning of the getStudentInfo client script function to confirm that it's making it that far.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-11-2025 11:19 AM
Went ahead and added the prefix to call the API by the full name and added the console log at the beginning of the CS.
Here is the result:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-11-2025 11:33 AM
And System Log > All is not showing the 'Script Include entered...' or 'Error fetching' or any other messages at the time the variable is changed?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-11-2025 11:43 AM
Correct. No logging is taking place from the Script Include side, almost like it doesn’t exist.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-11-2025 11:47 AM
Do you still see the console error and/or the log with a simplified script like this?
var LARFStudentInformation = Class.create();
LARFStudentInformation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
fetchStudentInfo: function() {
gs.info('Script Include entered');
return;
},
type: 'LARFStudentInformation'
});