I have a problem with determining the number of detail records that should be displayed on the first page of a report.

 

The report consists of a title, a summary table (that can be one to many rows) ** this is the root of my problem **

then a detail for each record (2 rows per record) there can be 1000’s of records.

 

The first version of this xsl that I coded processed everything within one page-sequence, so that worked as far as layout is concerned,

but the performance was terrible.

 

So the current version of the xsl has the first page in one page-sequence (title, summary table, n # of records)

then each page after the first contains a known number of records, each within it’s own page-sequence.

If the summary table was a fixed size, everything would work fine, but it can be different sizes so the number of records that

should appear on the first page varies.  Right now the xsl is code as 11 records on the first page and 21 on every other, which works

fine if the summary table contains only one row, but if it contains 4 rows (or 15 for that matter) everything is thrown off.

 

So I cannot figure out how to determine how many records to place on the first page dynamically?

Also I don’t like the logic in the RECORD template below, although if the size of the components on the first page is static, it seems to work just fine.

 

Any help is greatly appreciated.

 

relevant XSL

 

fo:layout-master-set>

                <fo:simple-page-master

                    master-name="page" page-width="11in" page-height="8.5in">

                    <fo:region-body region-name="body" margin-top="0.5in" margin-bottom="1in"

                        margin-left="0.5in" margin-right="0.5in">

                    </fo:region-body>

                    <fo:region-after region-name="footer" extent=".75in">

                    </fo:region-after> 

                </fo:simple-page-master>

                <fo:simple-page-master

                                    master-name="contentpage" page-width="11in" page-height="8.5in">

                                    <fo:region-body region-name="contentbody" margin-top="0.5in" margin-bottom="1in"

                                    margin-left="0.5in" margin-right="0.5in">

                                </fo:region-body>

                                <fo:region-after region-name="footer" extent=".75in">

                                </fo:region-after> 

                </fo:simple-page-master>

 </fo:layout-master-set> 

 

<fo:page-sequence master-reference="page">

    <fo:flow>

       … xsl to produce title, summary table, detail heading

            <xsl:call-template name="RECORD">                          

                                <xsl:with-param name="pagegroup">11</xsl:with-param>

            </xsl:call-template>

     </fo:flow>

</fo:page-sequence>

<xsl:if test="count(FILE/RECORDS/RECORD) &gt; 11">

                <fo:page-sequence master-reference="contentpage">

                    <fo:static-content flow-name="footer" xsl:use-attribute-sets="base">

                        <fo:block text-align="center"> Page

                            <fo:page-number/>

                            </fo:block>

                        </fo:static-content>   

                        <fo:flow flow-name="contentbody">   

                        <xsl:call-template name="RECORD">                          

                            <xsl:with-param name="pagegroup">21</xsl:with-param>

                        </xsl:call-template>

                        </fo:flow>   

                    </fo:page-sequence>

                </xsl:if>

        </fo:root>

    </xsl:template>

 

 

<xsl:template name="RECORD">

        <xsl:param name="pagegroup"/>

        <xsl:for-each select="FILE/RECORDS/RECORD|following-sibling::RECORD[position() &lt; $pagegroup]">

                <xsl:if test="$pagegroup = 21">

                <xsl:if test="position() &gt; 11">

                            <xsl:call-template name="DETAIL"/>

                        </xsl:if>

                </xsl:if>

            <xsl:if test="$pagegroup = 11">

                <xsl:if test="position() &lt; 12">

                            <xsl:call-template name="DETAIL"/>

                        </xsl:if>

                </xsl:if>

         </xsl:for-each>  

     </xsl:template>

 

<xsl:template name="DETAIL">

   …. produces tht detail records (2 rows each)

</xsl:template>

 

Danny Gallagher

The Gainer Group

6525 The Corners Parkway

Suite 215

Norcross Ga, 30092