#Getting ReportList Information
##Question
How do I get the ReportList Information to createmy own ReportList?
##Answer
Different approaches should be used in different architectures. WebForms, MVC, and pure AJAX all have different solutions. To that end, we will explore a couple of different solutions.
###Solution 1: Webforms
Here is a list of some helpful methods that allow you to obtain ReportList information with different structures.
You can use this information to populate a WebForms Dropdown menu using code like this:
private void PopulateReports()
{
ReportInfo[] reports = AdHocSettings.AdHocConfig.FilteredListReportsCached();
foreach (ReportInfo report in reports)
ReportsDropDown.Items.Add(new ListItem(report.FullName, report.FullName)); //ReportsDropdown is a server-side control in your custom solution
}
###Solution 2: AJAX
Here is an example of an AJAX request you can send in order to return the ReportList data. This method returns a JSON formatted object.
-
rs.aspx?wscmd=reportlistdata
-
rs.aspx?wscmd=reportlistdatalite
In this case you could use the JSON data to populate a client-side control using javascript like so:
function GetReports(keyword, category) {
var requestString = 'wscmd=reportlistdatalite';
if (keyword == null)
keyword = '';
requestString += '&wsarg0=' + category + '&wsarg1=' + keyword + '&wsarg2=1';
AjaxRequest('./rs.aspx', requestString, AcceptReports, GetReportsFail, 'reportlistdatalite');
}
function AcceptReports(returnObj, id, parameters) {
for (var rCnt1 = 0; rCnt1 < returnObj.ReportSets.length; rCnt++) {
$("#ReportsDropdown").append($('<option></option>').val(returnObj.ReportSets[rCnt].Name).html(returnObj.ReportSets[rCnt].Name));
}
}
//Ajax request for JSON methods-----------------------------------------------------------
function AjaxRequest(url, parameters, callbackSuccess, callbackError, id) {
var thisRequestObject = null;
if (window.XMLHttpRequest)
thisRequestObject = new XMLHttpRequest();
else if (window.ActiveXObject)
thisRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
thisRequestObject.requestId = id;
thisRequestObject.onreadystatechange = ProcessRequest;
thisRequestObject.open('GET', url + '?' + parameters, true);
thisRequestObject.send();
function DeserializeJson() {
var responseText = thisRequestObject.responseText;
while (responseText.indexOf('"\\/Date(') >= 0) {
responseText = responseText.replace('"\\/Date(', 'eval(new Date(');
responseText = responseText.replace(')\\/"', '))');
}
if (responseText.charAt(0) != '[' && responseText.charAt(0) != '{')
responseText = '{' + responseText + '}';
var isArray = true;
if (responseText.charAt(0) != '[') {
responseText = '[' + responseText + ']';
isArray = false;
}
var retObj = eval(responseText);
if (!isArray)
return retObj[0];
return retObj;
}
function ProcessRequest() {
if (thisRequestObject.readyState == 4) {
if (thisRequestObject.status == 200 && callbackSuccess) {
callbackSuccess(DeserializeJson(), thisRequestObject.requestId, parameters);
}
else if (callbackError) {
callbackError(thisRequestObject);
}
}
}
function GetReports(keyword, category) {
var requestString = 'wscmd=reportlistdatalite';
if (keyword == null)
keyword = '';
requestString += '&wsarg0=' + category + '&wsarg1=' + keyword + '&wsarg2=1';
AjaxRequest('./rs.aspx', requestString, AcceptReports, GetReportsFail, 'reportlistdatalite');
}
function AcceptReports(returnObj, id, parameters) {
for (var rCnt1 = 0; rCnt1 < returnObj.ReportSets.length; rCnt++) {
$("#ReportsDropdown").append($('<option></option>').val(returnObj.ReportSets[rCnt].Name).html(returnObj.ReportSets[rCnt].Name));
}
}
//Ajax request for JSON methods-----------------------------------------------------------
function AjaxRequest(url, parameters, callbackSuccess, callbackError, id) {
var thisRequestObject = null;
if (window.XMLHttpRequest)
thisRequestObject = new XMLHttpRequest();
else if (window.ActiveXObject)
thisRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
thisRequestObject.requestId = id;
thisRequestObject.onreadystatechange = ProcessRequest;
thisRequestObject.open('GET', url + '?' + parameters, true);
thisRequestObject.send();
function DeserializeJson() {
var responseText = thisRequestObject.responseText;
while (responseText.indexOf('"\\/Date(') >= 0) {
responseText = responseText.replace('"\\/Date(', 'eval(new Date(');
responseText = responseText.replace(')\\/"', '))');
}
if (responseText.charAt(0) != '[' && responseText.charAt(0) != '{')
responseText = '{' + responseText + '}';
var isArray = true;
if (responseText.charAt(0) != '[') {
responseText = '[' + responseText + ']';
isArray = false;
}
var retObj = eval(responseText);
if (!isArray)
return retObj[0];
return retObj;
}
function ProcessRequest() {
if (thisRequestObject.readyState == 4) {
if (thisRequestObject.status == 200 && callbackSuccess) {
callbackSuccess(DeserializeJson(), thisRequestObject.requestId, parameters);
}
else if (callbackError) {
callbackError(thisRequestObject);
}
}
}We cannot, however, provide ready-to-use examples because the code really depends on your particular use-case. Please contact Izenda Services with any questions.
