Home
Analytics
Passing parameters to another report by hyperlinking (URI)
msnoeckx
<div><span>Hi,<br><br>
I'm developing Spago reports (.rptdesign) in BIRT and have a problem with passing parameters when hyperlinking to another report.<br>
Could anyone tell me what I am doing wrong here ?<br><br>
I have a master report and a slave report.<br>
On the master there is a hyperlink (URI) with following code:<br><br>
"javascript:parent.execCrossNavigation(this.name, 'Job_followup','AD_JobFU_jobname="+row["job_name"]+"&AD_JobFU_version="+row["version"]+"','','','self');"<br><br>
In the subreport I have a query with 2 values in the where condition that equal "?":<br><br>
select<br>
test.job_name,<br>
test.version::character varying(10)<br>
from test<br>
where test.job_name = ?<br>
and test.version = ?<br><br><br>
For this query 2 report parameters AD_JobFU_jobname & AD_JobFU_version are created, which are both strings and both have a default value.<br>
In the dataset I've linked the parameters to this report parameters.<br><br>
What is going wrong:<br><br>
When I open the master report in SpagoBI I can click the link and it goes to the slave report, but it always takes the default value.<br>
So in some way the parameters aren't passed to the slave report's dataset.<br><br>
Does anyone have an idea ??<br><br>
Thanks,<br><br>
Mike</span></div>
<p></p>
Find more posts tagged with
Comments
rgleason
<p>Are you able to use a "Drill Through" hyperlink type? Doing this will present to you a relative pathed report as well as any parameters contained within the target report. From here the hyperlink will be defined with mapped parameter values from the calling or master report. </p>
<p> </p>
<p>Otherwise a call will need to be made to the target report using a link using JSAPI and relevant parameter variables defined. </p>
<p> </p>
<p>Which method are you using? </p>
msnoeckx
<p>Hi rgleason,</p>
<p> </p>
<p>I've tried the drill through method, but this only works in Birt and not in SpagoBI (after deploying from Birt to SpagoBI).</p>
<p>That's why I try to use the URI hyperlink type with javascript.</p>
<p>By doing this, it links to the slave report, but it doesn't pass the parameters.</p>
rgleason
<p>I've created a testing page where I am passing parameters into a report request. </p>
<p>It will require a JSAPI functions similar to what you'll find in the html here: In this case I've created a simple page to call a specific report, passing parameter values into the submit. </p>
<p> </p>
<p> </p>
<div><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "<a data-ipb='nomediaparse' href='
http://www.w3.org/TR/html4/strict.dtd'>http://www.w3.org/TR/html4/strict.dtd"></a></div>
;
<div><html></div>
<div><head></div>
<div> <meta http-equiv="content-type" content="text/html;charset=utf-8" /></div>
<div> <script src="<a data-ipb='nomediaparse' href='
http://code.jquery.com/jquery-1.11.0.min.js'>http://code.jquery.com/jquery-1.11.0.min.js"></script></a></div>
;
<div> <script type="text/javascript" lang="JavaScript" src="
http://[your
BIRT Server instance]/jsapi"></script></div>
<div> <script type="text/javascript" lang="JavaScript"></div>
<div> var param;</div>
<div> function init() {</div>
<div> actuate.load("parameter");</div>
<div> actuate.initialize("
http://[your
BIRT Server instance]/", null, null, "", initParamModule);</div>
<div> }</div>
<div> </div>
<div> function initParamModule() {</div>
<div> param = new actuate.Parameter("paramContainer");</div>
<div> }</div>
<div> </div>
<div> </script></div>
<div> <title>Actuate Report</title></div>
<div></head></div>
<div><body></div>
<div> <input type="button" value="Display Report" onclick="javascript: showReport()" /></div>
<div> <hr></div>
<div> </div>
<div> </div>
<div> <div></div>
<div> <div style="width:200px;float:left;display:inline-block;background-color:LightGray;height:700px;"></div>
<div> </div>
<div> <div style="background-color:SpringGreen;"></div>
<div> <a href="#" onclick="window.open('<a data-ipb='nomediaparse' href='
http://www.google.com'>http://www.google.com</a>'
'newwindow', 'width=1200, height=250'); return false;">Google</a> </div>
<div> </div></div>
<div> <div style="background-color:cyan;"></div>
<div> <a href="#" onclick="window.open('<a data-ipb='nomediaparse' href='
http://www.yahoo.com'>http://www.yahoo.com</a>'
'newwindow', 'width=1200, height=250'); return false;">Yahoo</a> </div>
<div> </div></div>
<div> </div>
<div> </div></div>
<div> <div style="margin-left:200px;"></div>
<div> <iframe class="pdfframe frmPDF" style="width:100%; height:700px;"></iframe> </div>
<div> </div></div>
<div> </div>
<div></div> </div>
<div> <div id="paramContainer"></div></div>
<div> <div id="parameterListContainer"></div></div>
<div> </div>
<div> </div>
<div> </div>
<div> <script type="text/javascript"></div>
<div> $(document).ready(function () {</div>
<div> init();</div>
<div> });</div>
<div> showReport = function () {</div>
<div> </div>
<div> param.setReportName("/[Some Report].rptdesign");</div>
<div> param.downloadParameters(setParameters);</div>
<div> }</div>
<div> setParameters = function (pds) {</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var fileName = '[path to report].rptdesign';</div>
<div> var url = "[birt server]//[your BIRT context]/executereport.do?__executableName=" + fileName;</div>
<div> var qryString = "";</div>
<div> for (var i = 0; i < pds.length; i++) {</div>
<div> var paramCounter = i + 1;</div>
<div> switch (pds
.getName()) {</div>
<div> case '[
@Parameter1]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter1] ;</div>
<div> break;</div>
<div> case '[
@Parameter2]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter2] ;</div>
<div> break;</div>
<div> case '[
@Parameter3]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter3] ;</div>
<div> break;</div>
<div> case '[
@Parameter4]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter4] ;</div>
<div> break;</div>
<div> case '[
@Parameter5]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter5] ;</div>
<div> break;</div>
<div> case '[
@Parameter6]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter6] ;</div>
<div> break;</div>
<div> case '[
@Parameter7]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter7] ;</div>
<div> break;</div>
<div> case '[
@Parameter8]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter8] ;</div>
<div> break;</div>
<div> case '[
@Parameter9]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter9] ;</div>
<div> break;</div>
<div> case '[
@Parameter10]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter10] ;</div>
<div> break;</div>
<div> }</div>
<div> </div>
<div> }</div>
<div> url = url + qryString + "&invokeSubmit=true";</div>
<div> $(".frmPDF").attr("src", url);</div>
<div> }</div>
<div> </script></div>
<div></body></div>
<div> </div>
<div></html></div>
msnoeckx
<p>Hi rgleason,</p>
<p> </p>
<p>Thanks for the info.</p>
<p>I have found a much more simple resolution though.</p>
<p>Just as I was doing, but I had the URL in the analytical driver wrong. (Capital letter instead of regular)</p>
<p>So I just used:</p>
<p> </p>
<p>"javascript:parent.execCrossNavigation(this.name, 'Job_followup','AD_JobFU_jobname="+row["job_name"]+"&AD_JobFU_version="+row["version"]+"','','','self');"<br>
</p>
<p> </p>
<p>Thanks,</p>
<p>Mike</p>
<p> </p>
<blockquote class="ipsBlockquote" data-author="rgleason" data-cid="129716" data-time="1406637783">
<div>
<p> </p>
<p>I've created a testing page where I am passing parameters into a report request. </p>
<p>It will require a JSAPI functions similar to what you'll find in the html here: In this case I've created a simple page to call a specific report, passing parameter values into the submit. </p>
<p> </p>
<p> </p>
<div><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "<a data-ipb='nomediaparse' href='
http://www.w3.org/TR/html4/strict.dtd'>http://www.w3.org/TR/html4/strict.dtd"></a></div>
;
<div><html></div>
<div><head></div>
<div> <meta http-equiv="content-type" content="text/html;charset=utf-8" /></div>
<div> <script src="<a data-ipb='nomediaparse' href='
http://code.jquery.com/jquery-1.11.0.min.js'>http://code.jquery.com/jquery-1.11.0.min.js"></script></a></div>
;
<div> <script type="text/javascript" lang="JavaScript" src="
http://[your
BIRT Server instance]/jsapi"></script></div>
<div> <script type="text/javascript" lang="JavaScript"></div>
<div> var param;</div>
<div> function init() {</div>
<div> actuate.load("parameter");</div>
<div> actuate.initialize("
http://[your
BIRT Server instance]/", null, null, "", initParamModule);</div>
<div> }</div>
<div> </div>
<div> function initParamModule() {</div>
<div> param = new actuate.Parameter("paramContainer");</div>
<div> }</div>
<div> </div>
<div> </script></div>
<div> <title>Actuate Report</title></div>
<div></head></div>
<div><body></div>
<div> <input type="button" value="Display Report" onclick="javascript: showReport()" /></div>
<div> <hr></div>
<div> </div>
<div> </div>
<div> <div></div>
<div> <div style="width:200px;float:left;display:inline-block;background-color:LightGray;height:700px;"></div>
<div> </div>
<div> <div style="background-color:SpringGreen;"></div>
<div> <a href="#" onclick="window.open('<a data-ipb='nomediaparse' href='
http://www.google.com'>http://www.google.com</a>'
'newwindow', 'width=1200, height=250'); return false;">Google</a></div>
<div> </div></div>
<div> <div style="background-color:cyan;"></div>
<div> <a href="#" onclick="window.open('<a data-ipb='nomediaparse' href='
http://www.yahoo.com'>http://www.yahoo.com</a>'
'newwindow', 'width=1200, height=250'); return false;">Yahoo</a></div>
<div> </div></div>
<div> </div>
<div> </div></div>
<div> <div style="margin-left:200px;"></div>
<div> <iframe class="pdfframe frmPDF" style="width:100%; height:700px;"></iframe> </div>
<div> </div></div>
<div> </div>
<div></div> </div>
<div> <div id="paramContainer"></div></div>
<div> <div id="parameterListContainer"></div></div>
<div> </div>
<div> </div>
<div> </div>
<div> <script type="text/javascript"></div>
<div> $(document).ready(function () {</div>
<div> init();</div>
<div> });</div>
<div> showReport = function () {</div>
<div> </div>
<div> param.setReportName("/[Some Report].rptdesign");</div>
<div> param.downloadParameters(setParameters);</div>
<div> }</div>
<div> setParameters = function (pds) {</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var [Parameter1] = [value];</div>
<div> var fileName = '[path to report].rptdesign';</div>
<div> var url = "[birt server]//[your BIRT context]/executereport.do?__executableName=" + fileName;</div>
<div> var qryString = "";</div>
<div> for (var i = 0; i < pds.length; i++) {</div>
<div> var paramCounter = i + 1;</div>
<div> switch (pds
.getName()) {</div>
<div> case '[
@Parameter1]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter1] ;</div>
<div> break;</div>
<div> case '[
@Parameter2]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter2] ;</div>
<div> break;</div>
<div> case '[
@Parameter3]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter3] ;</div>
<div> break;</div>
<div> case '[
@Parameter4]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter4] ;</div>
<div> break;</div>
<div> case '[
@Parameter5]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter5] ;</div>
<div> break;</div>
<div> case '[
@Parameter6]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter6] ;</div>
<div> break;</div>
<div> case '[
@Parameter7]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter7] ;</div>
<div> break;</div>
<div> case '[
@Parameter8]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter8] ;</div>
<div> break;</div>
<div> case '[
@Parameter9]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter9] ;</div>
<div> break;</div>
<div> case '[
@Parameter10]
':<!--report parametername--</div>
<div> qryString = qryString + "&" + pds
.getName() + '=' + [Parameter10] ;</div>
<div> break;</div>
<div> }</div>
<div> </div>
<div> }</div>
<div> url = url + qryString + "&invokeSubmit=true";</div>
<div> $(".frmPDF").attr("src", url);</div>
<div> }</div>
<div> </script></div>
<div></body></div>
<div> </div>
<div></html></div>
<p> </p>
</div>
</blockquote>