Sunil S. Ranka’s Weblog

beginning of Blogs

What-If Analysis needs JavaScript on OBIEE

Posted by sranka on July 9, 2009

Hi All,

Apologies for not replying the comments and pings. Was caught up with OAUG conference in May, June was equally tough. My wife has started with her internship and daughter with day care. Life is getting hectic, but can’t complain.  Coming back to the jargon of — WHAT-IF ANALYSIS –. This was one the topic, at least talked about few time during OAUG. But it was always talked in conjunction with hyperion. After putting some thought, came to conclusion that some of the basic What-If can be done using Java Script.

At one of the client place, there was requirement for implementing a report, in which punching some number can project how many more $ worth of product selling needs to be done to attained the goal booking for the current quarter. This requirement was met using custom Java Script and few text box. Since it was very specific requirement, hence not sharing the code. But thought will just share the idea, so that any one want to create WHat-If in OBIEE dashboard, Java Script could be the way.

If you need more detail, you can send me email, I will be more than happy to answer the question.

Thanks

Sunil S Ranka

Posted in OBIEE | Tagged: , , , | Leave a Comment »

Way To Solve Multiselect Prompt Bug

Posted by sranka on April 6, 2009

Hi All,

Thanks for all the positive response . Its been while since I posted any thing. Been busy with preparing for my collaboration-09 presenation. Yes!!! I am presenting at OAUG’s collaboration-09 conference schedule in the 1st week of May in Florida. For people who are interested, topic would be — Need for web 2.0 and OBIEE integration –. Coming back to this post.

Faced some weird and unusual problem with Multiselect.  The problem was so severe that if you don’t have proper security implemented on RPD side, than any one can see any data. hmmmmmm.. sounds scary!! yes it is scary so here is what happens.  In the following image you get to see all the name of the countries from the selected continent.

Results when clicked on ... from the base page

Results when clicked on ... from the base page

The actual fun begins when you hit the Go button,  and irrespective of which continent has been selected all the countries in the world will get displayed. see the image attached

Results shown when clicked on the Go button on the result screen

Results shown when clicked on the Go button on the result screen

What is the issue :

After investigating found out that whenever GO button is clicked, the constraint value has not been passed and all the values from the dimensions, are been retrieved.

Solution:

To solve the issue we need to modify two javascript files residing in the folder res/b_mozilla/prompts/ :

  • globalfilterprompt.js changes to — GFPDoMultiSelect — function
  • gfpmultiselect.js changes to — GFPMultiSelect.prototype.search — function

Changes :

Following is the modified — GFPMultiSelect.prototype.search — function, all the text in the bold are the changes ::

GFPMultiSelect.prototype.search = function()
{
this.sWhere = “”;

var obj1 = window.parent.document.getElementById(”customMSPromptdiv”);

/* sranka — added for MultiSelect Data Persistance*/
try{
if(obj1.value == ”){
this.sWhere = ” ( 1 = 1 ) ” ;
}else{
this.sWhere =  obj1.value;
}
}catch(e){
this.sWhere = ” ( 1 = 1 ) ” ;
}

if(this.matchTable.style.display == ”)
{
if (this.searchForm.Constraint.value != “”)
{
var sValue = null;
switch (this.searchForm.Match.value)
{
case “beginsWith”:
sValue = GFPMultiSelect.SQLEscape(this.searchForm.Constraint.value) + “%”;
break;
case “endsWith”:
sValue = “%” + GFPMultiSelect.SQLEscape(this.searchForm.Constraint.value);
break;
case “contains”:
sValue = “%” + GFPMultiSelect.SQLEscape(this.searchForm.Constraint.value) + “%”;
break;
case “like”:
sValue = this.searchForm.Constraint.value;
}

if (sValue != null)
this.sWhere = this.sWhere + ” AND ” + this.vColumns[0] + ” LIKE ‘” + sValue + “‘”;

}
}
else if(this.dateTable.style.display == ”)
{
var tA = null;
var tB = null;

switch(GFPMultiSelect.primaryType)
{
case ‘date’:
tA = tDTP.parse(this.searchForm.BetweenA.value, 2 | 8 | 16 | 32);
tB = tDTP.parse(this.searchForm.BetweenB.value, 2 | 8 | 16 | 32);
break;
case ‘time’:
tA = tDTP.parse(this.searchForm.BetweenA.value, 4);
tB = tDTP.parse(this.searchForm.BetweenB.value, 4);
break;
case ‘timeStamp’:
// convert
tA = tDTP.parse(this.searchForm.BetweenA.value, 1 | 2 | 4 | 8 | 16 | 32);
tB = tDTP.parse(this.searchForm.BetweenB.value, 1 | 2 | 4 | 16 | 32);
//convert to data timezone
if (this.nDisplayToDataTZOffset)
{
if (tA != null)
tA.adjustTimeZoneOffset(this.nDisplayToDataTZOffset);
if (tB != null)
tB.adjustTimeZoneOffset(this.nDisplayToDataTZOffset);
}
break;
}

if(this.searchForm.BetweenA.value.length > 0 && !tA)
{
alert(kmsgWBInvalidInput + “\”" + this.searchForm.BetweenA.value + “\”");
return false;
}

if(this.searchForm.BetweenB.value.length > 0 && !tB)
{
alert(kmsgWBInvalidInput + “\”" + this.searchForm.BetweenB.value + “\”");
return false;
}

if(tA != null)
{
var sA = DateTimeParser.buildDateTimeClause(’>’, this.vColumns[0], GFPMultiSelect.primaryType, tA);

if(sA != null)
this.sWhere = sA;
}

if(tB != null)
{
var sA = DateTimeParser.buildDateTimeClause(’<’, this.vColumns[0], GFPMultiSelect.primaryType, tB);

if(sA != null)
this.sWhere = this.sWhere.length == 0 ? sA : (this.sWhere + ” AND ” + this.sWhere + ‘ AND ‘ + sA);

}

}
else if(this.numericTable.style.display == ”)
{
var tA = this.searchForm.BetweenNA.value;
var tB = this.searchForm.BetweenNB.value;

if(tA.length > 0)
{
tA = parseFloat(tA, 10);
this.sWhere = this.sWhere + ” AND ” + this.vColumns[0] + “>=” + tA;
}

if(tB.length > 0)
{
tB = parseFloat(tB, 10);
var clause = this.vColumns[0] + “<=” + tB;
this.sWhere = this.sWhere + ” AND ” + this.sWhere.length == 0 ? clause : this.sWhere + ” AND ” + clause;
}
}

this.choicesDiv.innerHTML = “”;
this.totalSpan.innerHTML = “0″;
this.totalSpan.setAttribute(”total”, 0);
this.moreLink.style.display = “none”;

VTDisplayValues(this.choicesDiv, this.vColumns, this.subjectArea, ‘kmsgGFPMultiSelectSearchValueTableRow’, this.sWhere, this.timeZone, this.timeZoneOffset,
’scroll’, this.sId, null, null, null, null, null, “idGFPMultiSelect” + this.sId);
}

Following is the modified — GFPDoMultiSelect– function, all the text in the bold are the changes ::

function GFPDoMultiSelect(tEvent, sTextAreaID, sColumn, sSubjectArea, sWhere, sID, sCategory, sPrimaryType, sDisplay, sSQL, sDataTimeZoneOffset, sDisplayTimeZone)
{

/* sranka — Added this code as patch for persisting values for MultiSelect */
var parentElem = window.parent.document.getElementById(sTextAreaID);
//alert(’GFPDoMultiSelect GlobalFilterPrompt.js :: ‘ +sTextAreaID);
var newdiv = window.parent.document.createElement(’input’);
var divIdName = ‘customMSPromptdiv’;
newdiv.setAttribute(’id’,divIdName);
newdiv.setAttribute(’name’,'name’);
newdiv.setAttribute(’value’,sWhere);
newdiv.setAttribute(’type’,'text’);

var browserName=navigator.appName;

if(browserName == ‘Netscape’){
parentElem.appendChild(newdiv);
}else{
window.parent.parent.document.body.appendChild(newdiv);
}

var tMultiSelect = new GFPMultiSelect();
var tDialog = new XUIDialog(”idGFPMultiSelect”+sID, tMultiSelect, null);
tDialog.show(null, -1, -1, null, null, null, null, true);
tMultiSelect.initialize(sTextAreaID, sColumn, sSubjectArea, sWhere, sID, sCategory, sPrimaryType, sDisplay, sSQL, sDataTimeZoneOffset, sDisplayTimeZone);

return false;
}

I hope this will help solving some of the issue. I know that the code I have provided is not well formatted, please ping me or leave me a message for any questions or difficulties.

Hope this helps

Thanks

Sunil S Ranka

Posted in ..., OBIEE | Tagged: , , , , , | 5 Comments »

How To Implement Breadcrumb in OBIEE / Siebel Analytics

Posted by sranka on December 7, 2008

Hi All,

Feeling accomplished as one more battle with Business has been won. Had a long debate over UI and usability of reports. Business kept complaining for certain navigation, and all I could say was, definitely will look into it. After every single discussion, felt helpless and incompetent. Spoke with folks at oracle support and got the same answer, “We don’t support this feature.”

Business had valid concern, all the needed was a mechanism to navigate back to the page they came from. In short they need the “BREADCRUMBS”.

The challenge was how to implement some thing like breadcrumb. Thought of many ways, even went to the extend of re writing some of the internal javascripts, but data and report persistent failed every time. At times I could navigate to the page, but the data integraty was lost between the pages.

One night got a dream that breadcrumbs are working on the application, but I knew the dream was too good to be true.

With all the knowledge of internal javascript, began my journey of debugging and wallahaa, got answer to the BREADCRUMB, thing which was sounding next to the impossible was possible now. See the image below ::

Bread Crumb

Bread Crumb

As the imagesI could click on UNITED STATES and could go back to level 1 of report, no need to clicking browser back button 4 times.

Below is the piece of code I used in the narrative view of the breadcrumb report. I know it may be difficult to understand, but I am open to work with individuals and can be reached email address provided in — About Me — page.

Following is the Javascript Code :

<span onclick=”javascript:PortalPageNav(event,’/shared/attach rate/_portal/2attach rate’,'Sales View – Detail’)” class=”Nav”><u>@1</u></span>
<img src=”https://www.microstrategy.com/graphics/Homepage/Feb05/icon_arrow_red.gif”>
<span onclick=”javascript:PortalPageNav(event,’/shared/attach rate/_portal/2attach rate’,'Sales View – Drill Down Level 2′)” class=”Nav”><u>@2</u></span>
<img src=”https://www.microstrategy.com/graphics/Homepage/Feb05/icon_arrow_red.gif”>
<span onclick=”javascript:PortalPageNav(event,’/shared/attach rate/_portal/2attach rate’,'Sales View – Drill Down Level 3′)” class=”Nav”><u>@3</u></span>
<img src=”https://www.microstrategy.com/graphics/Homepage/Feb05/icon_arrow_red.gif”>
<span onclick=”javascript:PortalPageNav(event,’/shared/attach rate/_portal/2attach rate’,'Sales View – Drill Down Level 4′)” class=”Nav”><u>@4</u></span>
<img src=”https://www.microstrategy.com/graphics/Homepage/Feb05/icon_arrow_red.gif”>
<span onclick=”javascript:PortalPageNav(event,’/shared/attach rate/_portal/2attach rate’,'Sales View – Drill Down Level 5′)” class=”Nav”><u>@5</u></span>

Apologies for any confusion, but breadcrumbs are confusing, please ping me or call me for this implemetation. I would be more than happy to help out on the implementation aspect.

Posted in OBIEE | Tagged: , , , , , , , | 6 Comments »

How To Replace Multiple Go Button By One Go Button In Prompts

Posted by sranka on November 9, 2008

Hi All,

Waited too long for posting. Been thinking about posting 3-4 blog entries, but release cycle kept me busy. For this blog content, all  excitement began on Friday evening, one of the project manager, from other group called me and asked me if I could help them with one of their business show stopper, may result in delaying Go-Live.  The problem statement was very simple :

Business doesn’t like multiple Go button when they need to use multiple prompts on the same dashboard page.

Following was Oracle’s stance :

Can not be done in Maui (10.3.X), but they will have it in the next release. (Schedule for next summer)

Last week end, worked through Sunday till Tuesday on working this particular problem. We faced the same problem about 1.5 years back, but business was not that tough that time, but this time it was do or die situation. There were many suggestions, one of the suggestion was to integrate Java and OBIEE. Have prompts define in Java and pass on the values to OBIEE, with the mean of SSO, GoNav, GoURL etc… From architectural and presentational point of view, the solution looked great, but implementation sounded really scary. One tiger team was formed to solve the problem. After listening and understanding the problem, I asked for couple of hours to find solution to the problem withing OBIEE.

Following images shows, what OBIEE provides out of box :

Multiple Go Button

Following images shows, what Businees Requirement was :

Single Custom Go Button

Single Custom Go Button

Following are the steps ::

Add following piece of code in C:\OracleBI\oc4j_bi\j2ee\home\applications\analytics\analytics\res\b_mozilla\calendar.js file under — DoLoad() — function

// sranka — following is the customize code writting by sranka for hidding standard Gobutton

var tCustomTagX  = ”;
try{
tCustomTagX = document.getElementById(”customTag”); // Need to create a hidden input as customTag in the report
}catch(e){
tCustomTagX = ”;
}

try{
if(tCustomTagX.value == “customTag”){
custom_hideGoButton();
}
}catch(e){}

// End of customize code by sranka

Add the following function in calendar.js file :

// samvi :: sranka — custom Java Script for Hiding the Go Button

function custom_hideGoButton()
{

try{
var aElm=document.getElementsByTagName(’span’);
for(var i=0; i<aElm.length; i++) {
if (aElm[i].innerHTML.indexOf(’GFPDoFilters’) > -1)
{
aElm[i].style.display = “none”;
}//if
}// for
}// try
catch(e)
{alert(’ Error in calendar.js sranka :: ‘ + e);}

} // end of hideGoButton

Create a dummy HTML tag with following type and value. (This should be the 1st element on the page) ::
<input type=”hidden” id=”customTag” name=”customTag” value=”customTag”/>
Use following JS for hiding the Go Button:
<script>
try{
var aElm=document.getElementsByTagName(’span’);
for(var i=0; i<aElm.length; i++) {
if (aElm[i].innerHTML.indexOf(’GFPDoFilters’) > -1)
{
aElm[i].style.display = “none”;
}//if
}// for
}// try
catch(e)
{alert(’ XXX ‘ + e);}
</script>
Add following piece of code in 

C:\OracleBI\oc4j_bi\j2ee\home\applications\analytics\analytics\res\b_mozilla\prompts\globalfilterprompts.js
//——————-
// Called by form onsubmit to move all filter data into the main view form

// —- start of customization for hidding GoButton — Modified by Sunil S Ranka (sranka)

function GFPDoFilters_samvi(sViewID, tTable, bGFPReloadInline)
{
// RIE: calling GFPDoFilters in preview mode
// doesn’t do anything so we are going to just return
if(sViewID == ksGFPStatePath) // ksGFPStatePath = o:preview~g:globalfilter
return;

var tExpr = XUICreateElement(saw.xml.kSawxNamespace, ‘expr’);
tExpr.setAttribute(”xsi:type”, “sawx:logical”);
tExpr.setAttribute(”op”, “and”);

for (var h = 0; h < tTable.length; ++h)
{
var tPromptCells_New = tTable[h].getElementsByTagName(”TD”);

for (var i = 0; i < tPromptCells_New.length; ++i)
{
var tElement = tPromptCells_New[i];
if (tElement.getAttribute(”GFPBuilder”) != null)
{
try
{
var tFilter = eval(tElement.getAttribute(”GFPBuilder”));
if (tFilter)
{
tExpr.appendChild(tFilter);
}
}
catch (e)
{
alert(’XXXX ‘ + e);
return;
}
}
}

}

/*
var tPromptCells = tTable.getElementsByTagName(”TD”);
for (var i = 0; i < tPromptCells.length; ++i)
{
var tElement = tPromptCells[i];
if (tElement.getAttribute(”GFPBuilder”) != null)
{
try
{
var tFilter = eval(tElement.getAttribute(”GFPBuilder”));
if (tFilter)
{
tExpr.appendChild(tFilter);
}
}
catch (e)
{
alert(e);
return;
}
}
}

*/

var tDelayedDash = document.getElementById(”sawDashboardDelayed”);

if (tExpr.childNodes.length == 0 && !document.getElementById(”sawDashboardDelayed”))
return false;
else if (tExpr.childNodes.length == 0)
tExpr = null;
else if (tExpr.childNodes.length == 1)
tExpr = tExpr.childNodes[0];

if (tExpr)
{
tExpr.setAttribute(”xmlns:xsi”, “http://www.w3.org/2001/XMLSchema-instance”);
}

// inline report load support on dashboard
// now we have a switch to control whether we do it inline
var tForm = GetViewForm(”, -1, bGFPReloadInline);

if (sViewID == ksGFPStatePath) // the view id (for GFP preview) is recently changed to this
{
//tForm.P1.value = saw.getXmlText(document.getElementById(”idXUIGFPPreview”)); //this doesn’t work
var tRoot = XUIGetRootXML(”idXUIGFPPreview”);
tForm.P1.value = saw.getXmlText(saw.getFirstChildElement(tRoot));
tForm.action = saw.commandToURL(”ViewPreview”);
submitViewForm(tForm,null);
return;
}

GFPApplyFilters(tForm,tExpr, sViewID);
return false;
}


Use Following JS for creating customGo button :
<script>
/* created by sranka
function customCall()
{
try{
var aElm=document.getElementsByTagName(’table’);
var tTableArray = new Array();
var k = 0;
for(var i=0; i<aElm.length; i++) {
if(aElm[i].className==’GFPBox’) {
tTableArray[k] =  document.getElementById(aElm[i].id);
k++;
}
}
GFPDoFilters_samvi(”,tTableArray,true);
}
catch(e)
{alert(’ XXX ‘ + e);}
}
</script>

<td class=”GFPSubmit”><table cellspacing=”0″>
<tbody><tr>
<td class=”XUIPromptEntry”><span class=”minibuttonOn”><a onclick=”javascript:customCall();” href=”javascript:void(null)”>Custom Go New</a></span><div value=”dashboard” id=”d:dashboard~p:b10pia6cf02k1ngq~s:j8obsfvm99vnd77s~g:c7te6i611dqgunnkScope”/></td>
</tr>
<tr>
<td/>
</tr>
</tbody></table>
</td>
Hope this helps
Sunil S Ranka

Posted in OBIEE | Tagged: , , , , , , | 24 Comments »

My Music and DJ Group

Posted by sranka on October 19, 2008

Music and Marketing is some thing what I always loved, to accomplish that dream I manage a Professionally run Music Group. We are team of Professional running Sargam Sangeet Group, a Professional Musical Group as Hobby and every one knows –”Best Music is Played By People, Who Do it As Hobby”. We do DJ, Karaoke, and Live Singing for Parties, wedding receptions, birthdays, corporate parties and other occasions. Do let me know if you and your friends need any of these kinds of services.

I can be reached at 408 242 8232

Looking Forward to hear from you.

Sunil S Ranka
(Marketing Manager)

Posted in My Music Group | Tagged: , , , , , , , , | Leave a Comment »

Performance Measurement of an OBIEE Application

Posted by sranka on June 20, 2008

Hi All

Its been over a year since, we been having fights/argument with Business regarding application performance, IT kept claiming that application performances well, but business kept saying — “I can click on a page and go for coffee and come back, go for lunch come back, go for meetings and come back and still page keeps running”. Of course I am exaggerating. Along with the database team and DBA we worked on the issue and got to the point where we felt results were good but still it was never ending battle with business.

With frustration, we started looking at the other avenues. Just to horn my webdevelopment skills, downloaded Firebug, the great Mozilla extension and found an option Net withing the utility. Net option does nothing but the “Network Monitoring “.

Looking at the statistics on Net option, I was amazed that almost 20% of the time was taken by CSS and .js. Having said this, doesn’t mean that our reports were superfast, but agreement of 9sec per report was not achievable as CSS and JS were taking around 3.5 seconds. Apart from the CSS, there were few gif files were missing and http request to get those images were taking almost 1.5-2sec. All these things were adding up to the report rendering.

In the above screen shot you can see that the total time (22.08 sec) taken by the request to render on to the page. Look at the saw.dll, this is nothing but the report request to SAS server taking over 19.52 sec and rest is Java Script,CSS, images and etc.

Coming back to the main point, if you guys are profiling your application and doing the application base line, I would highly encourage using Firebug tool. Also keep in mind that its just not the query which constitutes the report performance but the CSS,JS and other things also contributes to it. Along with Firebug you can use Yahoo slow utility. It gives the nice pie view of the total time spent. see the screen shot below.

Yahoo Slow

For more details on how to use Firebug in general go to http://getfirebug.com/. For yahoo slow, go to http://developer.yahoo.com/yslow/.

In case of any questions, please email me at sunil_ranka@yahoo.com. If need arise I can do a conference call.

Hope this helps

Sunil S Ranka

Posted in OBIEE | Tagged: , , , , , , , , | Leave a Comment »

Enabling SSO Authentication for OBIEE

Posted by sranka on June 6, 2008

Hi All

Today I would like to write about how to enable the SSO (Single Sign On) for OBIEE.  To start with what is SSO following is the technocal definition of SSO :– Single sign-on (SSO)is a session/user authentication process that permits a user to enter one name and password in order to access multiple applications. The process authenticates the user for all the applications they have been given rights to and eliminates further prompts when they switch applications during a particular session.  For details please google and you will find lot many details. The above definition has been picked from TechTarget.

How User gets interpreted in SSO environment ::

In an environment where SSO has been implemented, when Oracle BI Presentation Services receives
an incoming web request, it assumes that the user who issued the request has already been
authenticated by the SSO system. Oracle BI Presentation Services uses its own credentials to
establish a connection with the Oracle BI Server on behalf of the end user. User personalization and
access controls such as data-level security are maintained in this environment. Oracle BI
Presentation Services then uses the Oracle BI Server Impersonation feature to create a connection
to the Oracle BI Server on behalf of the authenticated end user. 

1. To implement following changes needs to be done in instanceConfig.xml file :

<!– other settings … –>
<Auth>
<SSO enabled=”true”>
<ParamList>
<!–IMPERSONATE param is used to get the authenticated user’s username and is required –>
<Param name=”IMPERSONATE” source=”serverVariable”nameInSource=”REMOTE_USER”/>
</ParamList>
</SSO>
<!– other settings … –>

2. Along with this a user with name  IMPERSONATE needs to be created in the repository.

3. Impersonator User Credentials needs to be added to Oracle BI Presentation Services Credential Store

The default location of the credentialstore.xml file is OracleBIData_HOME\web\config on Windows and OracleBIData_HOME/web/config on Linux or UNIX.

4. To Add impersonator user credentials to Oracle BI Presentation Services Credential Store.

Navigate to the directory OracleBI_HOME\web\bin on Windows or OracleBI_HOME/web/bin on
Linux or UNIX. This is the location for the CryptoTools utility.

Execute the CryptoTools utility to add the impersonator user credentials to the Oracle BI
Presentation Services Credential Store:
cryptotools credstore -add -infile <OracleBIData>/web/config/credentialstore.xml

Following is the example for cryptotool utility

cryptotools credstore -add -infile <OracleBIData>/web/config/credentialstore.xml
>Credential Alias: impersonation
>Username: Impersonator
>Password: secret
>Do you want to encrypt the password? y/n (y):
>Passphrase for encryption: another_secret
>Do you want to write the passphrase to the xml? y/n (n):
>File “<OracleBIData>/web/config/credentialstore.xml” exists. Do you want to
overwrite it? y/n (y): 

Passphrase for encryption : Whatever value you pass for this argument, do remember it as this needs to be used in the instanceConfig.xml

5. configure Oracle BI Presentation Services to identify the Credential Store and decryption passphrase

1 Open the instanceconfig.xml file for editing.
2 Locate the <CredentialStore> node within this file.
Specify attribute values as shown below. If the <CredentialStore> node does not exist, create
this element with sub-elements and attributes with attribute values as shown in the following
example.
<WebConfig>
<ServerInstance>
<!– other settings … –>
  <CredentialStore>
     <CredentialStorage type=”file” path=”<path to credentialstore.xml>” passphrase=”<passphrase>”/>
<!– other settings … –>
  </CredentialStore>
<!– other settings … –>
</ServerInstance>
</WebConfig>

6. Configure optional Logoff/Logon URLs.

In environments where Single Sign-On (SSO) is enabled, you can configure log out and log on
links to appear on Oracle BI Presentation Services screens (Login and logout screens). To do so, you add the elements shown in the following table as children of the SSO element in the instanceconfig.xml file.

<!– other settings … –>
<Auth>
<SSO enabled=”true”>
<LogoffUrl>http://hostname:port/the_url_to_logoff_sso</LogoffUrl>
<LogonUrl>http://hostname:port/the_url_to_logon_sso</LogonUrl>
<ParamList>
<!–IMPERSONATE param is used to get the authenticated user’s username and is required –>
<Param name=”IMPERSONATE” source=”serverVariable”nameInSource=”REMOTE_USER”/>
</ParamList>
</SSO>
<!– other settings … –>

Hope this helps

Sunil S Ranka

PS ::For more details please refer to the online oracle documentation.

Posted in OBIEE | Tagged: , , , , | 10 Comments »

Style Sheet changes (custom look and feel) in OBIEE

Posted by sranka on May 23, 2008

Hi All,

Here I will try to talk about one of the famous problem every one talks about the look and feel change of the OBIEE dashboard out of the box . Spent last whole week figuring out how to achieve the same look and feel for new upgraded Dashboard vs the old dashboard. To my surprise the changes lied in only 4 xml and 3 css files. After going through whole OBIEE documentation and Venkant’s blog things looked simple but they were not that simple. Here I will try to simplify things more. To change UI all it take is to make changes to following files

1.   Logon.css – Stylesheet that sets the font sizes, background color etc resides under Res\sk_Oracle10\b_mozilla_4 folder
2.   LogonControlMessages.xml under web\msgdb\messages folder
3.   LogonMessages.xml  under web\msgdb\l_XX\messages folder
4.   ProductMessages.xml under web\msgdb\l_XX\messages folder
5.   Utilmessages.xml under web\msgdb\l_XX\messages folder
6.   sk_oracle10 – Base skin which provides the images for the login screen.

The key point is to copy all the XML you are going to make the change into the following directory ::

C:\OracleBIData\web\msgdb\customMessages.

And all the CSS file needs to be copied at the folder — C:\OracleBIData\web\Res 

If you are using IIS as your webserver than things are much easier as you don’t need to go through many hoops as analyticsRes. But if you are using any other webserver than make sure you copy all the changed files (primarily css files) on to the webserver directory e.g. in case of OC4J copy the files at C:\OracleBI\oc4j_bi\j2ee\home\applications\analytics\analytics\res folder.

With my understanding all the CSS will be picked from the Webserver (Oc4J or IIS or Websphere) where in all the XML files will be picked from SAW server.

One more thing what we did was including some of the Java Scripts, we modified commonuitemplates.xml file residing at C:\OracleBI\web\msgdb\messages.

See below some code snippet

<a href=”@{dashboardsURL}” target=”@{target}”><sawm:messageRef name=”kmsgUIPortal”/></a></td>
<td class=”@{classPrefix}Sep”>|</td>
<script src=”
https://XXXXX.com/MyFolder/j/MyJs.js”></script>
</sawm:if><sawm:if name=”answersURL”><td class=”<sawm:param name=”classPrefix”/><sawm:if name=”product” op=”equals” value=”answers”>Active</sawm:if>ProductCell”>
<a href=”@{answersURL}” target=”@{target}”><sawm:messageRef name=”kmsgUIAnswers”/></a></td></sawm:if><sawm:if name=”advReportingURL||deliversURL||marketingURL||mobileURL||officeURL”><td class=”@{classPrefix}Sep”>

 My next assigment is to open up Answers to end users. Than I will work on making Answers Look and feel same as the dashboard. I will keep you all posted.

Hope this helps

Sunil S Ranka

Posted in OBIEE | Tagged: , , , , , , , , | 5 Comments »

Hello world!

Posted by sranka on May 19, 2008

Hi All

Been thinking about writing blogs for a while, but I guess things only happens only when they really happens. “Hello World” reminds me my 1st year engineering days, C class and the 1st program was “Hello Word”. Very important word. I would say that class is the the class which is paying for my bills. Its 10:42PM here and guess time to sleep but one more day passed with the thoughts of doing some thing different and big for the world or big in the world. I am confident that I will make it big.  I am not meant for what I am doing today. Doesn’t mean I am not good in what I am doing, but can be much better in other things. Need a push and things will happen .

Well its the 1st blog, don’t anticipate many people to read this, but will have at least one reader. My wife Rinku or may be my computer savy dad Sampatrajji Ranka.

See ya guys

Sunil S Ranka

Posted in Me | Tagged: , , , , | 4 Comments »