Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » BIRT » How to fetch nested data for subreport in Birt Report(Java Object and a scripted nested subreport )
How to fetch nested data for subreport in Birt Report [message #526118] Thu, 08 April 2010 18:08 Go to next message
Amy  is currently offline Amy Friend
Messages: 29
Registered: April 2010
Junior Member
Hi,
I'm new to BIRT. I try to created a BIRT Report for a java based application. I got data from application. The object like this :
Public class StateSchools
{
Private stateName
Private state EDU Name
Private state EDU Phone
Private <List> countySchools
}

Public class CountySchools
{
Private countyName
Private school Type
Private <List> schoolDetail
}

Public class SchoolDetail
{
Private schoolName
Private studentDetail
Private schoolPhone
}

I passed <List> StateSchools List object to report script side and need use the information to create my dataset.
When I fetch the data, I have trouble to get data for my 3 tables data sets.

I created 3 data sets first:
StateSchools
CountySchools
SchoolDetail

I got data for StateSchools data set without issue :
Using scripted data source
Open:
count = 0;
schoolDao = new Packages.com...ReportSchoolDao();
rptSchoolList = schoolDao.getReportSchoolList();
var rptCountySchoolsList;
var rptSchool;

Fetch:
if(count < rptSchoolList.size())
{
rptSchool = rptSchoolList.get(count);
row["StateName "] = rptSchool.getStateName ();
row["state EDU Name "] = rptSchool.getState EDU Name ();
row["State EDU Phone "] = rptSchool.get State EDU Phone ();

rptCountySchoolsList = rptSchool.getReportCountySchools();

count++;
return true;
}

return false;

I have trouble to get data for my CountySchools and SchoolDetail data set.

I use fectch for countySchool:

Open:
countCountySchool = 0;
rptCountySchoolList = rptQuote.getReportCountySchool();

Fetch:
if(countCountySchool < rptSchool.getReportCountySchools().size())
{


rptCountySchool = rptCountySchoolList.get(countCountySchool);

row["CountyName "] = rptCountySchool.getCountyName() ;
row["SchoolType "] = rptCountySchool.getSchoolType() ;


rptSchoolDetailList = rptCountySchool.getReportSchoolDetail();

countCountySchool++;

return true;
}

return false;

I always get the last row of record for my CounySchool data set. And no data for SchoolDetail at all.

Can some people help me?
Thanks!

Re: How to fetch nested data for subreport in Birt Report [message #526365 is a reply to message #526118] Fri, 09 April 2010 20:20 Go to previous messageGo to next message
Jason Weathersby is currently offline Jason WeathersbyFriend
Messages: 9167
Registered: July 2009
Senior Member

Amy

I assume the inner datasets reference the nested list from the outer.
In this case you need to parameterize the inner datasets. Take a look
at the script on the attached example.

Also drop the var keyword in your open scripts to make them global to
the dataset.

Jason

<?xml version="1.0" encoding="UTF-8"?>
<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.21"
id="1">
<property name="comments">Copyright (c) 2006 &lt;&lt;Your Company
Name here>></property>
<property name="createdBy">Eclipse BIRT Designer Version
2.5.2.v20100208 Build &lt;2.5.2.v20100210-0630></property>
<property name="units">in</property>
<method name="beforeFactory"><![CDATA[myArray = [];
ctr=0;
rctr=0;]]></method>
<property name="layoutPreference">auto layout</property>
<data-sources>
<script-data-source name="Data Source" id="4"/>
</data-sources>
<data-sets>
<script-data-set name="outer" id="5">
<list-property name="resultSetHints">
<structure>
<property name="position">1</property>
<property name="name">c1</property>
<property name="dataType">integer</property>
</structure>
</list-property>
<list-property name="columnHints">
<structure>
<property name="columnName">c1</property>
</structure>
</list-property>
<structure name="cachedMetaData">
<list-property name="resultSet">
<structure>
<property name="position">1</property>
<property name="name">c1</property>
<property name="dataType">integer</property>
</structure>
</list-property>
</structure>
<property name="dataSource">Data Source</property>
<method name="open"><![CDATA[i=0;]]></method>
<method name="fetch"><![CDATA[if (i++ >10)
return false;
else {
row.c1=i;
return true;
}]]></method>
</script-data-set>
<script-data-set name="inner" id="6">
<list-property name="resultSetHints">
<structure>
<property name="position">1</property>
<property name="name">c2</property>
<property name="dataType">integer</property>
</structure>
</list-property>
<list-property name="columnHints">
<structure>
<property name="columnName">c2</property>
</structure>
</list-property>
<list-property name="parameters">
<structure>
<property name="name">startval</property>
<property name="dataType">integer</property>
<property name="position">1</property>
<expression name="defaultValue">1</expression>
<property name="isInput">true</property>
</structure>
</list-property>
<structure name="cachedMetaData">
<list-property name="resultSet">
<structure>
<property name="position">1</property>
<property name="name">c2</property>
<property name="dataType">integer</property>
</structure>
</list-property>
</structure>
<property name="dataSource">Data Source</property>
<method name="open"><![CDATA[j =
inputParams["startval"];]]></method>
<method name="fetch"><![CDATA[if (j ++ >=6)
return false;
else {
row.c2=j;
return true;
}]]></method>
</script-data-set>
</data-sets>
<styles>
<style name="table-header" id="37">
<property name="backgroundColor">#6078BF</property>
<property name="fontFamily">"Arial"</property>
<property name="fontSize">small</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="paddingTop">0px</property>
<property name="paddingLeft">0px</property>
<property name="paddingBottom">0px</property>
<property name="paddingRight">0px</property>
</style>
<style name="table-footer" id="38">
<property name="backgroundColor">#6078BF</property>
<property name="fontFamily">"Arial"</property>
<property name="fontSize">small</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="paddingTop">0px</property>
<property name="paddingLeft">0px</property>
<property name="paddingBottom">0px</property>
<property name="paddingRight">0px</property>
</style>
<style name="table-detail" id="39">
<property name="backgroundColor">#E6ECFF</property>
<property name="fontFamily">"Arial"</property>
<property name="fontSize">x-small</property>
<property name="fontWeight">bold</property>
<property name="color">#000080</property>
<property name="paddingTop">0px</property>
<property name="paddingLeft">0px</property>
<property name="paddingBottom">0px</property>
<property name="paddingRight">0px</property>
</style>
<style name="table-group-header-1" id="40">
<property name="backgroundColor">#809FFF</property>
<property name="fontFamily">"Arial"</property>
<property name="fontSize">small</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="paddingTop">0px</property>
<property name="paddingLeft">0px</property>
<property name="paddingBottom">0px</property>
<property name="paddingRight">0px</property>
</style>
<style name="table-group-footer-1" id="41">
<property name="backgroundColor">#809FFF</property>
<property name="fontFamily">"Arial"</property>
<property name="fontSize">small</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="paddingTop">0px</property>
<property name="paddingLeft">0px</property>
<property name="paddingBottom">0px</property>
<property name="paddingRight">0px</property>
</style>
<style name="special-header" id="42">
<property name="backgroundColor">#6078BF</property>
<property name="fontFamily">"Arial"</property>
<property name="fontSize">medium</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="paddingTop">0px</property>
<property name="paddingLeft">0px</property>
<property name="paddingBottom">0px</property>
<property name="paddingRight">0px</property>
</style>
<style name="crosstab-detail" id="43">
<property name="backgroundColor">#E6ECFF</property>
<property name="fontFamily">"Arial"</property>
<property name="fontSize">x-small</property>
<property name="fontWeight">bold</property>
<property name="color">#000080</property>
<property name="paddingTop">0px</property>
<property name="paddingLeft">0px</property>
<property name="paddingBottom">0px</property>
<property name="paddingRight">0px</property>
</style>
<style name="crosstab-header" id="44">
<property name="backgroundColor">#6078BF</property>
<property name="fontFamily">"Arial"</property>
<property name="fontSize">small</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="paddingTop">0px</property>
<property name="paddingLeft">0px</property>
<property name="paddingBottom">0px</property>
<property name="paddingRight">0px</property>
</style>
</styles>
<page-setup>
<simple-master-page name="Simple MasterPage" id="2">
<property name="topMargin">1in</property>
<property name="leftMargin">1.25in</property>
<property name="bottomMargin">1in</property>
<property name="rightMargin">1.25in</property>
<page-footer>
<text id="3">
<property name="contentType">html</property>
<text-property
name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>
</text>
</page-footer>
</simple-master-page>
</page-setup>
<body>
<table id="55">
<property name="width">100%</property>
<property name="dataSet">outer</property>
<list-property name="boundDataColumns">
<structure>
<property name="name">c1</property>
<expression
name="expression">dataSetRow["c1"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">Column Binding</property>
<expression name="expression">var rtn =myArray[rctr];
rctr++;
rtn;</expression>
<property name="dataType">integer</property>
</structure>
</list-property>
<property name="pageBreakInterval">50</property>
<column id="77"/>
<column id="78"/>
<column id="82"/>
<header>
<row id="56">
<cell id="57">
<label id="58">
<text-property name="text">c1</text-property>
</label>
</cell>
<cell id="59"/>
<cell id="79">
<label id="83">
<text-property
name="text">combination</text-property>
</label>
</cell>
</row>
</header>
<detail>
<row id="60">
<cell id="61">
<data id="62">
<property name="resultSetColumn">c1</property>
</data>
</cell>
<cell id="63">
<table id="64">
<property name="width">100%</property>
<property name="dataSet">inner</property>
<list-property name="paramBindings">
<structure>
<property
name="paramName">startval</property>
<expression
name="expression">row["c1"]</expression>
</structure>
</list-property>
<list-property name="boundDataColumns">
<structure>
<property name="name">c2</property>
<expression
name="expression">myArray[ctr] = dataSetRow["c2"]*row._outer["c1"];
ctr++;
dataSetRow["c2"];</expression>
<property
name="dataType">integer</property>
</structure>
<structure>
<property name="name">Column
Binding</property>
<expression
name="expression">row._outer[row.__rownum]</expression>
<property
name="dataType">string</property>
</structure>
</list-property>
<property
name="pageBreakInterval">50</property>
<column id="73"/>
<header>
<row id="65">
<cell id="66">
<label id="67">
<text-property
name="text">c2</text-property>
</label>
</cell>
</row>
</header>
<detail>
<row id="68">
<cell id="69">
<data id="70">
<property
name="resultSetColumn">c2</property>
</data>
</cell>
</row>
</detail>
<footer>
<row id="71">
<cell id="72"/>
</row>
</footer>
</table>
</cell>
<cell id="80">
<data id="84">
<property name="resultSetColumn">Column
Binding</property>
</data>
</cell>
</row>
</detail>
<footer>
<row id="74">
<cell id="75"/>
<cell id="76"/>
<cell id="81"/>
</row>
</footer>
</table>
</body>
</report>


Amy wrote:
> Hi,
> I'm new to BIRT. I try to created a BIRT Report for a java based
> application. I got data from application. The object like this :
> Public class StateSchools
> {
> Private stateName
> Private state EDU Name
> Private state EDU Phone
> Private <List> countySchools
> }
>
> Public class CountySchools
> {
> Private countyName
> Private school Type
> Private <List> schoolDetail
> }
> Public class SchoolDetail
> {
> Private schoolName
> Private studentDetail
> Private schoolPhone
> }
>
> I passed <List> StateSchools List object to report script side and
> need use the information to create my dataset.
> When I fetch the data, I have trouble to get data for my 3 tables
> data sets.
> I created 3 data sets first:
> StateSchools
> CountySchools
> SchoolDetail
>
> I got data for StateSchools data set without issue :
> Using scripted data source Open: count = 0;
> schoolDao = new Packages.com...ReportSchoolDao();
> rptSchoolList = schoolDao.getReportSchoolList();
> var rptCountySchoolsList;
> var rptSchool;
>
> Fetch:
> if(count < rptSchoolList.size())
> {
> rptSchool = rptSchoolList.get(count);
> row["StateName "] = rptSchool.getStateName ();
> row["state EDU Name "] = rptSchool.getState EDU Name ();
> row["State EDU Phone "] = rptSchool.get State EDU Phone ();
>
> rptCountySchoolsList = rptSchool.getReportCountySchools();
>
> count++;
> return true;
> }
>
> return false;
>
> I have trouble to get data for my CountySchools and SchoolDetail data
> set.
> I use fectch for countySchool:
>
> Open:
> countCountySchool = 0;
> rptCountySchoolList = rptQuote.getReportCountySchool();
>
> Fetch:
> if(countCountySchool < rptSchool.getReportCountySchools().size())
> {
>
>
> rptCountySchool = rptCountySchoolList.get(countCountySchool);
>
> row["CountyName "] = rptCountySchool.getCountyName() ; row["SchoolType
> "] = rptCountySchool.getSchoolType() ;
> rptSchoolDetailList =
> rptCountySchool.getReportSchoolDetail();
> countCountySchool++;
> return true;
> }
>
> return false;
>
> I always get the last row of record for my CounySchool data set. And
> no data for SchoolDetail at all.
>
> Can some people help me?
> Thanks!
>
>
Re: How to fetch nested data for subreport in Birt Report [message #526738 is a reply to message #526365] Mon, 12 April 2010 18:55 Go to previous message
Amy  is currently offline Amy Friend
Messages: 29
Registered: April 2010
Junior Member
Thank you very much for your help!
Previous Topic:Render report as image?
Next Topic:Problem using the datasource in the rptLibrary
Goto Forum:
  


Current Time: Fri Apr 26 19:52:09 GMT 2024

Powered by FUDForum. Page generated in 0.02939 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top