Handling Drill-downs, Active Cache, and On-Demand Paging Reports
This section provides code examples that demonstrate how to run an On-Demand Paging report called ODP_Report.fex, which resides in the RESTful_Web_Services/Car_Reports folder.
The examples include:
- A signOn page, which is used to run the initial request.
- A WebForm2 page, which is used to make the additional RESTful Web Services requests required for the paging within the WebFOCUS report.
The WebForm2 page can also be used as is to handle Drill-down and Active Cache paging requests.
The signOn page contains the RESTful Web Service request to run the initial WebFOCUS report. The IBIRS_clientPath parameter is set so that all additional RESTful Web Services requests needed, whether paging, image retrieval, or paging will be routed through the client application. For example:
IBIRS_clientPath=http://localhost:51970/WebForm2.aspx
Visual Basic .NET Example (signOn.aspx and WebForm2.aspx)
signOn.aspx
Imports System.Net
Imports System.IO
Public Class signOn
Inherits System.Web.UI.Page
Dim cookies As New CookieContainer
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim webStream As Stream
Dim webResponse As String = ""
Dim request As HttpWebRequest
Dim response1 As HttpWebResponse
Dim postData As String
request = WebRequest.Create("http://localhost.:8080/ibi_apps/rs/ibfs")
request.Method = "POST"
postData = "IBIRS_action=signOn&IBIRS_userName=admin&IBIRS_password=admin"
request.CookieContainer = cookies Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = byteArray.Length
Dim dataStream As Stream = request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
response1 = request.GetResponse()
webStream = response1.GetResponseStream()
Dim request2 As HttpWebRequest
Dim response2 As HttpWebResponse
Dim webStream2 As Stream
Dim webResponse2 As String = ""
Dim uri As New System.Uri("http://localhost.:8080/ibi_apps/rs")
request2 = WebRequest.Create(uri)
request2.Method = "POST"
request2.CookieContainer = cookies
postData = "IBIRS_action=run" + _
"&IBIRS_clientPath=/WebForm2.aspx" + _
"&IBIRS_path=/WFC/Repository/RESTful_Web_Services/Car_Reports/ODP_Report.fex" + _
"&IBIRS_service=ibfs" + _
"&IBIRS_htmlPath=http://localhost:8080/ibi_apps/ibi_html"
Dim byteArray2 As Byte() = Encoding.UTF8.GetBytes(postData)
request2.ContentType = "application/x-www-form-urlencoded" request2.ContentLength = byteArray2.Length
Dim dataStream2 As Stream = request2.GetRequestStream()
dataStream2.Write(byteArray2, 0, byteArray2.Length)
dataStream2.Close()
response2 = request2.GetResponse()
Dim i As Integer
Dim cookieArray As New CookieCollection
cookieArray = cookies.GetCookies(uri)
For i = 0 To cookies.Count - 1
Dim aCookie As New HttpCookie(cookieArray(i).Name)
aCookie.Value = cookieArray(i).Value
Response.Cookies.Add(aCookie)
Next i
webStream2 = response2.GetResponseStream()
Dim webStreamReader2 As New StreamReader(webStream2)
While webStreamReader2.Peek >= 0
webResponse2 = webStreamReader2.ReadToEnd()
End While
Response.Output.Write(webResponse2)
End Sub
End Class
WebForm2.aspx
Imports System.Net
Imports System.IO
Public Class WebForm2
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim tDrillURL As String = Request.ServerVariables("QUERY_STRING")
Dim i As Integer
Dim qParm As String
Dim qValue As String
Dim IBIRS_path As String = ""
Dim Clicked_On As String = ""
Dim cookies As New CookieContainer
Dim request3 As HttpWebRequest
Dim response3 As HttpWebResponse
Dim webStream3 As Stream
Dim webResponse3 As String = ""
Dim getData As String
Dim uris As String = "http://localhost.:8080/ibi_apps/rs"
Dim uri As New System.Uri(uris)
getData = "http://localhost.:8080/ibi_apps/rs?" + _
tDrillURL + _
"&IBIRS_clientPath=/WebForm2.aspx" + _
"&IBIRS_htmlPath=http://localhost:8080/ibi_apps/ibi_html"
request3 = WebRequest.Create(getData)
request3.Method = "GET"
Dim j As Integer
For j = 0 To Request.Cookies.Count - 1
Dim rCookie As New System.Net.Cookie
rCookie.Name = Request.Cookies(j).Name
rCookie.Value = Request.Cookies(j).Value
cookies.Add(uri, rCookie)
Dim aCookie As New HttpCookie(Request.Cookies(j).Name)
aCookie.Value = Request.Cookies(j).Value
Response.Cookies.Add(aCookie)
Next j
request3.CookieContainer = cookies
response3 = request3.GetResponse()
webStream3 = response3.GetResponseStream()
Dim binaryReader3 As New BinaryReader(webStream3)
Dim readData() As Byte = Nothing
Dim byteArray() As Byte = Nothing
Dim byteStart As Integer = 0
Dim byteLength As Integer While (True)
readData = binaryReader3.ReadBytes(4096)
If (readData.Length = 0) Then
Exit While
End If
byteLength = readData.Length
ReDim Preserve byteArray(byteLength + byteStart - 1)
Array.Copy(readData, 0, byteArray, byteStart, byteLength)
byteStart = byteStart + byteLength
End While
Response.OutputStream.Write(byteArray, 0, byteArray.Length)
End Sub
End Class
Java Example (signOn.jsp and WebForm2.jsp)
signOn.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" session="true"
import="
java.io.BufferedReader,
java.io.IOException,
java.io.InputStream,
java.io.InputStreamReader,
java.io.File,
java.io.FileOutputStream,
java.io.PrintWriter,
java.net.URI,
java.net.URISyntaxException,
org.apache.commons.httpclient.*,
org.apache.commons.httpclient.methods.*,
sax.xml.parser.SaxHandler,
javax.xml.parsers.ParserConfigurationException,
javax.xml.parsers.SAXParser,
javax.xml.parsers.SAXParserFactory,
org.xml.sax.SAXException
"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String request1 = "http://localhost:8080/ibi_apps/rs/ibfs";
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(request1);
method.addParameter("IBIRS_action", "signOn");
method.addParameter("IBIRS_userName", "admin");
method.addParameter("IBIRS_password", "admin");
client.executeMethod(method);
Header[] cookies = null;
InputStream response1 = null;
response1 = method.getResponseBodyAsStream();
cookies = method.getResponseHeaders("Set-Cookie");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
SaxHandler handler = new SaxHandler();
parser.parse(response1, handler);
String csrfName = handler.getResults()[0].toString();
String csrfValue = handler.getResults()[1].toString();
// System.out.println("csrfName = " + csrfName);
// System.out.println("csrfValue = " + csrfValue);
String request2 = "http://localhost:8080/ibi_apps/rs";
PostMethod method_report = new PostMethod(request2);
method_report.addParameter("IBIRS_action","run");
method_report.addParameter("IBIRS_clientPath","/drillDownJSP/WebForm2.jsp");
method_report.addParameter("IBIRS_path","/EDA/EDASERVE/ibisamp/carinst.fex");
method_report.addParameter("IBIRS_service","ibfs");
method_report.addParameter("IBIRS_htmlPath","http://localhost:8080/ibi_apps/ibi_html");
method_report.addParameter(csrfName,csrfValue);
// cookies is defined as Header[] in the Signing-On to WebFOCUS example
for(int h=0; h<cookies.length; h++){
// System.out.println(cookies[h]);
method_report.addRequestHeader(cookies[h].getName(), cookies[h].getValue());
String str = cookies[h].getName() + cookies[h].getValue();
//write cookie to a disk file and then read it back in the next JSP
String nameOfTextFile = "c:/temp/jsessionid.txt";
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfTextFile));
pw.println(str);
//clean up
pw.close();
} catch(IOException e) {
out.println(e.getMessage());
}
}
method_report.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// client is defined as HttpClient in the Signing-On to WebFOCUS example
client.executeMethod(method_report);
InputStream response2 = null;
response2 = method_report.getResponseBodyAsStream();
BufferedReader br2 = new BufferedReader(new InputStreamReader(response2));
String line2;
String newOutput = null;
while ((line2 = br2.readLine()) != null) {
newOutput = line2;
out.println(newOutput);
// System.out.println(line2);
}
%>
WebForm2.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
import="
java.io.BufferedReader,
java.io.IOException,
java.io.InputStream,
java.io.InputStreamReader,
java.io.File,
java.io.FileOutputStream,
java.io.PrintWriter,
java.io.FileReader,
java.net.URI,
java.net.URISyntaxException,
org.apache.commons.httpclient.*,
org.apache.commons.httpclient.methods.*,
sax.xml.parser.SaxHandler,
javax.xml.parsers.ParserConfigurationException,
javax.xml.parsers.SAXParser,
javax.xml.parsers.SAXParserFactory,
org.xml.sax.SAXException
"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String tDrillURL ="";
int i;
String qParm;
String qValue;
String IBIRS_path = "";
String Clicked_On = "";
Header[] cookies = null;
HttpClient client = new HttpClient();
tDrillURL = request.getQueryString();
// read saved cookie from text file
String txtFilePath = "c:/temp/jsessionid.txt";
BufferedReader reader = new BufferedReader(new FileReader(txtFilePath));
StringBuilder sb = new StringBuilder();
String line;
while((line = reader.readLine())!= null){
sb.append(line);
}
// System.out.println(sb.toString());
reader.close();
String request3 = "http://localhost:8080/ibi_apps/rs";
GetMethod method_report2 = new GetMethod(request3);
method_report2.setQueryString(tDrillURL);
method_report2.getParams().setParameter("IBIRS_clientPath", "/drillDownJSP/WebForm2.jsp");
method_report2.getParams().setParameter("IBIRS_htmlPath","http://localhost:8080/ibi_apps/ibi_html");
String cookie=sb.toString();
// System.out.println("webform2 cookie before replace " + cookie);
cookie = cookie.replace("Set-Cookie","");
// System.out.println("webform2 cookie after replace " + cookie);
method_report2.setRequestHeader("Cookie", cookie);
// }
method_report2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
int statusCode = client.executeMethod(method_report2);
System.out.println(statusCode);
InputStream response3 = null;
response3 = method_report2.getResponseBodyAsStream();
BufferedReader br2 = new BufferedReader(new InputStreamReader(response3));
String line3;
String newOutput = null;
while ((line3 = br2.readLine()) != null) {
newOutput = line3;
out.println(newOutput);
}
%>
HTML and jQuery Example (drillOne.html and drillTwo.html)
drillOne.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript" src="http://code.jquery.com/jquery-3.1.0.js"> </script>
<script type='text/javascript' src="http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/
jquery.xdomainrequest.min.js"></script>
<script type="text/javascript">
var csrf_name;
var csrf_value;
var frameToBeWorkedOn = "#AjaxPlaceHolder";
var contentType = "application/x-www-form-urlencoded; charset=utf-8";
$(document).ready(function (IBIRS_action, IBIRS_userName, IBIRS_password) {
if (window.XDomainRequest)
contentType = "text/plain";
var webMethod = "http://machine:port/ibi_apps/rs";
var IBIRS_action = "signOn";
var IBIRS_userName = "admin";
var IBIRS_password = "admin";
var parameters = 'IBIRS_action=' + IBIRS_action + '&IBIRS_userName=' + IBIRS_userName + '&IBIRS_password=' + IBIRS_password;
$.ajax({
type: "POST",
url: webMethod,
data: parameters,
dataType: "xml",
xhrFields: {
withCredentials: true
},
crossDomain: true,
contentType: contentType,
success: xmlParser,
error:function(jqXHR,textStatus,errorThrown)
{
alert("You can not send Cross Domain AJAX requests: " + errorThrown);
}
})
});
function xmlParser(xml) {
$(xml).find("entry").each(function () { if ($(this).attr("key") == "IBI_CSRF_Token_Name") {
csrf_name = $(this).attr("value");
}
if ($(this).attr("key") == "IBI_CSRF_Token_Value") {
csrf_value = $(this).attr("value");
}
});
runReport();
}
function runReport() {
if (window.XDomainRequest)
contentType = "text/plain";
var webMethod = "http://machine:port/ibi_apps/rs";
var IBIRS_action = "run";
var IBIRS_clientPath = "/src/drillTwo.html";
var IBIRS_path = "/EDA/EDASERVE/ibisamp/carinst.fex";
var IBIRS_service = "ibfs";
var IBIRS_htmlPath = "http://machine:port/ibi_apps/ibi_html";
var parameters = 'IBIRS_action=' + IBIRS_action + '&IBIRS_clientPath=' + IBIRS_clientPath + '&IBIRS_path=' + IBIRS_path
+ '&IBIRS_service=' + IBIRS_service + '&IBIRS_htmlPath=' + IBIRS_htmlPath + '&' + csrf_name + '=' + csrf_value;
$.ajax({
type: "POST",
url: webMethod,
data: parameters,
dataType: "html",
xhrFields: {
withCredentials: true
},
crossDomain: true,
contentType: contentType,
/* success: alert("success"), */
complete: function(xhr,status) {
/* alert(xhr.responseText); */
/* $("AjaxPlaceHolder".html(xhr.responseText)); */
document.AjaxPlaceHolder.document.body.innerHTML = xhr.responseText;
},
error: function (jqXHR, textStatus, errorThrown) {
alert("You can not send Cross Domain AJAX requests: " + errorThrown);
}
})
}
</script>
</head>
<body>
<iframe id="AjaxPlaceHolder" name="AjaxPlaceHolder" height="600" width="900" align="middle" style="position:absolute; top: 5px; left: 5px"></iframe>
</body>
</html>
drillTwo.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script type="text/javascript" src="http://code.jquery.com/jquery-3.1.0.js"> </script>
<script type='text/javascript' src="http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/
jquery.xdomainrequest.min.js"></script>
<script type="text/javascript">
var frameToBeWorkedOn = "#AjaxPlaceHolder";
var contentType = "application/x-www-form-urlencoded; charset=utf-8";
var tDrillURLx = window.location.search;
var tDrillURL = tDrillURLx.slice(1);
$(document).ready(function () {
if (window.XDomainRequest)
contentType = "text/plain";
var webMethod = "http://machine:port/ibi_apps/rs";
var IBIRS_action = "get";
var IBIRS_clientPath = "/src/drillTwo.html";
var IBIRS_htmlPath = "http://machine:port/ibi_apps/ibi_html";
var parameters = tDrillURL + '&IBIRS_clientPath=' + IBIRS_clientPath + '&IBIRS_htmlPath=' + IBIRS_htmlPath;
$.ajax({
type: "GET",
url: webMethod,
data: parameters,
dataType: "html",
xhrFields: {
withCredentials: true
},
crossDomain: true,
contentType: contentType,
/* success: alert("success"), */
complete: function(xhr,status) {/* alert(xhr.responseText); */
/* $("AjaxPlaceHolder".html(xhr.responseText)); */
document.AjaxPlaceHolder.document.body.innerHTML = xhr.responseText;
},
error: function (jqXHR, textStatus, errorThrown) { alert("You can not send Cross Domain AJAX requests: " + errorThrown);
}
})
})
</script>
</head>
<body>
<iframe id="AjaxPlaceHolder" name="AjaxPlaceHolder" height="600" width="900" align="middle" style="position:absolute; top: 5px; left: 5px"></iframe>
</body>
</html>