Consuming OBIEE Analytics report using HTMLViewService in ADF -12c (With Bridge)

3
Step 1: Follow below URL to consume report.
             http://adfhybristips.blogspot.qa/2017/03/consuming-obiee-htmlview-service-in-adf.html

Step 2: Create Bridge Servlet and enable it


  package com.view.servlet;

import com.view.util.JSFUtils;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.HttpCookie;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.*;
import javax.servlet.http.*;

import javax.xml.namespace.QName;

import oracle.bi.web.soap.AuthResult;
import oracle.bi.web.soap.SAWLocale;
import oracle.bi.web.soap.SAWSessionParameters;
import oracle.bi.web.soap.SAWSessionService;
import oracle.bi.web.soap.SAWSessionServiceSoap;

/**
 * @author Fyaz Ahmad H
 * @version 1.0
 * This class is used as bridge to retrive data from OBIEE server using secured connecton.
 */
public class BridgeServlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=UTF-8";

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String relatedtUrl = request.getParameter("RedirectURL");
        String cookiename=getCookie(request, "ORA_BIPS_NQID");
        StringBuffer url = new StringBuffer(relatedtUrl);
        Map parameterMap = request.getParameterMap();
        for (Iterator iterator = parameterMap.keySet().iterator(); iterator.hasNext(); ) {
            String parameterName = (String)iterator.next();
            String[] parameterValues = (String[])parameterMap.get(parameterName);
            if (parameterValues != null && parameterValues.length > 0) {
                if (parameterName.equals("RedirectURL")) {
                    continue;
                }
                for (int i = 0; i < parameterValues.length; i++) {
                    url.append("&");
                    url.append(parameterName);
                    url.append("=");
                    String value = "";
                    try {
                        value = URLEncoder.encode(parameterValues[i], "UTF-8");
                        //value = URLDecoder.decode(parameterValues[i], "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                    url.append(value);
                }
            }
        }

        try {
            URL urlconn = new URL(url.toString());
            CookieManager cookieManager = new CookieManager();
            CookieHandler.setDefault(cookieManager);
            URLConnection httpConnection = (URLConnection)urlconn.openConnection();
            ((HttpURLConnection)httpConnection).setRequestMethod("GET");
            httpConnection.setRequestProperty("Cookie", "ORA_BIPS_NQID="+cookiename+"; path=/analytics;HttpOnly");
            httpConnection.setDoOutput(true);
            httpConnection.setDoInput(true); //Only if you expect to read a response…
            httpConnection.setUseCaches(false); //Highly recommended…
            httpConnection.setRequestProperty("Content-Type", "binary/data");
            httpConnection.setRequestProperty("User-Agent", request.getHeader("USER-AGENT"));
            InputStream in = (InputStream)httpConnection.getInputStream();
            response.setContentType("text/plain; charset=utf-8");
            ServletOutputStream out = response.getOutputStream();
            byte buffer1[] = new byte[1024 * 128];
            int k = 0;
            while ((k = in.read(buffer1)) != -1) {
                out.write(buffer1, 0, k);
            }
            in.close();
            out.close();
            ((HttpURLConnection)httpConnection).disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       
        String relatedtUrl = request.getParameter("RedirectURL");
        String cookiename=getCookie(request, "ORA_BIPS_NQID");
        
        //System.out.println("cookie setting "+cookiename);
        StringBuffer url = new StringBuffer(relatedtUrl);
        Map parameterMap = request.getParameterMap();
        for (Iterator iterator = parameterMap.keySet().iterator(); iterator.hasNext(); ) {
            String parameterName = (String)iterator.next();
            String[] parameterValues = (String[])parameterMap.get(parameterName);
            if (parameterValues != null && parameterValues.length > 0) {
                if (parameterName.equals("RedirectURL")) {
                    continue;
                }

                for (int i = 0; i < parameterValues.length; i++) {
                    url.append("&");
                    url.append(parameterName);
                    url.append("=");
                    String value = "";
                    try {
                        value = URLEncoder.encode(parameterValues[i], "UTF-8");
                        //value = URLDecoder.decode(parameterValues[i], "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                    url.append(value);
                }
            }
        }
        


        try {
            URL urlconn = new URL(url.toString());
            CookieManager cookieManager = new CookieManager();
            CookieHandler.setDefault(cookieManager);
            URLConnection httpConnection = (URLConnection)urlconn.openConnection();
            ((HttpURLConnection)httpConnection).setRequestMethod("POST");
            httpConnection.setRequestProperty("Cookie", "ORA_BIPS_NQID="+cookiename+";path=/analytics;HttpOnly");
            httpConnection.setDoOutput(true);
            httpConnection.setDoInput(true); //Only if you expect to read a response…
            httpConnection.setUseCaches(false); //Highly recommended…
            httpConnection.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
            httpConnection.setRequestProperty("User-Agent", request.getHeader("USER-AGENT"));
            InputStream in = (InputStream)httpConnection.getInputStream();
            response.setContentType("text/plain; charset=utf-8");
            ServletOutputStream out = response.getOutputStream();
            byte buffer1[] = new byte[1024 * 128];
            int k = 0;
            while ((k = in.read(buffer1)) != -1) {
                out.write(buffer1, 0, k);
            }
            in.close();
            out.close();
            ((HttpURLConnection)httpConnection).disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
       
    }    
    private String getCookie(HttpServletRequest request,String  cookieName){
        for (Cookie cookie : request.getCookies()) {
            if (cookie.getName().equals(cookieName)) {
                return cookie.getValue();
            } 
        }
        return null;
    }   

}

You are done :) 

Drop your email id in comments to get full source code.

Consuming OBIEE HTMLView Service(Analytics) in ADF - 12c. WORKING !!!

1
Step 1  : Create Web Service client for HtmlViewService and SAWSessionService .



Step 2 : Create HttpServlet .

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        StringBuffer outPutHtml = callReport(request, response);
        out.println(outPutHtml);
    }


    private StringBuffer callReport(HttpServletRequest request, HttpServletResponse response) {
        try {
            String userName=JSFUtils.getStringFromBundle("OBIEE_USER_NAME");
            String password=JSFUtils.getStringFromBundle("OBIEE_PASSWORD");
            String host=JSFUtils.getStringFromBundle("OBIEE_HOST");
            String OBIEEUrl=JSFUtils.getStringFromBundle("OBIEE_ANALYTICS_URL");
            String OBIEEQname=JSFUtils.getStringFromBundle("OBIEE_ANALYTICS_QNAME");
            String OBIEEContext=JSFUtils.getStringFromBundle("OBIEE_ANALYTICS_CONTEXT");
         
         
            SAWSessionService sAWSessionService = new SAWSessionService(new URL(OBIEEUrl), new QName(OBIEEQname,"SAWSessionService"));
            SAWSessionServiceSoap sAWSessionServiceSoap = sAWSessionService.getSAWSessionServiceSoap();
         
            HtmlViewService htmlViewService = new HtmlViewService(new URL(OBIEEUrl), new QName(OBIEEQname,"HtmlViewService"));
            HtmlViewServiceSoap htmlViewServiceSoap = htmlViewService.getHtmlViewService();
         
         
            String reportPath = request.getParameter("reportLocation");
         
            //sAWSessionServiceSoap.logon(userName, password);
            SAWLocale sawlocale = new SAWLocale();
            sawlocale.setLanguage(request.getLocale().getLanguage());
            sawlocale.setCountry(request.getLocale().getCountry());
            SAWSessionParameters sessionparams = new SAWSessionParameters();
            String userAgent = request.getHeader("User-Agent");
            sessionparams.setUserAgent(userAgent);
            sessionparams.setLocale(sawlocale);
            sessionparams.setAsyncLogon(false);
            AuthResult result = sAWSessionServiceSoap.logonex(userName, password, sessionparams);
            String sessionID = result.getSessionID();
            List<String> li = new ArrayList<String>();
            li.add(sessionID);
            sAWSessionServiceSoap.keepAlive(li);


            Cookie cookie = new Cookie("ORA_BIPS_NQID", sessionID);
            cookie.setDomain(host);
            cookie.setPath(OBIEEContext);
            cookie.setComment("user is not eligible to take the survey this time");
            cookie.setMaxAge(24 * 60 * 60);
            response.addCookie(cookie);


            //start page
         
         
            StartPageParams option = new StartPageParams();
            option.setIdsPrefix("fzz");
            option.setDontUseHttpCookies(true);

            Random r = new Random(System.currentTimeMillis());

            //Report to page
            String pageID = htmlViewServiceSoap.startPage(option, sessionID);
            String randomValue = "fz" + (1 + r.nextInt(2)) * 10000 + r.nextInt(10000);
            ReportRef ref = new ReportRef();
            ref.setReportPath(reportPath);
            //ref.setReportXml("");

            //htmlViewServiceSoap.setBridge(request.getContextPath() + "/bridgeservlet" , sessionID);

            ReportHTMLOptions htmlOptions = new ReportHTMLOptions();
            htmlOptions.setEnableDelayLoading(false);

            htmlViewServiceSoap.addReportToPage(pageID, randomValue, ref, null, null, htmlOptions, sessionID);

            //getHeadersHtml
            String outputHeader = htmlViewServiceSoap.getHeadersHtml(pageID, sessionID);

            //getHtmlForReport
            String outputhtml = htmlViewServiceSoap.getHtmlForReport(pageID, randomValue, sessionID);

            StringBuffer output = new StringBuffer();
            output.append("<HTML>");
            output.append("<HEAD>");

            output.append(outputHeader);

            output.append("</HEAD>");
            output.append("<BODY>");

            output.append(outputhtml);

            output.append("</BODY>");
            output.append("</HTML>");
            return output;

        } catch (Exception ex) {
            ex.printStackTrace();
            StringBuffer erroutput = new StringBuffer();
            return erroutput.append(ex.getMessage());

        }


Step 3 : Access report using below sample url.

http://host:port/ADFOBIEEReport/faces/analyticsservlet?reportLocation=<Report Location>


Sample URL and QNAME:
OBIEE_ANALYTICS_URL=http://host:port/analytics/saw.dll/wsdl/v7
OBIEE_ANALYTICS_QNAME=urn://oracle.bi.webservices/v7
OBIEE_ANALYTICS_CONTEXT=/analytics

Note:

To display report in IFRAME follow below steps.

Setp 1 : Change below configuration in OBIEE server.

<InIFrameRenderingMode>allow</InIFrameRenderingMode>

Step 2 : Add below lines in web.xml 

<context-param>
<param-name>oracle.adf.view.rich.security.FRAME_BUSTING</param-name>
<param-value>never</param-value>
</context-param>

Happy Coding !!!!!!!

ADF/WebCenter :Bypass the IE Compatibility Mode in IE8/9

0

Step 1 :Create a filter MyServletFilter.java

 

public class MyServletFilter implements Filter{
public MyServletFilter() {
super();
}
public void init(FilterConfig filterConfig) {
}
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain) throws IOException,
ServletException {
if (servletRequest instanceof HttpServletRequest){
HttpServletRequest req = (HttpServletRequest)servletRequest;
MyServletRequestWrapper wrapper = new MyServletRequestWrapper(req);
filterChain.doFilter(wrapper, servletResponse);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
return;
}
public void destroy() {
}
}

Step 2 : Create MyServletRequestWrapper.java class

 

public class MyServletRequestWrapper extends HttpServletRequestWrapper {
public MyServletRequestWrapper(HttpServletRequest httpServletRequest) {
super(httpServletRequest);
}
@Override
public String getHeader(String header_key) {
String header_val = super.getHeader(header_key);
if (header_key.equalsIgnoreCase("user-agent")) {
int index = header_val.indexOf("IE 7.0");
if (index != -1) {
StringBuffer temp_val = new StringBuffer(header_val);
temp_val = temp_val.replace(index, index + 6, "IE 8.0");
header_val = temp_val.toString();
}
}
return header_val;
}
@Override
public Enumeration getHeaders(String header_key) {
if (!header_key.equalsIgnoreCase("user-agent")) {
return super.getHeaders(header_key);
}
Vector<String> list = new Vector<String>(1);
String temp = this.getHeader(header_key);
list.add(temp);
return list.elements();
}
}

Step 3 :Register MyServletFilter in web.xml


<filter>
<filter-name>myServletFilter</filter-name>
<filter-class>com.servlet.filter.MyServletFilter</filter-class>
</filter>

 

Step 4: Add filter mapping in web.xml


<filter-mapping>
<filter-name>myServletFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

You are done J


ADF: Submit a form with the Enter key

0
  • Use af:form or af:subform
  • Specify the id attribute for the af:commandButton
  • Set the af:commandButton's id in the af:form's defaultCommand attribute.




Collapse/Expand PanelSplitter by maintaining its state in ADF

0
Add the following JavaScript below the af:document tag in your .jspx page 

< af: resource type="javascript"> 
function toggleSplitter(evt) {
            comp = evt.getSource().findComponent('pt_ps_alert');
            if (comp) {
                comp.setProperty("collapsed", !comp.getProperty("collapsed")); 
            }
        }
< / af:resource> 


 <af:commandImageLink id="list2"
                                                      styleClass="sprite alert pd12R">
  <af:clientListener method="toggleSplitter" type="click"/>
  </af:commandImageLink>

Above javaScript won't maintain the state of Collapse/Expand.

Use below Script to maintain the state in all the pages.

function toggleSplitter(evt) {

        comp = document.getElementById('pt1:pt_ps_alert::i');
        if(document.dispatchEvent){
            var click_ev = document.createEvent("MouseEvent");
            click_ev.initEvent("click", true , true );
            document.getElementById("pt1:pt_ps_alert::i").dispatchEvent(click_ev);
        }
        else {
            comp.click();
        }
     }

pt_ps_alert = PanelSplitter ID

This Script is tested in all browsers.

Refresh Page From Backing Bean in Oracle ADF

0
Refresh Full Page:


  1. protected void refreshPage() {
  2. FacesContext fctx = FacesContext.getCurrentInstance();
  3. String refreshpage = fctx.getViewRoot().getViewId();
  4. ViewHandler ViewH = fctx.getApplication().getViewHandler();
  5. UIViewRoot UIV = ViewH.createView(fctx, refreshpage);
  6. UIV.setViewId(refreshpage);
  7. fctx.setViewRoot(UIV);
  8. }

Partial Refresh with UIComponent:

UIComponent may be ....  :ptl:pgrl2 based on your jspx.


  1. AdfFacesContext.getCurrentInstance().addPartialTarget
    (UIComponent);

Get Your Adsense Account Approved Easily!!!

0

Follow below steps :

1. First, create a new Google account and set your location to UK or USA
2. Once you have created this account, go to YouTube and login with your new Google Account.
3. Head to this page: http://www.youtube.com/account_monetization and click "Enable Monetization"
5. Follow the instructions given at this stage you can enter your real country. 
6. Wait for confirmation email from AdSense. 

After you get the accept email :
If you want to use this with your blogger account, do this afterwards:

1. Go to Blogger.com
2. Click the Blog you want ads on.
3. Click Earnings
4. Click "Get Started"
5. Click "Link account"
 
Enjoyyyyyyyy !!!