Home Page FO Designer user guide. XSL-FO tool for Oracle APEX and the Java[TM] platform
                                                    FO Designer guide
                                                  • First steps
                                                  • Introduction
                                                  • The user interface
                                                  • Working with the interface
                                                  • Structure of the template
                                                  • Executing the template to create PDF files
                                                  • Learn by doing
                                                  • The invoice IDOC example
                                                  • The Group by example
                                                  • The two columns example
                                                  • Barcodes
                                                  • Charts
                                                  • The running totals example
                                                  • Interactive forms
                                                  • Flavours
                                                  • The base template
                                                  • Long texts and HTML fields
                                                  • The memo field explained
                                                  • Advanced functionalities
                                                  • FOP Could Server
                                                  • Migration of existing XSL-FO files
                                                  • FAQS
                                                  • Troubleshooting
                                                  • Licenses
                                                  • The Group by example

                                                    8. The Group by example

                                                    The database entry departmentEmployeesGrouping.xre  shows how to use the "group by" feature. The example takes as input a list of employees and groups them by status (in the test file there are 2 status, active and inactive).

                                                    For grouping 2 areas are required,

                                                    one group header and one group detail:

                                                    • The group header must contain the value use for grouping in the "XML group by" property. In this example the status element. You must also set the value for "XML Node", these are the nodes you will be grouping, in this case persons.

                                                      In the group header you can output the value of the element you are grouping by (in this case status).

                                                    Group detail areas have the following restrictions:

                                                    • the value for the XML Node property will be inherited from the header.
                                                    • the XML Group by property may not be used.

                                                    Note nested groups are not supported.

                                                    Group footers

                                                    The example departmentEmployeesGrouping_footer.xre shows how to create group footers. Group footers are used to show total fields of the values in the group for each value being grouped. In the example the group footer is used to show the total number of employees for each status.

                                                    Group footers have to be implemented as follow:
                                                    • create a new area placed after the group detail area. In the example the footer area is the "detail 2" area.

                                                    • The footer area must have as "super area" the "group header". In our example the super area of "detail 2" is "detail 1" which is the group header.
                                                    • If you want to count or sum the fields of the current group you use an xpath expression like this one:

                                                      count(/departments/department/person[status = current()/status])

                                                      this means, count all persons (/departments/department/person) whose status has the same value as the current's group status. Note we are grouping by status so when this is executed for the "active" employees status, it will count all employees whose status is "active".

                                                      Let's assume each person has a child element called "salary", we could sum all salaries of the employees in the current status like this:

                                                      sum(/departments/department/person[status = current()/status]/salary)

                                                      this means select the salary of all employee whose status is the same status as the current group and then sum all selected salaries.