Skip to main content

Generic Child Bucket Table Placeholder

Overview​

Placeholder Id537412003
Placeholder typeText
EntityWorks with both planning records and bucket records
ContextSupported: _language, _country
Function variablesConfig Id — Id of the table defined inside childBucketTable.xml
Data Querycom.print.accpack.childbuckettable.dataquery.BucketQueryPlugin.getBucketOrPlannedBucket
Data Mappingcom.print.accpack.childbuckettable.datamapping.TableDataMappingPlugin.getChildBucketTable
Data Processingcom.priint.pubserver.comet.bridge.dataprocessing.IndesignTaggedTextFunctions.tableDataToTaggedTextWithOption
Options: ColumnWidthFromRowWithMostCells, TidyFirst, AutoLoadOff

The AutoLoadOff option of Data Processing tells the Publishing Server to skip autoloading placeholders inside table cells on placement.

  • Consider a table with 100 cells: the plugin fills all cell values during the initial table build.
  • You can still assign individual placeholders to cells to allow reloading specific values if the underlying data changes — this lets users do manual finishing without rebuilding the whole table.
  • Without AutoLoadOff: all placeholders in the cells would load on placement as part of the template build. Since the plugin already set the initial values, this loading adds no value — it only adds unnecessary requests and hurts performance.
  • If a placeholder performs additional logic (e.g. loading a sub-template or an image placeholder), it still needs to run — in that case, remove AutoLoadOff from the Data Processing options. See templateId.

XML Configuration File​

The XML configuration file childBucketTable.xml should be created in ISON Eclipse, located at:

com.priint.accpack.childbuckettable.GenericChildBucketTablePlugin/<client>/default

Example for <client> = WerkII:

User uploaded image

The sections below document all elements and attributes of childBucketTable.xml. Required elements are marked with (*).

tableConfiguration(*)​

Defines the overall table behavior, including how child records are collected, whether a header row is generated, and when the optional last column is displayed.

AttributeRequiredDescription
configIdyesConfiguration ID used as the placeholder function variable
tableStyleTable style to be applied
modeyesDetects children of a bucket or a planning record.
• bucket: children of a parent bucket or parent planned bucket
• planning: sub-planning records of a planning record
headerRowWhether to build the header row.
• true (default): builds the header row using the <header> column configuration. If all header cells are empty, the row is removed.
• false: skips the header row; the <header> configuration is ignored
showLastColumnWhenControls when to display <lastColumn>:
• none (default): does not display the last column
• any: always displays the last column (<lastColumn> should be defined)
• grouping: only displays when the table contains grouping rows, to keep groups together (<lastColumn> should be defined)

Example:

<tableConfiguration configId="Full" tableStyle="TableStyle" mode="bucket" headerRow="true" showLastColumnWhen="none">

rowFilters​

Filters the child buckets before they are added to the table. Multiple filter conditions can be combined using the configured logical operator.

AttributeRequiredDescription
operatoryesDetermines how multiple <rowFilter> conditions are combined.
• and: includes a row if the child bucket matches all conditions
• or: includes a row if the child bucket matches at least one condition

rowFilter​

Each child element defines one condition

AttributeRequiredDescription
sortyesOrdering of the condition to filter (integer)
entityIdentifieryesEntity identifier of the child bucket to filter

Example:

<rowFilters operator="or">
<rowFilter sort="1" entityIdentifier="article" />
</rowFilters>

groupColumns​

Groups body rows by one or more key values. Contains one or more <keyValue> child elements defining the grouping fields.

AttributeDescription
cellStylePostfixAppends a postfix to the cell style defined by the <groupFormats>. Useful for applying different cell styles to individual columns without defining additional row formats
paraStylePostfixAppends a postfix to the paragraph style defined by the <groupFormats>. Useful for applying different paragraph styles to individual columns while reusing the same row format
cellValueDelimiterWhen grouping by multiple key values, this string delimits each value in the group cell
groupedSortStrategySort order for grouping rows. Only takes effect when groupedSort is set.
• asc
• desc
• (empty string): keeps the original sort order but still groups records

keyValue(*)​

Each child element defines one grouping field

AttributeRequiredDescription
sortyesOrdering of the value of the key value on the grouping row (integer)
entityIdentifieryesEntity identifier of the key value to filter
keyyesKey of the key value to filter
groupedValueyesWhich field of key value to group. Supports XPath (v1) expressions
groupedSortWhich field to use for sorting. Supports XPath (v1) expressions. Empty value means no sorting; the grouping rows follow the bucket tree order
cellValueyesWhich value to display on the grouping row. Supports XPath (v1) expressions. In most cases equals groupedValue, but can differ if you want to display a different value on the grouping row

Example (group by multiple key values):

<groupColumns cellStylePostfix="" paraStylePostfix="" cellValueDelimiter="," groupedSortStrategy="asc">
<keyValue sort="1" entityIdentifier="category_attribute" key="brand" groupedValue="@value" groupedSort="@value" cellValue="concat(@keyLabel, ': ', @value)" />
<keyValue sort="2" entityIdentifier="category_attribute" key="name" groupedValue="@value" groupedSort="@value" cellValue="concat(@keyLabel, ': ', @value)" />
</groupColumns>

Example (group by single key value):

<groupColumns cellStylePostfix="" paraStylePostfix="">
<keyValue sort="1" entityIdentifier="category_attribute" key="brand" groupedValue="@value" groupedSort="@value" groupedSortStrategy="asc" cellValue="concat(@keyLabel, ': ', @value)" />
</groupColumns>

columns(*)​

Contains a list of <column> elements that define the table columns.

AttributeDescription
uniqueRowtrue: deduplicates rows with identical values across all columns, keeping only one instance
false (default): duplicate rows are always shown
removeEmptyRowtrue: removes rows where every column value is empty/null
false (default): empty/null rows are always shown
uniqueColumntrue: deduplicates columns with identical values across all rows, keeping only one instance
false (default): duplicate columns are always shown
removeEmptyColumntrue: removes columns where every row value is empty/null
false (default): empty/null columns are always shown

column(*)​

Each <column> defines a header cell and a body cell. Header and body can contain one or more cells. Cells display key value or media asset data.

AttributeRequiredDescription
sortyesDisplay order of the column in the table (integer)
widthColumn width in mm

Attributes shared by <header> and <body> cells​

AttributeDescription
cellStylePostfixAppends a postfix to the cell style defined by the <rowFormat>. Useful for applying different cell styles to individual columns without defining additional row formats
paraStylePostfixAppends a postfix to the paragraph style defined by the <rowFormat>. Useful for applying different paragraph styles to individual columns while reusing the same row format
cellValueDelimiterWhen a cell contains multiple values, this string delimits each value in the cell. Supports HTML-escaped characters, e.g. &lt;br/&gt; for a new line

keyValue (inside <header>/<body>)​

Defines one cell used to display a key value in the table cell.

AttributeRequiredDescription
entityIdentifieryesEntity identifier of the key value to filter
keyyesKey of the key value to filter
cellValueyesWhich field value to display on the cell. Supports XPath (v1) expressions
prefixCharacters added before the cell value. Supports HTML-escaped characters, e.g. &lt;br/&gt;
suffixCharacters added after the cell value. Supports HTML-escaped characters
characterStyleFormatting character style
placeholderIdPlaceholder ID to place inside the cell (optional)

Example:

<columns hideRowSameValue="false">
<column sort="2" width="20">
<header cellStylePostfix="" paraStylePostfix="">
<keyValue entityIdentifier="category_attribute" key="name" cellValue="@keyLabel" placeholderId="" />
</header>
<body cellStylePostfix="" paraStylePostfix="" cellValueDelimiter="&lt;br/&gt;">
<keyValue entityIdentifier="category_attribute" key="latin_name" cellValue="@value" placeholderId="" characterStyle="" />
<keyValue entityIdentifier="category_attribute" key="name" cellValue="@value" placeholderId="" characterStyle="" />
</body>
</column>
</columns>

Child element of <keyValue>.
One <search> element is supported per <keyValue>. This element extends the existing <keyValue> configuration to support dynamic lookup of key-value pairs based on a matching criterion, instead of requiring the exact entityIdentifier + key pair to be hard-coded.

<keyValue cellValue="@keyLabel" placeholderId="" characterStyle="" >
<search field="entityIdentifier" operator="eq" value="product_attribute" />
</keyValue>

Search attributes:

AttributeRequiredDescription
fieldyesWhich property of a key-value record to match against (see Supported fields below)
operatoryesHow to compare the record's field value against value (see Supported operators below)
valueyesThe value to compare against (a literal string or, for regex, a regular expression pattern)

Each <search> targets exactly one field at a time.

Supported fields:

FieldMatches against
entityIdentifierThe entityIdentifier of a key-value record
keyThe key of a key-value record
keyLabelThe keyLabel of a key-value record
keySymbolThe keySymbol of a key-value record
groupIdentifierThe groupIdentifier of a key-value record

Supported operators:

OperatorMeaning
eqField value equals value (case-insensitive)
neqField value does not equal value (case-insensitive)
containsField value contains value as a substring (case-insensitive)
ncontainsField value does not contain value (case-insensitive)
startsWithField value starts with value (case-insensitive)
nstartsWithField value does not start with value (case-insensitive)
endsWithField value ends with value (case-insensitive)
nendsWithField value does not end with value (case-insensitive)
regexField value fully matches the regular expression in value (case-sensitive)

mediaAsset​

Child element of <body>.
Defines one cell used to display an image in the table cell.

AttributeRequiredDescription
entityIdentifieryesEntity identifier of the media asset to filter
cellValueyesUse either @url or @file, depending on how the media asset is stored. Only one should be used per media asset configuration
labelEach value is delimited by ; supports regular expressions with prefix regexp: to search images by label
widthyesWidth in mm
heightyesHeight in mm
placeholderIdPlaceholder ID to place inside the cell (optional)
templateIdPlaces a sub-template inside the cell instead of a direct image reference (optional)
placementyesPosition of the image inside the cell: center, left, or right

When using templateId or placeholderId, remove AutoLoadOff from the Data Processing options to enable image loading.

Example:

<column sort="30" width="30">
<body cellStylePostfix="" paraStylePostfix="">
<mediaAsset entityIdentifier="ArticleAsset" label="PRODUCT_IMAGE" cellValue="@url" placeholderId="" width="30" height="30" placement="center"/>
</body>
</column>

Value Transformation​

Cell values can be transformed before they are written to the table. Two mechanisms are supported.

a) Static transform (//static_transform) Transforms a key value to a mapped value using an identifier in staticContent.xml.

  • cellValue="//static_transform['1']": finds identifier "1" inside staticContent.xml by context
  • cellValue="//static_transform[@value]": finds the identifier by evaluating XPath @value, then looks it up in staticContent.xml using context

b) Publishing Server plugin method Calls a custom Publishing Server plugin method. The method receives a KeyValue entity cast from Object:

cellValue="plugin(globalName='com.priint.project.demo.ChildBucketTableTransformPlugin',methodName='transformName')"

Example implementation of the method:

public String transformName(Object object){
KeyValue kv = (KeyValue)object;
//your implementation
}

Placeholder inside cell​

See ChildBucket_StaticContent and ChildBucket_KeyValueById for supported placeholder types.

functionVariables​

Defines function variables for a placeholder in the table cell. How many variables depend on the placeholder ID configured.

variable​

Child element of <functionVariables>.

AttributeDescription
nameName of the function variable — placeholder option name
valueInitial value of the function variable — placeholder option value. Supports XPath (v1) expressions

ChildBucket_KeyValueById supports an XPath function variable, defined as follows:

<column sort="2" width="40">
<body cellStylePostfix="" paraStylePostfix=" Copy">
<keyValue entityIdentifier="product_attribute" key="plant_name" cellValue="@value" placeholderId="537688584" characterStyle="Body-Bold">
<functionVariables>
<variable name="xpath" value="@value"/>
</functionVariables>
</keyValue>
</body>
</column>

lastColumn​

Useful when the table has grouping rows. Keeps the grouping row visually connected to its body rows. Only takes effect when showLastColumnWhen is set to any or grouping.

AttributeDescription
widthColumn width in mm
cellStyleCell style applied to the last column

Example:

<lastColumn width="1.1" cellStyle="Last"/>

Similar to body columns, but all the cells will be merged for each row. Helpful if you want to display a static text translation.

Example:

<footer cellStylePostfix="" paraStylePostfix="">
<keyValue cellValue="//static_transform[footer_note]" />
</footer>

Row Format​

groupFormats​

Applies to grouping rows only, when the table contains grouping rows.

<groupFormats>
<rowFormat sort="1" height="7" first="1" next="1" cellStyle="PTHeaderGroup" paraStyle="PTHeaderGroup" />
</groupFormats>

headerFormats​

Applies to the header row only, when headerRow is true.

<headerFormats>
<rowFormat sort="1" height="7" first="1" next="1" cellStyle="PTHeader" paraStyle="PTHeader" />
</headerFormats>

footerFormats​

Applies to footer rows only, as configured by <footer>.

<footerFormats>
<rowFormat sort="1" height="7" first="1" next="1" cellStyle="PTBodyFooter" paraStyle="PTBodyFooter" />
</footerFormats>

rowFormats​

Applies to body rows only. The table supports separate formats for header, grouping, body, and footer rows. When override behavior is enabled, the corresponding header, grouping, or footer row uses the row formats defined in <rowFormats> instead of its dedicated format section.

Multiple <rowFormat> elements can be defined to create alternating row styles. The first and next attributes determine how the formats repeat across body rows.

Example (two alternating row formats for body rows): Odd rows (1, 3, 5, 7, ...) use the first format (PTBodyWithoutBackground cell style, PTBody paragraph style); even rows (2, 4, 6, 8, ...) use the second format (PTBodyWithBackground cell style, PTBody paragraph style).

<rowFormat sort="1" height="7" first="1" next="2" cellStyle="PTBodyWithoutBackground" paraStyle="PTBody"/>
<rowFormat sort="2" height="7" first="2" next="2" cellStyle="PTBodyWithBackground" paraStyle="PTBody" />
AttributeDescription
overrideFormatHeadertrue: overrides <headerFormats> with the body row format (the element is not needed)
false (default): does not override
overrideFormatGrouptrue: overrides <groupFormats>
false (default): does not override
overrideFormatFootertrue: overrides <footerFormats>
false (default): does not override

Example:

<rowFormats overrideFormatHeader="true" overrideFormatGroup="true" overrideFormatFooter="true">
<rowFormat sort="1" height="7" first="1" next="2" cellStyle="PTBodyWithoutBackground" paraStyle="PTBody"/>
<rowFormat sort="2" height="7" first="2" next="2" cellStyle="PTBodyWithBackground" paraStyle="PTBody" />
</rowFormats>