/**
* i-net software provides programming examples for illustration only, without warranty
* either expressed or implied, including, but not limited to, the implied warranties
* of merchantability and/or fitness for a particular purpose. This programming example
* assumes that you are familiar with the programming language being demonstrated and
* the tools used to create and debug procedures. i-net software support professionals
* can help explain the functionality of a particular procedure, but they will not modify
* these examples to provide added functionality or construct procedures to meet your
* specific needs.
*
* Copyright © 1999-2025 i-net software GmbH, Berlin, Germany.
**/
package rdc;
import java.net.URL;
import com.inet.report.*;
/**
* This sample shows how to add a sub-report with RDC API to a report. The Data Source Configuration "Sample Database"
* is necessary for this sample. You can create it using Data Source Manager in i-net Designer or the Configuration
* Manager.
*
* Note: You may to change the path to the picture before running this sample.
*/
public class SubreportSample extends RDCSample {
// Modify this Path if the location of the picture is another than this.
static final String PICTUREPATH = "samples/rdc/cc_logo.png";
/**
* Adds a sub-report to a new report.
* @param exportFmt the output format (e.g. Engine.EXPORT_PDF)
* @return the new engine for the report
*/
@Override
public Engine createAndFillEngine( String exportFmt ) {
try {
// Create an Engine for a new report
Engine eng = RDC.createEmptyEngine( exportFmt );
// Fill the engine
// Get an area and a section to fill in some elements
Area area = eng.getArea( 2 );
Section section = area.getSection( 0 );
// Add a text to the main report
Text text = section.addText( 4000, 5100, 3000, 500 );
Paragraph para = text.addParagraph();
para.addTextPart( "This picture is in the main report." );
// Add a picture to the main report
URL pictureURL = getClass().getResource( '/' + PICTUREPATH );
String path;
if( pictureURL != null ) {
path = pictureURL.getPath();
} else {
path = PICTUREPATH;
}
section.addPicture( 4500, 5500, 2835, 375, path );
// This adds a new report as subreport
Subreport subrep = section.addSubreport( 1000, 100, 6000, 700 );
// Make subreport onDemand
// subrep.setOnDemand(true);
subrep.setOnDemandLinkLabel( "\"subreport1\"" );//or set a report name, otherwise no tab is shown by the viewer
subrep.setOnDemandTabLabel( "\"subreport1\"" );
// Get subreports engine
Engine subeng = subrep.getEngine();
// Get detail area and first detail section of the subreport
Area subArea = subeng.getArea( "D" );
Section subSection = subArea.getSection( 0 );
// Add a text to the subreport
Text subText = subSection.addText( 2000, 100, 3000, 500 );
Paragraph subPara = subText.addParagraph();
subPara.addTextPart( "This picture is in the first subreport." );
// Add a picture to the subreport
subSection.addPicture( 1500, 500, 2835, 375, path );
Subreport subrep2 = section.addSubreport( 1000, 2000, 6000, 700 );
// subrep2.setOnDemand(true);
subrep2.setOnDemandLinkLabel( "\"subreport2\"" );//or set a report name, otherwise no tab is shown by the viewer
subrep2.setOnDemandTabLabel( "\"subreport2\"" );
// Get subreports engine
Engine subeng2 = subrep2.getEngine();
// Get detail area and first detail section of the subreport
Area subArea2 = subeng2.getArea( "D" );
Section subSection2 = subArea2.getSection( 0 );
// Add a text to the subreport
Text subText2 = subSection2.addText( 2000, 100, 3300, 500 );
Paragraph subPara2 = subText2.addParagraph();
subPara2.addTextPart( "This picture is in the second subreport." );
// Add a picture to the subreport
subSection2.addPicture( 1500, 500, 2835, 375, path );
String[] employeeNames =
{ "EmployeeID", "Supervisor", "LastName", "FirstName", "Position", "BirthDate", "HireDate", "HomePhone", "Extension", "ReportsTo",
"Salary", "SSN", "EmergencyContactFirstName", "EmergencyContactLastName", "EmergencyContactRelationship", "EmergencyContactPhone" };
int[] employeeTypes =
{ Field.NUMBER, Field.NUMBER, Field.STRING, Field.STRING, Field.STRING, Field.DATETIME, Field.DATETIME, Field.STRING, Field.STRING,
Field.NUMBER, Field.NUMBER, Field.STRING, Field.STRING, Field.STRING, Field.STRING, Field.STRING };
String[] ordersNames =
{ "OrderID", "OrderAmount", "CustomerID", "EmployeeID", "OrderDate", "RequiredDate", "ShipDate", "ShipVia", "Shipped", "PO#",
"PaymentReceived" };
int[] ordersTypes =
{ Field.NUMBER, Field.NUMBER, Field.STRING, Field.NUMBER, Field.DATETIME, Field.DATETIME, Field.DATETIME, Field.STRING,
Field.BOOLEAN, Field.STRING, Field.BOOLEAN };
String[] orderDetailsNames = { "OrderID", "ProductID", "UnitPrice", "Quantity" };
int[] orderDetailsTypes = { Field.NUMBER, Field.NUMBER, Field.NUMBER, Field.NUMBER };
String[] productNames = { "ProductID", "ProductName", "Color", "Size", "M/F", "Price", "ProductTypeID", "ProductClass", "SupplierID" };
int[] productTypes =
{ Field.NUMBER, Field.STRING, Field.STRING, Field.STRING, Field.STRING, Field.NUMBER, Field.NUMBER, Field.STRING, Field.NUMBER };
// Add database connection
final DatabaseTables dbTables = eng.getDatabaseTables();
final Fields fields = eng.getFields();
// Define a data source
Datasource ds = dbTables.createDatasource( "Sample Database" ); // Data Source Configuration "Sample Database"
// Define the tables of the data source
TableSource ts_Employee = ds.createTableSource( "Employees" );
for( int colIdx = 0; colIdx < employeeNames.length; colIdx++ ) {
ts_Employee.addColumn( employeeNames[colIdx], employeeTypes[colIdx] );
}
TableSource ts_Orders = ds.createTableSource( "Orders" );
for( int colIdx = 0; colIdx < ordersNames.length; colIdx++ ) {
ts_Orders.addColumn( ordersNames[colIdx], ordersTypes[colIdx] );
}
TableSource ts_OrderDetails = ds.createTableSource( "Order Details" );
for( int colIdx = 0; colIdx < orderDetailsNames.length; colIdx++ ) {
ts_OrderDetails.addColumn( orderDetailsNames[colIdx], orderDetailsTypes[colIdx] );
}
TableSource ts_Product = ds.createTableSource( "Products" );
for( int colIdx = 0; colIdx < productNames.length; colIdx++ ) {
ts_Product.addColumn( productNames[colIdx], productTypes[colIdx] );
}
// Add links
dbTables.addJoin( ts_Employee.getAlias(), "EmployeeID", ts_Orders.getAlias(), "EmployeeID", DatabaseTables.JOINTYPE_INNER,
DatabaseTables.JOINLINK_EQUALS );
dbTables.addJoin( ts_Orders.getAlias(), "OrderID", ts_OrderDetails.getAlias(), "OrderID", DatabaseTables.JOINTYPE_INNER,
DatabaseTables.JOINLINK_EQUALS );
dbTables.addJoin( ts_OrderDetails.getAlias(), "ProductID", ts_Product.getAlias(), "ProductID", DatabaseTables.JOINTYPE_INNER,
DatabaseTables.JOINLINK_EQUALS );
eng.setSF( "{Employees.LastName} = \"Chase\"" );
return eng;
} catch( Throwable e ) {
e.printStackTrace();
System.exit( 1 );
return null;
}
}
/**
* Main method of this sample
* @param args arguments not used
*/
public static void main( String[] args ) {
new SubreportSample().initUI();
}
}