Showing posts with label Embeded. Show all posts
Showing posts with label Embeded. Show all posts

Friday, March 8, 2013

Embedding OBIEE - PortalPages vs. syndicate=Siebel

There are times you might want to embed a Dashboard page in a web page.

There are 2 ways to achieve it:
1. PortalPages
2. syndicate=Siebel

While the PortalPages is well documented in Integrator's Guide for Oracle Business Intelligence Enterprise Edition (6.2.3 Optional Commands and Parameters for the Oracle BI Presentation Services Dashboard URL), I couldn't find anything regarding the very old option of syndicate, in the documentation.

PLEASE NOTE: At 11.1.1.7.0 and 11.1.1.6.10 patch, the problem described here with PortalPages is solved. Unfortunately it remains in cases of navigate to BI content. 

Please Note 2: The problem with navigate to BI Content was solved as well at some 
point and at least for version 11.1.1.7.150120 is working correctly as well. 

So it seems that PortalPages is the recommended Oracle way.


How to create the relevant GO_URL?
In OBIEE, go to the page you want to embed and  select  in the "Page Options", "Create Bookmark Link":

In the URL line I got the following (my server name is bdahab-il and port 7001, replace with your own settings):
http://bdahab-il:7001/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FSample%20Lite%2F_portal%2FQuickStart&Page=Overview&PageIdentifier=pp523ed1snrnjteh&BookmarkState=0duteshj7283qgbhsv3lhimhp6

I'm only interested in the first part :
http://bdahab-il:7001/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FSample%20Lite%2F_portal%2FQuickStart&Page=Overview

Where "PortalPath=%2Fshared%2FSample%20Lite%2F_portal%2FQuickStart" is the dashboard, and "Page=Overview" is the page in dashboard.

Now I can create a URL. In my URL I will also add user and password parameters. Of course you don't need it if you have Single Sign on.
For PortalPages the URL is:
http://bdahab-il:7001/analytics/saw.dll?PortalPages&PortalPath=%2Fshared%2FSample Lite%2F_portal%2FQuickStart&Page=Overview&NQUSER=weblogic&NQPASSWORD=weblogic123

And for syndicate=Siebel it is:
http://bdahab-il:7001/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FSample Lite%2F_portal%2FQuickStart&Page=Overview&NQUSER=weblogic&NQPASSWORD=weblogic123&syndicate=Siebel

* Please note: syndicate=Siebel requires the NQUSER and NQPASSWORD parameters. When running without them and getting to the LOGIN screen, it stops working.


By the way, the combination of both:
http://bdahab-il:7001/analytics/saw.dll?PortalPages&PortalPath=%2Fshared%2FSample Lite%2F_portal%2FQuickStart&Page=Overview&NQUSER=weblogic&NQPASSWORD=weblogic123&syndicate=Siebel
Is perfectly OK, as well.


What is the difference between them? Basically they cause the  same effect: you loose the top menu and logo. As a result you see the following:


Instead of this: 
The difference is what happens if you select another page in the dashboard. For example, if I click on the Details page in the Dashboard.


With PortalPage, the header returns:
This is usually not the desired behaviour.

With the syndicate=Siebel extension, the header remains hidden:


Navigate to BI Content, only syndicate=Siebel behaves well.
I will talk about a proper solution in later posts. Meanwhile, to hide the banner for specific dashboard, you can use the trick suggested by John Minkjan here:


Add a text object in each target dashboard. Mark the contains HTML and paste the following text (11g code):

<script type="text/javascript">
    var tds = document.getElementsByTagName('table');
    for (var td = 0; td < tds.length; td++) {
        if (tds[td].className != 'HeaderTopBar' && tds[td].className != 'HeaderSecondBar ' ) {
            continue;
        }
        if (tds[td].className == 'HeaderTopBar') {
        //alert (tds[td].className);
        var x = tds[td].parentNode;
        //alert (x.className);
        x.removeChild(tds[td]);}
        if (tds[td].className == 'HeaderSecondBar ') {
        //alert (tds[td].className);
        var x = tds[td].parentNode;
        //alert (x.className);
        x.removeChild(tds[td]);}
        }
</script>

 
like this:

The result changes from this:


To this:




Usually you don't need it, but if you insist, how can you Sign Out now?
With additional URL: http://bdahab-il:7001/analytics/saw.dll?Logoff


Thursday, January 24, 2013

Basic Embedding of Endeca Information Discovery

I wanted to test embedding of Endeca Information Discovery (EID) in basic iframe.

So I took the URL of specific dashboard page (http://localhost:8080/web/quickstart/products) and created the following sample1.html file:

<html>
<body>
<iframe style="width:1200;height:500" src=
"http://localhost:8080/web/quickstart/products"></iframe>
</html>

Now I wanted to do the same with parameters. To do it in EID you can use deeplink. It is documented in the Studio Users Guide, chapter 16.

The following simple deeplink worked fine for me: 
 (On data source "quickstart", set filter Color=Black). 

When I tried to run this URL in iframe I got an error:
Deep Link Error Malformed deeplink parameter value: must be a valid JSONArray


Here I got a tip from a colleague: replace the double quotes sign with its HTML code &#34.
This solved my problem and the following works as expected:

<html>
<body>
<iframe style="width:1200;height:500" src="http://localhost:8080/web/quickstart/products?deeplink=[{&#34quickstart&#34:{queryFunctions:[{&#34class&#34:&#34RecordFilter&#34,&#34recordFilter&#34:&#34Color:Black&#34}]}}]"></iframe>
</html>