- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 12:57 AM
Trying to create an onChange ServiceNow catalog client scripts that update variable fields based on external REST API data.
The fields should auto populate after entering a certificate ID number. The response should include the Common name, Status and expiry date of the certificate, which is based on the certificate ID entered on the field
Script used;
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue === ''){
return;
}
var certificateId = g_form.getValue('certificate_id');
var url = 'https://test.demotest.com/KeyfactorAPI/certificates/' + 'certificateId';
var headers = {'Authorization': 'Basic ' + btoa("username:Password")};
var gr = new GlideHTTPRequest('GET', url);
gr.setHeaders(headers);
gr.get(function(response) {
var responseBody = response.getBody();
var parsedResponse = JSON.parse(responseBody);
g_form.setValue('certificate_name', parsedResponse.IssuedCN);
g_form.setValue('certificate_status', parsedResponse.CertStateString);
g_form.setValue('certificate_expiration_date', parsedResponse.NotAfter);
});
}
The catalog item form
Tried the above script but nothing happens... help needed please
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 04:56 AM - edited 04-14-2023 04:57 AM
@costa1 ,
Can you try below script in background script first if you will get response will move it to your client side:
var request = new sn_ws.RESTMessageV2();
var certi = "" ; //please provide here some certificate ID hardcoded for testing
request.setEndpoint('https://test.demotest.com/KeyfactorAPI/certificates/' + certi); request.setHttpMethod('GET');
var user = 'admin'; //provide here user name var password = 'admin'; //provide here password request.setBasicAuth(user,password); request.setRequestHeader("Accept","application/json"); request.setRequestHeader('Content-Type','application/json'); var response = request.execute();
gs.info(response.getStatusCode()); gs.log(response.getBody());
Please try this script in Background script first and let me know if you got the response!
If my answer solved your issue, please mark my answer as ✅ Correct & 👍Helpful based on the Impact.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-15-2023 03:36 AM
Oh nice, that seemed to show the respected backend field data, i get all the results;
But the catalog item variable fields are still not populated (empty)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-15-2023 04:56 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-16-2023 08:48 AM
@costa1 ,
Update the last three lines as:
g_form.setValue("certificate_name", answer[0].CertificateAuthorityName);
g_form.setValue("certificate_status", answer[0].CertStateString);
g_form.setValue("certificate_expiration_date",answer[0].NotAfter);
If my answer solved your issue, please mark my answer as ✅Correct & 👍Helpful based on the Impact.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 01:02 AM
GlideHTTPRequest is a server side only API meaning it won't work in client scripts.
You'd have to create a GlideAjax script include, write your script there and then call the script include from your client script.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 04:35 AM - edited 04-14-2023 04:36 AM
created the GlideAjax script include below;
var KeyfactorRestAPI = Class.create();
KeyfactorRestAPI.prototype = {
initialize: function() {
this._baseUrl = "https://test.demotest.com/KeyfactorAPI/"; // Set the API endpoint URL.
this._username = "username"; // Set the Basic Authentication username.
this._password = "Password"; // Set the Basic Authentication password.
},
// Method for getting certificate data from the Keyfactor Command REST API.
getCertificateData: function(Certificates, callback) {
var url = this._baseUrl + Certificates;
// Build the headers object with the Basic Authentication credentials.
var headers = {
"Authorization": "Basic " + GlideStringUtil.base64Encode(this._username + ":" + this._password)};
// Make an AJAX call to the API endpoint with the Basic Authentication headers.
new GlideAjax("KeyfactorRestAPI").get(url, function(response) {
callback(response);
}, headers);
}
};
and then created the client script (using onChange);
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
// Instantiate the KeyfactorRestAPI script include.
var keyfactorRestAPI = new KeyfactorRestAPI();
// Get the cert Number variable field element and add an onchange event listener.
var certlNumberElement = g_form.getControl('certificate_id');
certlNumberElement.observe('change', function() {
// Get the cert number value from the cert id variable.
var Certificates = g_form.getValue('certificate_id');
// Call the getCertificateData method of the KeyfactorRestAPI script include.
keyfactorRestAPI.getCertificateData(Certificates, function(response) {
// Parse the response data and set the Certificate Data variable value.
var responseData = JSON.parse(response);
g_form.setValue('certificate_data', responseData);
});
});
}
but still getting no results.. any suggestions ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 01:06 AM
var url = 'https://test.demotest.com/KeyfactorAPI/certificates/' + 'certificateId';
You're concatenating certificateId variable as a string:
Should be:
var url = "https://test.demotest.com/KeyfactorAPI/certificates/" + certificateId;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2023 02:38 AM
still shows no results, even after changing to;
var url = "https://test.demotest.com/KeyfactorAPI/certificates/" + certificateId;