Friday, April 8, 2011

OBIEE – Using single GO button for all prompts rather than multiple

Scenario – Your dashboard page has multiple prompts. The reason you have created multiple prompts is because few columns have constraint and you cannot club them together with non-constraint columns in the prompt, as value of any one column in the prompt will affect the values of constraint column. So you end-up creating different prompts. But the issue with different prompts is that multiple prompts will have different GO buttons. But the users do not want to click on different GO buttons for their values to reflect in the underlying report.

Solution – This scenario can have a Single GO Button as a solution, which can be created in addition to the different GO buttons coming by default with the different prompts. We will call this additional GO Button as the Global GO Button. This Global Go Button will take all the dashboard prompts filter entries and will submit them to the reports. Follow the following steps to create single GO button on the dashboard page. This change involves scripting/modifying some of OBIEE js files.

a. Add a new function to globalfilterprompt.js. This file resides into multiple locations
\OracleBI\oc4j_bi\j2ee\home\applications\analytics\analytics\res\b_mozilla\prompts
And
\OracleBI\web\app\res\b_mozilla\prompts.

If you are using OC4J, then add the following code in the former location and if you use Web Application Server, then add the code in the file at the later location.

Add the following code to the js file –

//Custom Function To be appended for the Custom Global Go button
function GFPDoFilters_samvi(sViewID, tTable, bGFPReloadInline){
if(sViewID==ksGFPStatePath)
return;

var tExpr = XUICreateElement(saw.xml.kSawxNamespace, 'expr');
tExpr.setAttribute("xsi:type", "sawx:logical");
tExpr.setAttribute("op", "and");

for(var h=0; h{
var tPromptCells_New = tTable[h].getElementsByTagName("TD");

for(var i=0; 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('Exception Resulted'+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");
}


var tForm = GetViewForm('', -1, bGFPReloadInline);

if(sViewID==ksGFPStatePath)
{
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;
}

b. Restart presentation service
c. Please go to the dashboard page, edit dashboard and add a “Text” dashboard object, after the prompts
d. Edit the Text object and paste the code attached below and check the “Contains HTML Markup” check-box. Please add script open and close tags to the attached code




e. Please save and you can validate the Global Go Button.

Pros:

1) This method is very helpful, where we need only one button to take the values of the rest of the prompt buttons.
2) Ease of using the multiple dashboard prompts
3) No effect of this button on any other dashboard pages or other projects.

Cons:

1) Oracle has not yet supported this in the forthcoming versions.

1 comment:

  1. hey i m getting this error
    Exception OccurredReferenceError: GFPDoFilters_samvi is not defined

    i don't know , why?

    ReplyDelete