Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
PUBLIC CLOUD
PRIVATE CLOUD
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
How to have a table fill a page before breaking
mminella
I'm currently working on generating a PDF report for the result of a test. These test results have a number of findings. Each finding is pretty verbose (it's likely a finding will span more than one page). Currently I have a Table that contains a grid to lay out the findings. The issue I'm having is that I want the table to always fill up the page before breaking. I don't care where within the grid the page break occurs as long as it fills up the page before doing so.
Unfortunately, right now I'm getting a scenario where the report will fill part of a page, then a full page, then the part of another page (first page is about 60% full, second page is 100% full and the third page is 20% full). In this case, a single cell of the grid is the part that spans all three pages (cell starts on page 1, spans through page 2 and finishes at the start of page 3).
My question is, how can I get a table like this to always fill a page before causing a page break? I've tried setting the page break interval to 0 but that didn't help. Any other ideas would be appreciated. Thanks in advance!
Find more posts tagged with
Comments
mwilliams
Hi mminella,
Setting the page break interval to 0 should solve your problem. How is your table set up? Do you have grouping? Any page break after group settings? What version of BIRT are you using? Can you recreate your issue with the sample database so I can run it and see? Thanks.
mminella
Hey,<br />
<br />
Thanks for the quick response! With regards to your questions:<br />
<br />
I have tried both a table and list (list seems to be the more apropriate control for what i'm doing). In either case, the detail section contains a grid with various data in it including a couple cells with nested tables. Many of the cells in the grid contain HTML.<br />
I do not have any grouping<br />
We're using Birt version 2.5.1<br />
<br />
Let me know if posting the XML for the list or table would help. Thanks in advance!<br />
<br />
<br />
<blockquote class='ipsBlockquote' data-author="'mwilliams'" data-cid="67702" data-time="1282667975" data-date="24 August 2010 - 09:39 AM"><p>
Hi mminella,<br />
<br />
Setting the page break interval to 0 should solve your problem. How is your table set up? Do you have grouping? Any page break after group settings? What version of BIRT are you using? Can you recreate your issue with the sample database so I can run it and see? Thanks.<br /></p></blockquote>
mwilliams
If you have an xml file of data and a report set up that's doing what you're saying that you can attach, that'd be helpful for me seeing what is going on. It may be a bug with having a table nested in a detail row, but I want to make sure of what you're doing first before I conclude that.
mminella
Hey,
Below you'll find the XML for the List that I'm having issues with. You will also find the HTML that the report is trying to use (the HTML is in the row["recommendation"] field. Let me know if you need more than that. The page breaks are occurring after the bullet "PHP" (before the string "Parameterized Queries with Bound Parameters") and after the bullet "Avoid using dynamic names if at all possible". Thanks in advance!
[xml]<list id="1197">
<property name="dataSet">results</property>
<list-property name="paramBindings">
<structure>
<property name="paramName">result_id</property>
<expression name="expression" type="javascript">params["result_id"].value</expression>
</structure>
</list-property>
<list-property name="boundDataColumns">
<structure>
<property name="name">name</property>
<expression name="expression">dataSetRow["name"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">impact</property>
<expression name="expression">dataSetRow["impact"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">solution</property>
<expression name="expression">dataSetRow["solution"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">risk</property>
<expression name="expression">dataSetRow["risk"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">reference</property>
<expression name="expression">dataSetRow["reference"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">description</property>
<expression name="expression">dataSetRow["description"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">recommendation</property>
<expression name="expression">dataSetRow["recommendation"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">location</property>
<expression name="expression">dataSetRow["location"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">status</property>
<expression name="expression">dataSetRow["status"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">id</property>
<expression name="expression">dataSetRow["id"]</expression>
<property name="dataType">decimal</property>
</structure>
<structure>
<property name="name">opened_date</property>
<expression name="expression">dataSetRow["opened_date"]</expression>
<property name="dataType">date-time</property>
</structure>
<structure>
<property name="name">closed_date</property>
<expression name="expression">dataSetRow["closed_date"]</expression>
<property name="dataType">date-time</property>
</structure>
</list-property>
<property name="pageBreakInterval">0</property>
<detail>
<grid id="1198">
<property name="fontSize">9pt</property>
<property name="marginLeft">1in</property>
<property name="marginBottom">0.25in</property>
<property name="marginRight">1pt</property>
<property name="textAlign">left</property>
<column id="1199"/>
<column id="1200">
<property name="width">1.5972222222222223in</property>
</column>
<column id="1201">
<property name="width">1.5138888888888888in</property>
</column>
<column id="1202"/>
<row id="1203">
<cell id="1204">
<property name="backgroundColor">#0E539B</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1205">
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_name"><![CDATA[]]></text-property>
</text>
</cell>
<cell id="1206">
<property name="colSpan">3</property>
<property name="rowSpan">1</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1207">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>row["name"]</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
<row id="1208">
<cell id="1209">
<property name="backgroundColor">#0E539B</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1210">
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_risk"><![CDATA[]]></text-property>
</text>
</cell>
<cell id="1211">
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1212">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>row["risk"]</VALUE-OF>]]></text-property>
</text>
</cell>
<cell id="1213">
<property name="backgroundColor">#0E539B</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1214">
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_status"><![CDATA[]]></text-property>
</text>
</cell>
<cell id="1215">
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1216">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>reportContext.getMessage("result.status." + row["status"], reportContext.getLocale());</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
<row id="1217">
<cell id="1218">
<property name="backgroundColor">#0E539B</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1219">
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_open_date"><![CDATA[]]></text-property>
</text>
</cell>
<cell id="1220">
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1221">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>BirtDateTime.month(row["opened_date"], 1) + "/" + BirtDateTime.day(row["opened_date"]) + "/" + BirtDateTime.year(row["opened_date"]);</VALUE-OF>]]></text-property>
</text>
</cell>
<cell id="1222">
<property name="backgroundColor">#0E539B</property>
<property name="color">#FFFFFF</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1223">
<property name="fontWeight">bold</property>
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_close_date"><![CDATA[]]></text-property>
</text>
</cell>
<cell id="1224">
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1225">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>if(row["closed_date"] != null) {BirtDateTime.month(row["closed_date"], 1) + "/" + BirtDateTime.day(row["closed_date"]) + "/" + BirtDateTime.year(row["closed_date"]);}</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
<row id="1226">
<cell id="1227">
<property name="backgroundColor">#0E539B</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1228">
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_impact"><![CDATA[]]></text-property>
</text>
</cell>
<cell id="1229">
<property name="colSpan">3</property>
<property name="rowSpan">1</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1230">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>row["impact"]</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
<row id="1231">
<cell id="1232">
<property name="backgroundColor">#0E539B</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1233">
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_data_display"><![CDATA[]]></text-property>
</text>
</cell>
<cell id="1234">
<property name="colSpan">3</property>
<property name="rowSpan">1</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1235">
<property name="dataSet">Data displays For A result</property>
<list-property name="paramBindings">
<structure>
<property name="paramName">result_id</property>
<expression name="expression" type="javascript">row["id"]</expression>
</structure>
</list-property>
<list-property name="boundDataColumns">
<structure>
<property name="name">result_id</property>
<expression name="expression">dataSetRow["result_id"]</expression>
<property name="dataType">decimal</property>
</structure>
<structure>
<property name="name">displays</property>
<expression name="expression">dataSetRow["displays"]</expression>
<property name="dataType">string</property>
</structure>
</list-property>
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>row["displays"]</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
<row id="1236">
<cell id="1237">
<property name="backgroundColor">#0E539B</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1238">
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_location"><![CDATA[]]></text-property>
</text>
</cell>
<cell id="1239">
<property name="colSpan">3</property>
<property name="rowSpan">1</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1240">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>row["location"]</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
<row id="1241">
<cell id="1242">
<property name="colSpan">4</property>
<property name="rowSpan">1</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1243">
<property name="fontWeight">bold</property>
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_description"><![CDATA[]]></text-property>
</text>
<text id="1244">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF format="HTML">BirtStr.trim(row["description"].replace(/&apos;/g, "'").replace(/<\/?FONT.*?>/g, "").replace(/<\/?TEXTFORMAT.*?>/g, "").replace(/<P\s*?ALIGN="LEFT">\s*?<\/P>/g, "").replace(/<P\s*?ALIGN="LEFT">/g, "").replace(/<\/P>/g, "<br/><br/>")).replace(/<br\/><br\/>$/, "<br/>");</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
<row id="1245">
<cell id="1246">
<property name="colSpan">4</property>
<property name="rowSpan">1</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1247">
<property name="fontWeight">bold</property>
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_examples"><![CDATA[]]></text-property>
</text>
<table id="1248">
<property name="dataSet">examples</property>
<list-property name="paramBindings">
<structure>
<property name="paramName">result_id</property>
<expression name="expression" type="javascript">row["id"]</expression>
</structure>
</list-property>
<list-property name="boundDataColumns">
<structure>
<property name="name">order_by</property>
<expression name="expression">dataSetRow["order_by"]</expression>
<property name="dataType">integer</property>
</structure>
<structure>
<property name="name">description</property>
<expression name="expression">dataSetRow["description"]</expression>
<property name="dataType">string</property>
</structure>
</list-property>
<property name="pageBreakInterval">0</property>
<column id="1252"/>
<detail>
<row id="1249">
<cell id="1250">
<text id="1251">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>row["description"]</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
</detail>
</table>
</cell>
</row>
<row id="1253">
<cell id="1254">
<property name="colSpan">4</property>
<property name="rowSpan">1</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1255">
<property name="fontWeight">bold</property>
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_recommendation"><![CDATA[]]></text-property>
</text>
<text id="1256">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF format="HTML">BirtStr.trim(row["recommendation"].replace(/&apos;/g, "'").replace(/<\/?FONT.*?>/g, "").replace(/<\/?TEXTFORMAT.*?>/g, "").replace(/<P\s*?ALIGN="LEFT">\s*?<\/P>/g, "").replace(/<P\s*?ALIGN="LEFT">/g, "").replace(/<\/P>/g, "<br/><br/>")).replace(/<br\/><br\/>$/, "<br/>");</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
<row id="1257">
<cell id="1258">
<property name="colSpan">4</property>
<property name="rowSpan">1</property>
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">thin</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">thin</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<text id="1259">
<property name="fontWeight">bold</property>
<property name="contentType">auto</property>
<text-property name="content" key="body.text.result_references"><![CDATA[]]></text-property>
</text>
<table id="1260">
<property name="marginLeft">0in</property>
<property name="marginRight">0in</property>
<property name="dataSet">References</property>
<list-property name="paramBindings">
<structure>
<property name="paramName">result_id</property>
<expression name="expression" type="javascript">row["id"]</expression>
</structure>
</list-property>
<list-property name="boundDataColumns">
<structure>
<property name="name">description</property>
<expression name="expression">dataSetRow["description"]</expression>
<property name="dataType">string</property>
</structure>
<structure>
<property name="name">source</property>
<expression name="expression">dataSetRow["source"]</expression>
<property name="dataType">string</property>
</structure>
</list-property>
<property name="pageBreakInterval">0</property>
<column id="1266">
<property name="width">2.111111111111111in</property>
</column>
<column id="1267">
<property name="width">4.027777777777778in</property>
</column>
<detail>
<row id="1261">
<cell id="1262">
<text id="1263">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>row["description"]</VALUE-OF>]]></text-property>
</text>
</cell>
<cell id="1264">
<text id="1265">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<VALUE-OF>row["source"]</VALUE-OF>]]></text-property>
</text>
</cell>
</row>
</detail>
</table>
</cell>
</row>
</grid>
</detail>
</list>
[/xml]
[html]<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">There are two complementary and successful methods of mitigating SQL Injection attacks:</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><LI><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">Parameterized queries using bound, typed parameters</FONT></LI></TEXTFORMAT><TEXTFORMAT LEADING="2"><LI><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">Careful use of parameterized stored procedures.</FONT></LI></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">Parameterized queries are the easiest to adopt, and work in fairly similar ways among most web technologies in use today, including:</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><LI><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">Java EE</FONT></LI></TEXTFORMAT><TEXTFORMAT LEADING="2"><LI><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">.NET</FONT></LI></TEXTFORMAT><TEXTFORMAT LEADING="2"><LI><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">PHP</FONT></LI></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"><B>Parameterized Queries with Bound Parameters</B></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">Parameterized queries keep the query and data separate through the use of placeholders known as "bound" parameters. For example in Java, this looks like this:</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"> "select * from table where columna=? and columnb=?"</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">The developer must then set values for the two ? placeholders. Note that using this syntax without actually using the placeholders and setting values provides no protection against SQL injection.</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"><B>Parameterized Stored Procedures</B></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">The use of parameterized stored procedures is an effective mechanism to avoid most forms of SQL Injection. In combination with parameterized bound queries, it is very unlikely that SQL injection will occur within your application. However, the use of dynamic code execution features can allow SQL Injection as shown below:</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"> create proc VulnerableDynamicSQL(
@userName
nvarchar(25)) as</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"> declare
@sql
nvarchar(255)</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"> set
@sql
= 'select * from users where UserName = </FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"> +
@userName
+ '</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"> exec sp_executesql
@sql<
;/FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">(MS SQL example from
http://dotnetjunkies.com/WebLog/chris.taylor/archive/2004/10/13/28370.aspx)</FONT></P></TEXTFORMAT><TEXTFORMAT
LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">The above example still allows SQL Injection as it allows dynamic injection of arbitrary string data. This is also true of Java / PL/SQL and MySQL's stored procedure support.</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"><B>Least privilege connections</B></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">Always use accounts with the minimum privilege necessary for the application at hand, never ?sa?, ?dba?, ?admin?, or the equivalent.</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"><B>WARNING: Escaping table names</B></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">No SQL Injection mitigation or escaping allows the safe escaping of table names. This seems to be a common issue with PHP forum software.</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"> $tablename = mysql_real_escape_string($tablename)</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0"></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">is simply not safe and cannot be made so.</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">In general:</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><LI><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">Avoid using dynamic table names if at all possible.</FONT></LI></TEXTFORMAT><TEXTFORMAT LEADING="2"><LI><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">If you have to use dynamic table names, do not accept them from the user if at all possible.</FONT></LI></TEXTFORMAT><TEXTFORMAT LEADING="2"><LI><FONT FACE="Verdana" SIZE="11" COLOR="#555555" LETTERSPACING="0" KERNING="0">If you have to allow dynamic user choice of table names, ONLY use whitelists of acceptable characters for table names and enforce table name length limits. In particular, many database systems have a wide range of unacceptable characters and these change between major releases.></FONT></LI></TEXTFORMAT>[/html]
mwilliams
Sorry. I thought the XML you were going to send was data. If you could recreate your issue using some sample data and a .rptdesign file so that I can run the report and see the issue, that'd be great. Thanks!
pabloMG
I had a similar problem, so perhaps this will work: select the table row that is giving you trouble, and change page break - inside from avoid to auto.
BirtRunn
<blockquote class='ipsBlockquote' data-author="'pabloMG'" data-cid="67724" data-time="1282718354" data-date="24 August 2010 - 11:39 PM"><p>
I had a similar problem, so perhaps this will work: select the table row that is giving you trouble, and change page break - inside from avoid to auto.<br /></p></blockquote>
<br />
Actually Page Break - Inside = 'avoid' feature is re-introduced since BIRT 2.5. In few earlier releases they have disabled this feature. So for 2.5+ releases by changing value to 'auto' should work.