Classes
- Last UpdatedJan 28, 2025
- 12 minute read
The Classes section defines what classes to be included in the report, and for each class, what columns to render. This section is a generalization of the deprecated section Functionals from previous version of Permissible Grid. Functionals is supported for backward compatibility though.
The syntax for Classes definition is:
<Classes concept="Functional" autoFilter="true" classHierarchy="Expanded" where="./@name.isNotNull()"
suppressTopLevelAbstractClasses="false">
...
</Classes>
|
Element |
Property |
Description |
|---|---|---|
|
Classes |
The containing element for OrderBys and Columns Except for where, expressions supplied for property values on this element will be resolved in the context of the ClassLibrary node (see Context nodes and expression syntax). |
|
|
concept |
An expression resolving to a class concept specifier:
When omitted, Functional will be the default value |
|
|
classHierarchy |
An optional expression controlling how the class hierarchy should be rendered.
|
|
|
autoFilter |
An optional Boolean expression specifying whether an Excel auto filter (filter buttons for column values) should be defined for the row containing the class headers. |
|
|
where |
An optional Boolean expression defining the criteria for what Classes to include in the report (see Value expressions). The context of this expression will be the individual Classes (see Context nodes and expression syntax). If not specified, all qualifying Classes (see suppressTopLevelAbstractClasses below) will be included in the report. IMPORTANT: |
|
|
suppressTopLevelAbstractClasses |
An optional Boolean expression specifying whether to automatically suppress classes matching:
This property defaults to true, i.e. classes as specified above are by default suppressed from the report. |
|
|
suppressAbstractSingleRootClass |
An optional Boolean expression specifying whether to automatically suppress a single abstract root class (such as e.g. the ISM_ROOT_FUNCTIONAL class, auto generated by the Excel reader) This property defaults to true, i.e. any abstract single root class in the Class Library are by default suppressed from the report. |
OrderBys
The Classes/OrderBys section controls in what order the classes will be rendered, and how to separate groups of similar classes.

Example of Classes/OrderBys syntax:
<Classes ...>
<OrderBys>
<OrderBy geicl:id="Extends" condition="./@extendsId ?? ZZZ" direction="Ascending" break="Row"
value="concat(./@extendsId, ' - ', ./@extends)" header="' '">
<Style>
<Borders>
<Bottom style="Dashed"/>
<Top style="None"/>
</Borders>
<Font size="11" bold="true" color="rgb(0,0,0)"/>
</Style>
<HeaderStyle>
<Borders>
<Bottom style="None"/>
<Top style="Double"/>
</Borders>
<Fill pattern="None"/>
</HeaderStyle>
</OrderBy>
<OrderBy geicl:id="Name" condition="./@name" direction="Ascending"/>
</OrderBys>
...
|
Element |
Property |
Description |
|---|---|---|
|
Classes |
The containing element for OrderBys and Columns |
|
|
OrderBys |
An optional element holding a collection of OrderBy definitions |
|
|
style |
An optional reference to a Named Style definition from the section above. The content of OrderBy@value will be formatted according to the referenced style definition. If not specified, the default value will be taken from PermissibleGrid@style |
|
|
headerStyle |
An optional reference to a Named Style definition from the section above. The content of OrderBy@header will be formatted according to the referenced style definition. If not specified, the default value will be taken from PermissibleGrid@headerStyle |
|
|
OrderBy |
geicl:id |
Assigns an identifier to the OrderBy. All items inside a collection element, such as OrderBys must have an identifier which is unique within the containing collection |
|
condition |
An expression resolving to the order by value for each individual class. If the expression resolves to an empty value for some of the classes, you can specify a default value to control how these instances are ordered. If you want to order by the @sortOrder property of the classes, you should use the expression ./@sortKey. The synthetic property @sortKey holds the value of integer property @sortOrder, but formatted as a sortable string value |
|
|
direction |
Specifies in what direction the ordering should be organised:
|
|
|
break |
Specifies how to separate groups of classes. All classes having the same value for @condition is said to belong to the same group:
|
|
|
collapsed |
This setting is applicable only when @break="Row". An optional Boolean expression specifying how to outline rows in a break group. The options are:
|
|
|
value |
An optional expression resolving to a value that will be rendered as the group title. How the value is rendered depends on @break:
|
|
|
header |
An optional expression resolving to a value that will be rendered as an extra group title. How the header is rendered depends on @break:
|
|
|
style |
This setting is applicable only when @break="Row". An optional reference to a Named Style definition from the section above. The content of OrderBy@value will be formatted according to the referenced style definition. If not specified, the default value will be taken from OrderBys@style |
|
|
headerStyle |
This setting is applicable only when @break="Row". An optional reference to a Named Style definition from the section above. The content of OrderBy@header will be formatted according to the referenced style definition. If not specified, the default value will be taken from OrderBys@headerStyle |
|
|
suppress |
When the value of this property resolves to true the OrderBy definition will be excluded from the report definition. This feature can e.g. be used select applicable OrderBy definitions, based on conditions derived from context or user input |
|
|
geicl:sortOrder |
An integer value that controls the order of siblings in the containing collection. To fully understand the impact of using this property. |
|
|
OrderBy/ Style |
This setting is applicable only when @break="Row". An optional inline style definition, supporting the same syntax as . When present, all inline definitions will take precedence over the definitions in a Named Style, referenced by the OrderBy@style property |
|
|
OrderBy/ HeaderStyle |
This setting is applicable only when @break="Row". An optional inline style definition, supporting the same syntax as . When present, all inline definitions will take precedence over the definitions in a Named Style, referenced by the OrderBy@headerStyle property |
|
|
OrderBy/ Conditions |
This setting is applicable only when @break="Row". The containing element for optional Condition definitions. Condition definitions can be used to override @style and @headerStyle settings and optionally @value and @header of the group title row(s), based on a condition. |
|
|
Condition |
geicl:id |
Assigns an identifier to the Condition. All items inside a collection element, such as Conditions must have an identifier which is unique within the containing collection |
|
where |
A Boolean expression used to control whether the condition is fulfilled (see Context nodes and expression syntax) |
|
|
Style |
An optional reference to a Named Style definition from the section above. When the condition is fulfilled the effective style for the group title row will be an aggregate of the @style definitions on Condition and OrderBy, with definitions on Condition taking precedence |
|
|
headerStyle |
An optional reference to a Named Style definition from the section above. When the condition is fulfilled the effective style for the extra group title row will be an aggregate of the @headerStyle definitions on Condition and OrderBy, with definitions on Condition taking precedence |
|
|
value |
An optional expression defining the content of the group title row (see Value expressions). When the condition is fulfilled, the Condition@value will take precedence over the OrderBy@value. The presence of @value has an impact on how Condition statements are applied:
|
|
|
header |
An optional expression defining the content of the extra group title row (see Value expressions). When the condition is fulfilled, Condition@header will take precedence over OrderBy@header. |
|
|
suppress |
When the value of this property resolves to true the Condition definition will be excluded from the report definition. This feature can e.g. be used to select applicable Condition definitions, based on conditions derived from context or user input |
|
|
geicl:sortOrder |
An integer value that controls the order of siblings in the containing collection. To fully understand the impact of using this property. |
|
|
Condition/ Style |
An optional inline style definition, supporting the same syntax as . When present, all inline definitions will take precedence over the definitions in a Named Style, referenced by the @style property |
|
|
Condition/ HeaderStyle |
An optional inline style definition, supporting the same syntax as . When present, all inline definitions will take precedence over the definitions in a Named Style, referenced by the @headerStyle property |
Columns
The Classes/Columns section specifies the columns of Class information to be rendered.

Example of Classes/Columns syntax:
<Classes ...>
<OrderBys>
...
</OrderBys>
<Columns headerStyle="TagHeader" style="TagColumn">
<Column geicl:id="Sub Classes" header="Classes/Sub Classes'"
value="concat(./@id, ' - ', ./@name)" />
</Columns>
</Classes>
|
Element |
Property |
Description |
|---|---|---|
|
Classes |
The containing element for OrderBys and Columns |
|
|
Columns |
The containing element for a collection of Column definitions |
|
|
style |
An optional reference to a Named Style definition from the section above. The content of Column@value will be formatted according to the referenced style definition. If not specified, the default value will be taken from PermissibleGrid@style |
|
|
headerStyle |
An optional reference to a Named Style definition from the section above. The content of Column@header will be formatted according to the referenced style definition. If not specified, the default value will be taken from PermissibleGrid@headerStyle |
|
|
freeze |
An optional Boolean expression specifying whether all columns should be frozen in the resulting sheet. Frozen columns will not scroll horizontally. |
|
|
Column |
geicl:id |
Assigns an identifier to the Column. All items inside a collection element, such as Columns, must have an identifier which is unique within the containing collection |
|
value |
An expression resolving to a value that will be rendered for the column for each corresponding class. |
|
|
header |
An optional expression resolving to a value that will be rendered for the column in the class header row. |
|
|
style |
An optional reference to a Named Style definition from the section above. The content of Column@value will be formatted according to the referenced style definition. If not specified, the default value will be taken from Columns@style |
|
|
headerStyle |
An optional reference to a Named Style definition from the section above. The content of Column@header will be formatted according to the referenced style definition. If not specified, the default value will be taken from Columns@headerStyle |
|
|
freeze |
An optional Boolean expression specifying whether the column should be frozen in the resulting sheet. A frozen column will not scroll horizontally. A frozen columns pane always starts from the left most column, hence the last column specified to freeze will dictate how many columns will be frozen. |
|
|
suppress |
When the value of this property resolves to true the Column definition will be excluded from the report definition. This feature can e.g. be used to select applicable Column definitions, based on conditions derived from context or user input |
|
|
geicl:sortOrder |
An integer value that controls the order of siblings in the containing collection. To fully understand the impact of using this property, please see the explanation in |
|
|
Column/ Style |
An optional inline style definition, supporting the same syntax as . When present, all inline definitions will take precedence over the definitions in a Named Style, referenced by the Column@style property |
|
|
Column / HeaderStyle |
An optional inline style definition, supporting the same syntax as . When present, all inline definitions will take precedence over the definitions in a Named Style, referenced by the Column@headerStyle property |
|
|
Column /Conditions |
The containing element for optional Condition definitions. Condition definitions can be used to override @style settings and optionally @value of the column, based on a condition. |
|
|
Condition |
geicl:id |
Assigns an identifier to the Condition. All items inside a collection element, such as Conditions must have an identifier which is unique within the containing collection |
|
where |
A Boolean expression used to control whether the condition is fulfilled (see Context nodes and expression syntax) |
|
|
style |
An optional reference to a Named Style definition from the section above. When the condition is fulfilled the effective style for the column cell will be an aggregate of the @style definitions on Condition and Column, with definitions on Condition taking precedence |
|
|
value |
An optional expression defining the content of the column cell (see Value expressions). When the condition is fulfilled, the Condition@value will take precedence over the Column@value. The presence of @value has an impact on how Condition statements are applied:
|
|
|
suppress |
When the value of this property resolves to true the Condition definition will be excluded from the report definition. This feature can e.g. be used to select applicable Condition definitions, based on conditions derived from context or user input |
|
|
geicl:sortOrder |
An integer value that controls the order of siblings in the containing collection. To fully understand the impact of using this property. |
|
|
Condition/ Style |
An optional inline style definition, supporting the same syntax as . When present, all inline definitions will take precedence over the definitions in a Named Style, referenced by the @style property |
Joins
Tha Classes/Joins section enables joining of associated classes, potentially from different concepts.
Example of Join syntax:
<Classes concept="Functional" autoFilter="true">
<OrderBys>
<OrderBy geicl:id="Discipline" condition="./@discipline ?? ZZZ" direction="Ascending"/>
</OrderBys>
<Columns headerStyle="TagHeader">
<Column geicl:id="Discipline" header="'Discipline'" value="./@discipline ?? 'Misc'"/>
<Column geicl:id="ClassName" header="'Name'.concat(' ({0})').format($NumberOfClassesInSheet)" value="./@name" freeze="true"/>
<Column geicl:id="ClassId" header="'Class Id'" value="./@id" />
<Column geicl:id="AttributeCount" header="'#Attributes'" value="./@permissibleAttributesInSheetCount" />
</Columns>
<Joins>
<Join geicl:id="Physical" concept="Physical" constraint="Left">
<Attributes permissibleOnly="true" collapsed="false">
<OrderBys>
<OrderBy geicl:id="GroupId" condition="./@groupId ?? ZZZZ" direction="Ascending" />
<OrderBy geicl:id="Name" condition="./@name" direction="Ascending" />
</OrderBys>
<Headers style="PhysicalAttributeHeader" headerStyle="AttributeLegend">
<Header geicl:id="Physical" mergeCells="true" value="'Requirements for Physical Classes'" />
<Header geicl:id="Group" mergeCells="true" header="'Group'.concat(' →')" value="./@group ?? 'Misc'" />
<Header geicl:id="Name" header="'Name'.concat(' ({0}) {1}').format($NumberOfAttributesInSheet, '→')" value="./@name" />
</Headers>
<Columns styleWhenPresent="PermissiblePresent" styleWhenAbsent="PermissibleAbsent">
<Column geicl:id="PresenceMarker" valueWhenPresent="./@presenceForEdit" valueWhenAbsent="">
<Conditions>
<Condition geicl:id="IsDerived" where="IsDerived()" />
</Conditions>
</Column>
</Columns>
</Attributes>
<Classes>
<OrderBys>
<OrderBy geicl:id="SortKey" condition="./@sortKey" />
</OrderBys>
<Columns headerStyle="PhysicalTagHeader">
<Column geicl:id="ClassName" header="'Name'.concat(' ({0})').format($NumberOfClassesInSheet)" value="./@name"/>
<Column geicl:id="ClassId" header="'Class Id'" value="./@id" />
</Columns>
</Classes>
</Join>
</Joins>
</Classes>
|
Element |
Property |
Description |
|---|---|---|
|
Joins |
The containing element for Join definitions. |
|
|
Join |
geicl:id |
Assigns an identifier to the Join. All items inside a collection element, such as Joins, must have an identifier which is unique within the containing collection. |
|
concept |
An expression resolving to a class concept specifier for classes to join:
When omitted, Physical will be the default value. The classes to join will be resolved based on permissible attributes having Validation Type=Association and Target Classes matching the specified concept |
|
|
constraint |
An expression resolving to a constraint specifier:
|
|
|
suppress |
When the value of this property resolves to true the Join definition will be excluded from the report definition. This feature can e.g. be used to allow the user to choose whether to include the join section |
|
|
geicl:sortOrder |
An integer value that controls the order of siblings in the containing collection. To fully understand the impact of using this property In this version (2.0), there are only support for one Join section in a report configuration |
|
|
Attributes |
This section defines what attributes to be included for the joind classes, how to render the attribute header rows and how to render the cells in the intersection between attributes and the joined classes. The structure of this section is like the primary Attributes section |
|
|
Classes |
This section defines what joined classes to be included in the report, how to order them, and for each class, what columns to render |
|
|
where |
A Boolean expression that will resolve in the context of each joined class to determine whether to include the class in the result (see Context nodes and expression syntax) |
|
|
Classes/OrderBys |
This section defines how to order joined classes. This section is like Classes/OrderBys |
|
|
Classes/Columns |
This section defines what columns to include in the joined section, and how they should be rendered. This section is like |