| Summary: | [Improve Page Break Management] Visibility on Table/List Header not reevaluated on page break | ||
|---|---|---|---|
| Product: | z_Archived | Reporter: | Jason Weathersby <jasonweathersby> |
| Component: | BIRT | Assignee: | Wei Yan <wyan> |
| Status: | VERIFIED WONTFIX | QA Contact: | mindan xu <mindan.xu> |
| Severity: | normal | ||
| Priority: | P3 | CC: | bluesoldier, rlu, wyan, xwang |
| Version: | 2.3.0 | Keywords: | plan |
| Target Milestone: | 2.5.0 RC1 | ||
| Hardware: | PC | ||
| OS: | Windows XP | ||
| Whiteboard: | Obsolete | ||
When does Engine evaluate this script? the table header/footer, group header/footer, page header /footer are all created only once. BIRT needs define a execute model which supports such a feature. the onRender should be evaluated for each table/group header. defer to RC1 due to resource limitation. The onRender is invoked only once for each content. Invoke the onRender multiple times may cause serious sequence issues. For example assume there is a table TABLE which is divided into two pages.The page break is caused by the row ROW oversize the first page. The layout sequence is: layout TABLE layout rows layout the ROW. BIRT find there is no enough spaces in the current page, so BIRT display the ROW in the next page. display the TABLE display the ROW. As we known that the onRender must be invoked before the layout as it may changes the element size (through setFont/setLineHeigh/setWidth/setHeigh etc). The onRender invoking sequence for this case is: first page: TABLE.onRender ROW.onRender second page: TABLE.onRender ROW.onRender you will find that the ROW.onRender is invoked twice. It is strange for the user as the ROW is display only in the second page. To remove such issue, BIRT defines that the onRender is invoked only once for each item. The invoking sequence is the layout sequence. In the above case, the onRender is invoked as: TABLE.onRender .. ROW.onRender ... The visibility is same with the onRender, it is invoked only once for each content. Mark as Verified first. |
Steps to reproduce. 1 - create a report that has a table or list that generates more than one page. 2 - In the beforeFactory put a variable like pg =0; 3 - Add a visibility expression to the table/list header like: if( pg == 0 ){ true; }else{ false; } On the pageBreak event for the table/list add script like: pg+=1; Expected result header does not show on first page but does show on all subsequent pages. Actual result: Header never shows.