A number of standard member types and member type types are provided for creating node types and member types that process tables.
|Table data (library.table.TableData)||Provides a container for holding table data.|
|Table Display (library.table.TableDisplay)||Displays data held in Table data as a table.|
|Raw table data (library.table.RawTableData)||Displays data held in Table data as JSON. This can be useful in debugging. It is used by various Table nodes.|
Member type types
|Table Display Member Type (library.table.TableDisplayMemberTypeType)||Creates member types for displaying tables held in other member types.|
|Table Builder Member Type (library.table.TableBuilderMemberTypeType)||Creates member types that generate and optionally display tables from a view and a list of nodes held on another member type.|
|Script Table Member Type (library.table.ScriptTableMemberTypeType)||Creates member types that generate and optionally display tables from a script.|
Dynamic tables is a convention for defining calculated tables that can be used very flexibly. They can be:
- Derived and stored as node members.
- Calculated when first accessed after derivation, and then cached.
- Recalculated every time they area accessed.
Dynamic tables can be used as member types, to derive data and/or display tables. Dynamic tables can be loaded from any node, not just those that define them as member types. The dynamic table processing picks the most appropriate access method. If the permissions and the options set on the dynamic table allow it, table data will be cached even if the node from which the table loaded does not have the table as a member type.
Dynamic tables created with Table Builder Member Type (library.table.TableBuilderMemberTypeType) use "fast table" processing, as do scripts that use the Table Script Table.buildAll() method. In this, all the data for the table is retrieved in a single action, which is orders of magnitude faster than normal member-at-a-time retrieval. The fast table processing also supports caching on row nodes, further increasing performance where complicated calculations are carried out for each row.
Dynamic tables can reference other dynamic tables. Streams of table-based processing can be defined without having to modify the source data and without having to define nodes to hold intermediate results. Where it does make sense to hold intermediate results as nodes, the Table Loader (library.table.TableLoaderType) node type can be used.