java - How to restart page number from 1 in different group of BIRT report -


backgroud: use java + birt generate report. generate report in viewer , allow user choose export different format (pdf, xls, word...).

all program in "layout", no program in "master page". have 1 "data set". fields in "layout" refer ds. there group in "layout", gropu 1 field. in "group header", create 1 cell use page number. "page : mypagenumber". "mypagenumber" field define +1 in group header.

problem: when use 1st method generate report, "mypagenumber" not show correctly. because group header load 1 time each group. show 1.

question: know there "restart page number in group" in crystal report. how restart page in birt? want show data of different group in 1 report file, , page number start 1 each group.

you can birt reports using page variables. example:

  1. add 2 page variables... group_page, group_name.
  2. add 1 report variable... group_total_page.
  3. in report beforefactory add script:

    prevgroupkey = ""; grouppagenumber = 1; reportcontext.setglobalvariable("ggroup_name", ""); reportcontext.setglobalvariable("ggroup_page", 1); 
  4. in report onpageend add script:

    var groupkey = currgroup;  var prevgroupkey = reportcontext.getglobalvariable("ggroup_name"); var grouppagenumber = reportcontext.getglobalvariable("ggroup_page"); if( prevgroupkey == null ){     prevgroupkey = ""; }  if (prevgroupkey == groupkey) {  if (grouppagenumber != null) {     grouppagenumber = parseint(grouppagenumber) + 1; } else {     grouppagenumber = 1; } } else {     grouppagenumber = 1;     prevgroupkey = groupkey; } reportcontext.setpagevariable("group_name", groupkey); reportcontext.setpagevariable("group_page", grouppagenumber); reportcontext.setglobalvariable("ggroup_name", groupkey); reportcontext.setglobalvariable("ggroup_page", grouppagenumber);  var grouptotalpage = reportcontext.getpagevariable("group_total_page"); if (grouptotalpage == null) {     grouptotalpage = new java.util.hashmap();     reportcontext.setpagevariable("group_total_page", grouptotalpage); } grouptotalpage.put(groupkey, grouppagenumber); 
  5. in master page onrender script add following script:

    var totalpage = reportcontext.getpagevariable("group_total_page"); var groupname = reportcontext.getpagevariable("group_name"); if (totalpage != null) {      this.text = java.lang.integer.tostring(totalpage.get(groupname)); } 
  6. in table group header oncreate event, add following script, replacing 'country' name of column grouping on:

    currgroup = this.getrowdata().getcolumnvalue("country"); 
  7. in master page add grid header or footer , add autotext variable group_page , group_total_page. optionally add page variable group_name well.

check out these links more information birt page variables: