- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-10-2023 12:03 AM - edited 08-10-2023 12:16 AM
Hello Guys,
i have created a Scripted REST API which i cannot make to take input from the Widget of a Service Portal,
Here is the partial code of the script:
(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var instanceName = gs.getProperty('instance_name');
var userData = [];
var monthFilter = request.getParameter("month");
gs.info("Received Month Parameter: " + monthFilter);
var filterQuery = "";
var comments = [];
switch (monthFilter) {
case "01":
case "02":
case "03":
case "04":
case "05":
case "06":
case "07":
case "08":
case "09":
case "10":
case "11":
case "12":
filterQuery = "resolved_atON" + monthFilter + "@javascript:gs.dateGenerate('" + new Date().getFullYear() + "', '" + monthFilter + "', '01', '00:00:00')@javascript:gs.dateGenerate('" + new Date().getFullYear() + "', '" + (parseInt(monthFilter) + 1) + "', '01', '00:00:00')";
break;
case "thisMonth":
filterQuery = "resolved_atONThis month@javascript:gs.beginningOfThisMonth()@javascript:gs.endOfThisMonth()";
gs.info("Constructed filter for specific month: " + filterQuery);
break;
case "lastMonth":
filterQuery = "resolved_atONLast month@javascript:gs.beginningOfLastMonth()@javascript:gs.endOfLastMonth()";
gs.info("Constructed filter for specific month: " + filterQuery);
break;
case "last3Months":
filterQuery = "resolved_atONLast 3 months@javascript:gs.beginningOfLast3Months()@javascript:gs.endOfLast3Months()";
gs.info("Constructed filter for specific month: " + filterQuery);
break;
}
I want to take that input and make it a filter element for this encoded querry:
var inc = new GlideRecord("incident");
inc.addEncodedQuery("/*other filters*/^" + filterQuery + "^/*other filters*/");
But appears by the logs that the script doesnt take any input whatsoever despite in the url the request is correctly filtered.
Here is the Widget code that takes the input and makes a request:
Partial Body HTML template of the input:
<label for="monthSelect">Select Filter:</label>
<select ng-model="c.selectedMonth" id="monthSelect">
<option value="01">Jan</option>
<option value="02">Feb</option>
<option value="03">Mar</option>
<option value="04">Apr</option>
<option value="05">May</option>
<option value="06">Jun</option>
<option value="07">Jul</option>
<option value="08">Aug</option>
<option value="09">Sep</option>
<option value="10">Oct</option>
<option value="11">Nov</option>
<option value="12">Dec</option>
<option value="thisMonth">This Month</option>
<option value="lastMonth">Last Month</option>
<option value="last3Months">Last 3 Months</option>
</select>
<button ng-click="c.getFilteredData()">Get Data</button>
Client controller for the widget:
api.controller = function($http, spUtil) {
var c = this;
c.data.users = [];
c.getFilteredData = function() {
var apiUrl = '*path to the resource*/getReport';
apiUrl += '?month=' + c.selectedMonth;
$http.get(apiUrl).then(function(response) {
c.data.users = response.data.result;
}, function(error) {
spUtil.addErrorMessage('Error fetching data.');
});
};
};
Http request on submit:
GET | *path to rest api*/getReport?month=thisMonth |
What did i miss that it isn't passing the input to the month variable in the script and then the constructor?
(I deleted some data for privacy.)
Here is the comment in the response of what encoded query was used:
script:
comments.push("Filter used: ", filterQuery);
response:
"comments": [
"Filter used: ",
"",
"Filter used: ",
"",
...
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-10-2023 05:48 AM
I figured out:
var monthFilter = request.queryParams['month'].toString();
// month paraméter lekérése url paramból
gs.info("params:" + monthFilter);
var filterQuery = ""; // filter query változó incializálása
if (monthFilter === "01" || monthFilter === "02" || monthFilter === "03" || monthFilter === "04" ||
monthFilter === "05" || monthFilter === "06" || monthFilter === "07" || monthFilter === "08" ||
monthFilter === "09" || monthFilter === "10" || monthFilter === "11") {
var nextMonth = (parseInt(request.queryParams['month'], 10) + 1 ).toString();
var year = new Date().getFullYear();
filterQuery = "resolved_atBETWEENjavascript:gs.dateGenerate('" + year + "-" + monthFilter + "-01','00:00:00')@javascript:gs.dateGenerate('" + year + "-" + nextMonth + "-01','00:00:00')";
}
else if (monthFilter === "12") {
nextMonth = (parseInt(request.queryParams['month'], 10) + 1 ).toString();
year = new Date().getFullYear();
var nextyear = new Date().getFullYear();
if (nextMonth === "13") {
nextMonth = "01";
nextyear++;
}
filterQuery = "resolved_atBETWEENjavascript:gs.dateGenerate('" + year + "-" + monthFilter + "-01','00:00:00')@javascript:gs.dateGenerate('" + nextyear + "-" + nextMonth + "-01','00:00:00')";
}
else if (monthFilter === "thisMonth") {
filterQuery = "resolved_atONThis month@javascript:gs.beginningOfThisMonth()@javascript:gs.endOfThisMonth()";
} else if (monthFilter === "lastMonth") {
filterQuery = "resolved_atONLast month@javascript:gs.beginningOfLastMonth()@javascript:gs.endOfLastMonth()";
} else if (monthFilter === "last3Months") {
filterQuery = "resolved_atONLast 3 months@javascript:gs.beginningOfLast3Months()@javascript:gs.endOfLast3Months()";
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-10-2023 05:48 AM
I figured out:
var monthFilter = request.queryParams['month'].toString();
// month paraméter lekérése url paramból
gs.info("params:" + monthFilter);
var filterQuery = ""; // filter query változó incializálása
if (monthFilter === "01" || monthFilter === "02" || monthFilter === "03" || monthFilter === "04" ||
monthFilter === "05" || monthFilter === "06" || monthFilter === "07" || monthFilter === "08" ||
monthFilter === "09" || monthFilter === "10" || monthFilter === "11") {
var nextMonth = (parseInt(request.queryParams['month'], 10) + 1 ).toString();
var year = new Date().getFullYear();
filterQuery = "resolved_atBETWEENjavascript:gs.dateGenerate('" + year + "-" + monthFilter + "-01','00:00:00')@javascript:gs.dateGenerate('" + year + "-" + nextMonth + "-01','00:00:00')";
}
else if (monthFilter === "12") {
nextMonth = (parseInt(request.queryParams['month'], 10) + 1 ).toString();
year = new Date().getFullYear();
var nextyear = new Date().getFullYear();
if (nextMonth === "13") {
nextMonth = "01";
nextyear++;
}
filterQuery = "resolved_atBETWEENjavascript:gs.dateGenerate('" + year + "-" + monthFilter + "-01','00:00:00')@javascript:gs.dateGenerate('" + nextyear + "-" + nextMonth + "-01','00:00:00')";
}
else if (monthFilter === "thisMonth") {
filterQuery = "resolved_atONThis month@javascript:gs.beginningOfThisMonth()@javascript:gs.endOfThisMonth()";
} else if (monthFilter === "lastMonth") {
filterQuery = "resolved_atONLast month@javascript:gs.beginningOfLastMonth()@javascript:gs.endOfLastMonth()";
} else if (monthFilter === "last3Months") {
filterQuery = "resolved_atONLast 3 months@javascript:gs.beginningOfLast3Months()@javascript:gs.endOfLast3Months()";
}