Class Subreport

All Implemented Interfaces:
BorderProperties, FontProperties, GeneralProperties, NodeParser, com.inet.report.ReferenceHolder, SubreportProperties, TextProperties, Serializable, Cloneable

public class Subreport extends AbstractFontElement implements SubreportProperties, TextProperties, com.inet.report.ReferenceHolder, BorderProperties
Engines cannot hold more than one datasource, so if you need a report that uses data from two or more datasources, you have to use Subreport objects in the report.

Example:
You have one database to store private data of your employees. In another database (a table in the same database should also work, but no subreports are required here) you store the sales of each of your shops. So, if you want to create a report, that displays all sales according to the employee you have to create some fields in the main report that shows the employees and a subreport that have some fields to show the sales. To realize the representation of sales according to employees insert a SubreportLink using the employee id field in the main report (i.e. Employees.Id) and the employee id in the subreport (i.e. Sales.Employee-Id). Now each employee will be followed by its sales, where the sales were shown in a single object - the Subreport object.

This class is part of the RDC.
See Also:
  • Method Details

    • copy

      public Object copy() throws ReportException
      Creates a serializable copy of this Element. The returned Object is not an instance of Element. This method is used from i-net Designer for Copy and Paste.
      Overrides:
      copy in class Element
      Returns:
      A serializable Object.
      Throws:
      ReportException - If accessing properties of this Element causes any errors.
      See Also:
    • getEngine

      public Engine getEngine()
      Returns the engine object belonging to this subreport. This is different to the super method of Element. Will return null if this subreport no longer belongs to a main report.
      Overrides:
      getEngine in class Element
      Returns:
      Engine The engine of the subreport.
      Since:
      6.0
      See Also:
    • addSubreportLink

      public SubreportLink addSubreportLink(Field mainRptField, Field subRptField) throws ReportException
      Adds a new subreport link to the set and returns it.
      Parameters:
      mainRptField - The Field in the main report whose values will be used for the PromptField in the subreport.
      subRptField - The Field in the subreport whose values will be used to compare with the values of the PromptField.
      Returns:
      The created SubreportLink object.
      Throws:
      ReportException - If an error occurred while creating the sub report link.
      Since:
      6.0
    • addSubreportLink

      public SubreportLink addSubreportLink(Field mainRptField, Field subRptField, boolean generatePrompt) throws ReportException
      Adds a new subreport link to the set and returns it.
      Parameters:
      mainRptField - The Field in the main report whose values will be used for the PromptField in the subreport.
      subRptField - The Field in the subreport whose values will be used to compare with the values of the PromptField.
      generatePrompt - If true a PromptField which is used for this link is generated automatically. If set to false a PromptField has to be set with SubreportLink.setPromptField(PromptField).
      Returns:
      The created SubreportLink object.
      Throws:
      ReportException - If an error occurred while creating the sub report link.
      Since:
      6.0
    • removeSubreportLink

      public void removeSubreportLink(int idx)
      Removes the subreport link at the specified index.
      Parameters:
      idx - The 0-based index of the SubreportLink object that should be removed.
      Since:
      6.0
      See Also:
    • getSubreportLink

      public SubreportLink getSubreportLink(int idx)
      Gets the subreport link at the specified index.
      Parameters:
      idx - The 0-based index of the subreport that should be returned.
      Returns:
      The SubreportLink object at the specified position.
      Since:
      6.0
      See Also:
    • getSubreportLinkCount

      public int getSubreportLinkCount()
      Returns the number of subreport links in the set
      Returns:
      The number of subreport links.
      Since:
      6.0
    • setOnDemand

      public void setOnDemand(boolean onDemand)
      Specifies whether on demand is enabled or not.
      Specified by:
      setOnDemand in interface SubreportProperties
      Parameters:
      onDemand - when true on demand is enabled
    • isOnDemand

      public boolean isOnDemand()
      Returns true if on demand is enabled else false.
      Specified by:
      isOnDemand in interface SubreportProperties
      Returns:
      whether on demand is enabled
      Since:
      7.0
    • setOnDemandLinkLabel

      public void setOnDemandLinkLabel(String lab)
      If on demand is enabled, the element is shown in the report as a line of text. Specify this text with this method.
      Specified by:
      setOnDemandLinkLabel in interface SubreportProperties
      Parameters:
      lab - - the text as String
    • setOnDemandLinkLabel

      public void setOnDemandLinkLabel(FormulaField lab)
      If on demand is enabled, the element is shown in the report as a line of text. Specify this text with this method.
      Specified by:
      setOnDemandLinkLabel in interface SubreportProperties
      Parameters:
      lab - - a FormulaField whose return value specifies the text.
    • getOnDemandLinkLabel

      public FormulaField getOnDemandLinkLabel()
      Returns a FormulaField whose return value specifies the text that is shown instead of the element content when on demand is enabled.
      Specified by:
      getOnDemandLinkLabel in interface SubreportProperties
      Returns:
      FormulaField
    • setOnDemandTabLabel

      public void setOnDemandTabLabel(String lab)
      If on demand is enabled and the element is activated, it is shown in an extra tab or window. Specify the name of this tab with this method.
      Specified by:
      setOnDemandTabLabel in interface SubreportProperties
      Parameters:
      lab - - the name as String
    • setOnDemandTabLabel

      public void setOnDemandTabLabel(FormulaField lab)
      If on demand is enabled and the element is activated, it is shown in an extra tab or window. Specify the name of this tab with this method.
      Specified by:
      setOnDemandTabLabel in interface SubreportProperties
      Parameters:
      lab - - a FormulaField whose return value specifies the name.
    • getOnDemandTabLabel

      public FormulaField getOnDemandTabLabel()
      Returns a FormulaField whose return value specifies the name of the tab which is showing the activated element if on demand is enabled.
      Specified by:
      getOnDemandTabLabel in interface SubreportProperties
      Returns:
      FormulaField
    • getPropertyFormulas

      public List<FormulaField> getPropertyFormulas()
      Returns a list with all property formulas that are set for this report element. This includes property formulas for any type of sub-component but excludes formulas for any descendant ReportComponent of this one. To get the property formulas for descendant ReportComponent use ReportComponent.getSubComponents()
      Overrides:
      getPropertyFormulas in class AbstractFontElement
      Returns:
      List of property formulas
    • setReferences

      public final void setReferences()
      FOR INTERNAL USE ONLY
      Specified by:
      setReferences in interface com.inet.report.ReferenceHolder
      Overrides:
      setReferences in class Element
    • resetReferences

      public final void resetReferences()
      FOR INTERNAL USE ONLY
      Specified by:
      resetReferences in interface com.inet.report.ReferenceHolder
      Overrides:
      resetReferences in class ReportComponent
    • getGlyphOrientation

      public int getGlyphOrientation()
      Returns the glyph orientation. This is the rotation of every individual character in the line. The default value is GLYPH_DEFAULT, that is, the glyphs point towards the source of the given block progression. Use the GLYPH constants for the orientation.
      Specified by:
      getGlyphOrientation in interface TextProperties
      Returns:
      glyph orientation
      See Also:
    • setGlyphOrientation

      public void setGlyphOrientation(int orientation)
      Sets the orientation of the glyphs. This is the rotation of every individual character in the line. The default value is GLYPH_DEFAULT, that is, the glyphs point towards the source of the given block progression. Use the GLYPH constants for the orientation.
      Specified by:
      setGlyphOrientation in interface TextProperties
      Parameters:
      orientation - Orientation to be set for the glyphs (i.e. the rotation of every individual character of the line of text)
      See Also:
    • setGlyphOrientationFormula

      public void setGlyphOrientationFormula(FormulaField formula)
      Sets the formula whose return value determines the glyph orientation. This is the rotation of every individual character in each line. This formula should return one of the formula constants GlyphDefault, GlyphLeft, GlyphRight, or GlyphDown.
      Specified by:
      setGlyphOrientationFormula in interface TextProperties
      Parameters:
      formula - the formula whose return value determines the glyph orientation
    • getGlyphOrientationFormula

      public FormulaField getGlyphOrientationFormula()
      Returns the formula whose return value determines the glyph orientation. This is the rotation of every individual character in each line. This formula should return one of the formula constants GlyphDefault, GlyphLeft, GlyphRight, or GlyphDown.
      Specified by:
      getGlyphOrientationFormula in interface TextProperties
      Returns:
      the formula whose return value determines the glyph orientation
    • setTextRotation

      public void setTextRotation(int rotation)
      Sets the value of the property 'text rotation'. This property defines a final rotation of the entire element after the text is laid out. For example, to have a text element have vertical text running from top to bottom and each line run from right to left, you'd set a glyph orientation of GLYPH_LEFT and a text rotation of ROTATE_270.
      Specified by:
      setTextRotation in interface TextProperties
      Parameters:
      rotation - The new value of the property 'text rotation'. Rotation is done counter-clockwise.
      Since:
      5.4
      See Also:
    • getTextRotation

      public int getTextRotation()
      Returns the value of the property 'text rotation'. This property defines a final rotation of the entire element after the text is laid out. For example, to have a text element have vertical text running from top to bottom and each line run from right to left, you'd set a glyph orientation of GLYPH_LEFT and a text rotation of ROTATE_270.
      Specified by:
      getTextRotation in interface TextProperties
      Returns:
      The value of the property 'text rotation'.
      Since:
      5.4
      See Also:
    • getTextRotationFormula

      public FormulaField getTextRotationFormula()
      Returns the formula whose return value determines the property 'text rotation'. This property defines a final rotation of the entire element after the text is laid out. This formula should return one of the formula constants Rotate0, Rotate90, Rotate180, or Rotate270.
      Specified by:
      getTextRotationFormula in interface TextProperties
      Returns:
      formula whose return value determines the property 'text rotation'.
      See Also:
    • setTextRotationFormula

      public void setTextRotationFormula(FormulaField formula)
      Sets the formula whose return value determines the property 'text rotation'. This property defines a final rotation of the entire element after the text is laid out. This formula should return one of the formula constants Rotate0, Rotate90, Rotate180, or Rotate270.
      Specified by:
      setTextRotationFormula in interface TextProperties
      Parameters:
      formula - formula whose return value determines the property 'text rotation'.
      See Also:
    • isSuppressIfBlank

      public boolean isSuppressIfBlank()
      Returns true if "suppress if blank" is enabled else false. A subreport is blank if all sections are suppressed or have no height. If the subreport is suppressed, the border and background will not be printed.
      Specified by:
      isSuppressIfBlank in interface SubreportProperties
      Returns:
      whether "suppress if blank" is enabled
      See Also:
    • setSuppressIfBlank

      public void setSuppressIfBlank(boolean suppress)
      Specifies whether "suppress if blank" is enabled or not. A subreport is blank if all sections are suppressed or have no height. If the subreport is suppressed, the border and background will not be printed.
      Specified by:
      setSuppressIfBlank in interface SubreportProperties
      Parameters:
      suppress - whether to suppress the display of this subreport if it is blank
      See Also:
    • parseElement

      public NodeParser parseElement(com.inet.report.parser.XMLTag group, String tag, Attributes atts, Map<String,Object> parserMap) throws FatalParserException
      FOR INTERNAL USE ONLY FOR INTERNAL USE ONLY FOR INTERNAL USE ONLY FOR INTERNAL USE ONLY Internal method for reading report XML

      Parses an XML node with the given information, and returns either a sub-element which was created as a result, or null if no sub-element was created, i.e. the information was applied to the ReportComponent itself. Note that the parsing is highly tolerant, i.e. exceptions are intercepted and suppressed if at all possible.

      Specified by:
      parseElement in interface NodeParser
      Overrides:
      parseElement in class AbstractFontElement
      Parameters:
      group - XMLTag of the current node to be parsed, or null if there is no such current group. An XMLTag is a group of nodes bundled together, usually it is a Properties node such as CommonProperties, BorderProperties, etc.
      tag - The XMLTag to be parsed
      atts - The set of attributes in the current XMLTag
      parserMap - The map of current Parser.
      Returns:
      The NodeParser sub-element if one needed to be created, or null if none was created.
      Throws:
      FatalParserException - if an exception occurs which causes the report to not be able to be read: causes the abortion of the reading of the report.
    • parseText

      public void parseText(String textData, Map<String,Object> parserMap)
      FOR INTERNAL USE ONLY FOR INTERNAL USE ONLY FOR INTERNAL USE ONLY Internal method for reading report XML

      This method is called if text was encountered in the context of this node. (Examples would be a formula's text or a text element's text)

      Specified by:
      parseText in interface NodeParser
      Overrides:
      parseText in class Element
      Parameters:
      textData - text encountered and to be stored
      parserMap - The map of current Parser.
    • parseEndElement

      public void parseEndElement(com.inet.report.parser.XMLTag group, String tag, Map<String,Object> parserMap) throws FatalParserException
      FOR INTERNAL USE ONLY Internal method for reading report XML

      Receive notification of the end of an XML tag.

      Specified by:
      parseEndElement in interface NodeParser
      Overrides:
      parseEndElement in class ReportComponent
      Parameters:
      group - XMLTag of the current node to be parsed, or null if there is no such current group.
      tag - The XMLTag to be parsed
      parserMap - The map of current Parser.
      Throws:
      FatalParserException - if an exception occurs which causes the report to not be able to be read: causes the abortion of the reading of the report.
    • getSubComponents

      public List<? extends ReportComponent> getSubComponents()
      Returns all ReportComponents that are descendants of this one. E.G. this will return all Element of a Section. But it's as well useful for CrossTabs or Text elements which have additional elements. NOTE: This does not return any ReportComponent of the sub-engine!
      Specified by:
      getSubComponents in class ReportComponent
      Returns:
      a list with all sub components which can be empty as well; will be null if the component has no descendants