Task UI and Dashboard configuration

Introduction

Flexible UIs are used in Product 360 for two purposes:

  • Defining dashboards that offer a tailored overview of the Product 360 data from which the user can switch to relevant details easily.

  • Defining task UIs which help the user to focus on just the data and actions that are needed to accomplish an assigned task.

Flexible UIs are defined in an XML based specification language. The root tag is flexUi. It has a single attribute: version. The version is currently fixed at 1.0.0. It may be increased in future releases if/when substantial new features are added to the specification language.

The rest of this document describes the concepts and details used in flexible UI templates.

Layout

Flexible UIs consist of components. These components need to be arranged in a specific way which is the role of the layout tag. It is structured as follows:

  • The layout type is specified as an attribute of the layout tag. Different layout types have different approaches for arranging the components. As of now only one layout type (grid) is supported.

  • A layout type may support a number of parameters to fine tune its behavior. These parameters are supplied via parameter tags with key and value attributes, where the key specifies the parameter name.

  • One or more components are specified next. They will be arranged on the screen per the rules of the layout type.

  • Each component can carry additional parameters relating to the layout to further fine tune the appearance. These parameters are nested within a layoutData tag to differentiate them from parameters of the component itself.

Here is the definition of a simple flexible UI to show the basic structure:

Hello world
<flexUi version="1.0.0">
<layout type="grid">
 
 <!-- these parameters specify the details for the "grid" layout used here -->
<parameter key="columns" value="2"/>
<parameter key="rows" value="1"/>
 
<component type="messageBox" identifier="message1" i18NKey="Greetings">
 
<layoutData>
<!-- this area specifies layout details for this component -->
<parameter key="colSpan" value="2"/>
</layoutData>
<!-- this is a parameter specific to the functionality of the individual component -->
<parameter key="message" value="Hello, world!"/>
 
</component>
 
</layout>
</flexUi>

Grid layout

In this type of layout the available space for the UI is divided into cells of a grid. Similar to HTML tables, there are a number of columns and rows which are defined at the layout level. Each component can occupy several adjacent cells in this grid.

Components are added to the grid in the sequence they appear in the XML. For each component the layout algorithm looks for free space of the appropriate size, going from left to right and top to bottom, i.e. the first row is filled as much as possible, skipping to the next row when the next component would not fit any more in the current row. Cells that remain unoccupied may be filled with a subsequent component if it fits, meaning that the layout tries to fill out empty spots as soon as possible.

Collapsing components

With collapsible components the user can temporarily minimize information that is not needed and use the additional space to increase the size of other components. In general a component can only be collapsible if it occupies the full width or the full height of the UI. Through this restriction the collapsing behavior is working in a way that is intuitive for the user: a whole column (or a whole row) is collapsed and all other columns (rows) are proportionally increased in size. If it were possible to minimize a component that only occupies part of the width/height of the UI then the components would have to be rearranged on the fly to fill out the empty space, making it harder for the user to relocate any individual components.

images/download/attachments/469316190/CollapseExample1.png

Horizontal collapsing

When a component occupying a whole column is marked as collapsible it gets a button added in the top left of its header. Depending on the state the button displays a minus sign for collapsing or a plus sign for expanding the component.In collapsed mode the width of the component is reduced to the width of the button and the component title is displayed in a banner below the button rotated 90 degrees to to the left.

Vertical collapsing

When a component occupying a whole row is marked as collapsible it gets a button added in the top left of its header. The button displays a triangle pointing right in collapsed state and pointing down in expanded state. When collapsed the component is reduced to its header.

For a finer control of the collapsed state of a subgroup of components see the group component below.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that the goal of collapsing is to have more space for other components. Therefore a component can only be collapsed if some other component(s) remain visible. To enforce this, the button for collapsing a component is hidden if it is the only component to be be fully visible currently.

Type: grid

Parameter name

M(andatory)
O(ptional)

Layout parameter (LP)
Component layout data
parameter (CLP)

Example values

Description

columns

O

LP

1 (default)

Specifies the number of columns in the grid.

rows

O

LP

1 (default)

Specifies the number of rows in the grid.

columnWidth

O

LP

css width in pixels (like "300px")

Cell width. By default all available width is equally divided between all cells.

rowHeight

O

LP

css height in pixels (like "300px")

Cell height. By default all available height is equally divided between all cells.

spacingSize

O

LP

css size in pixels (like "25px")

If columnWidth or rowHeight are defined the desired spacing between cells needs to be specified as well (default 6px).

colSpan

O

CLP

1 (default)

Number of cells occupied by component in horizontal direction.

rowSpan

O

CLP

1 (default)

Number of cells occupied by component in vertical direction.

collapsible

O

CLP

true

false (default)

Specifies whether the component should be collapsible in the UI.

collapsed

O

CLP

true (default)

false

Specifies whether the component should be collapsed initially. Only applies if collapsible is set to true.

Grouping components

With the group component it is possible to occupy an area in the layout and then place a number of nested components into this area. In this way it is possible to create layouts that break up the rigid structure of the grid. For example a group can occupy 4 columns and then place 5 components in this area that share this space equally. Using size ratios for the individual components the structure of the UI can deviate from the enclosing layout even more.
The second feature of groups is that they manage the collapsible behavior locally between the nested components.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Use the flexibility of the group component carefully. The overall UI should still present a clear structure to the user.

images/download/attachments/469316190/CollapseExample2.png

From the perspective of the enclosing layout the group component acts like a single component and it carries the layout data for the whole group (however groups do not support the collapsible/collapsed parameters, i.e. a group as a whole cannot be collapsed within its layout). The layoutData parameters that can be set for each nested component are defined by the group component - see below.

Tag: group

Parameter name

M(andatory)
O(ptional)

Group parameter (GP)

Component layout data
parameter (CLP)

Example values

Description

direction

O

GP

horizontal (default)

vertical

Direction for placing the child components.

collapsible

O

CLP

true (default)

false

Specifies whether the component should be collapsible in the UI. The direction of collapsing is defined by the direction of the group.

collapsed

O

CLP

true (default)

false

Specifies whether the component should be collapsed initially.

sizeRatio

O

CLP

1 (default)

Defines the relative amount of space (in the direction of the group) the component will be assigned. By default all components have ratio 1 and the space will be distributed equally.

With three components and ratios set to 1, 2, and 1, the middle component will get half the space while the others get a quarter each. If the middle component is collapsed the available space is split equally between the other two as both have the same ratio.

Data Sources

A data source can be used to retrieve a set of entity items (e.g. articles or products). The underlying mechanism used for providing the data set is dependent on the data source type. Each data source is defined using a common XML structure. Data source definitions appear nested in component instance definitions. The respective component type specifies if and how many data sources it supports and what identifiers those data sources should have.

Explicit data sources are mostly used in dashboard components. Within the flexible task UI there is always an implicit data source consisting of the entity items attached to the task.

The most common starting points for specifying sets of entity items in Product 360 are:

  • Catalogs - all the items of either the master catalog or a supplier catalog

  • Assortments - all the items within an assortment

  • Structures - items that have been classified in a specific structure system to any structure group or items classified to a specific structure group

    => these are covered by the entity report based data source types, see examples below

  • User defined saved searches with flexible criteria for defining a set of items

    => there is a separate data source type for saved searches, see below

  • Ad hoc searches using a detailed search expression

    => this is implemented by a special entity report called "bySearch" and is available through the "Report by alias" data source type, see example below. The expression syntax is documented under "REST Search Query Language".

Field / subelement

Description

type

This specifies the type of the data source. See the entries below for possible values.

identifier

Unique name within the scope of the data source definition. For example a specific component may support multiple data source definitions and the identifier can be used to select the right one.

ref

Reference that is used to identify the underlying instance that will provide the data. For example the unique identifier of an entity report if the underlying mechanism is report based.

entity

The entity of the items that are provided. This only needs to be specified for some data source types where the "ref" field on its own is not unique.

parameter

Key / value pairs providing parameters for the underlying mechanism. For example in case of reports these pairs are matched to parameters defined in the actual report. The following entry specifies that the parameter "catalog" should be set to "Apparel":

<parameter key="catalog" value="Apparel" />

Additionally a special suffix .editable is recognized in the parameter key. The value is expected to be a boolean (true/false) and it specifies whether the related parameter (same key without the suffix) is made available to the user so he/she can choose the actual value on the fly via a combo box. Here is an example:

<parameter key="catalog" value="Apparel" /> <parameter key="catalog.editable" value="true" />

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that not all components supporting data sources also support interactive choice of data source parameters. Also, the actual data source must provide an enumeration for the parameter to choose values from. The value provided in the XML ("Apparel") must be from this enumeration and will be pres-elected in the combo box. If it is not part of the enumeration it will be ignored and the selection will be empty initially.

Finally, if the key/value pair for the parameter is omitted, i.e. only the .editable entry for it is present, then the parameter will be set to a default value provided by the underlying data source implementation (e.g. entity reports may have defaults for their parameters defined). If no such default value is provided then the selection is left empty initially.

Report by alias

This type of data source represents an entity report that has been contributed to Product 360 via the extension mechanism and is available via the REST interface of the Product 360 server. The REST interface supports browsing for available reports and parameters. For example the available reports for returning a set of articles can be viewed at http://<pim.server>:1501/rest/V1.0/list/Article/info. Clicking on the report name provides the list of parameters that can be used.

Field/subelement

Value

Description

type

reportByAlias

ref

e.g. byStructureGroup

Has to match the "alias" of an entity report that has been contributed to the Product 360 installation via the Eclipse extension point.

entity

e.g. Article

Has to match the "item-entity" attribute of the same entity report.

parameter

e.g. key="catalog" value="Apparel"

Specifies a value that will be passed to the report before execution. The "key" has to match either the "id" or the "alias" field of a report parameter as defined in the Eclipse extension.

Report-by-alias data source examples
<!-- all products in the master catalog -->
<dataSource identifier="dataSet" type="reportByAlias" ref="byCatalog" entity="Product2G" />
 
<!-- all articles in a supplier catalog -->
<dataSource identifier="dataSet" type="reportByAlias" ref="byCatalog" entity="Article" >
<parameter key="catalog" value="Apparel"/>
</dataSource>
 
<!-- all articles in a supplier catalog - catalog can be selected interactively -->
<dataSource identifier="dataSet" type="reportByAlias" ref="byCatalog" entity="Article" >
<parameter key="catalog" value="Apparel"/>
<parameter key="catalog.editable" value="true"/>
</dataSource>
 
<!-- all articles in a catalog - catalog can be selected interactively and defaults to master catalog -->
<dataSource identifier="dataSet" type="reportByAlias" ref="byCatalog" entity="Article" >
<parameter key="catalog.editable" value="true"/>
</dataSource>
 
<!-- all articles in an assortment - note there is an issue currently for referencing assortments by name, -->
<!-- instead the internal ID has to be used -->
<dataSource identifier="dataSet" type="reportByAlias" ref="byAssortment" entity="Article" >
<parameter key="Assortment" value="33"/>
</dataSource>
 
<!-- all articles from master catalog classified in a structure system -->
<dataSource identifier="dataSet" type="reportByAlias" ref="classifiedBy" entity="Article" >
<parameter key="structure" value="Heiler Standard"/>
</dataSource>
 
<!-- all articles from supplier catalog classified in a structure system -->
<dataSource identifier="dataSet" type="reportByAlias" ref="classifiedBy" entity="Article" >
<parameter key="structure" value="Heiler Standard"/>
<parameter key="catalog" value="Apparel"/>
</dataSource>
 
<!-- all articles from master catalog classified in a structure group -->
<dataSource identifier="dataSet" type="reportByAlias" ref="byStructureGroup" entity="Article" >
<parameter key="structureGroup" value="'GROUP_1'@'HeilerStandard'"/>
</dataSource>
 
<!-- add hoc search - all articles in a specific segment and with a price in a specific price range, -->
<!-- note that the 'less than' sign had to be encoded as it is not allowed in XML attribute values -->
<!-- Note that most field qualifications use the default from the repository. They could be of course -->
<!-- also specified directly here - e.g. looking at the segment in German and comparing against the -->
<!-- prices in Euro in Germany, etc. -->
<dataSource identifier="dataSet" type="reportByAlias" ref="bySearch" entity="Article" >
<parameter key="query" value="ArticleLang.Segment(${Default}) = Segment01 and ArticlePriceValuePurchase.Amount(${Default},${Default},${Default},${Default},${Default},1.0) > 60 and ArticlePriceValuePurchase.Amount(${Default},${Default},${Default},${Default},${Default},1.0) &lt; 90"/>
</dataSource>
 
<!-- add the value within single quotes in case of an expression starting with a number -->
<dataSource identifier = "dataSet" type = "reportByAlias" ref = "bySearch" entity = "Article">
<parameter key = "query" value = 'Article.SupplierAID startsWith "1)"' />
</dataSource>
 
<dataSource identifier = "dataSet" type = "reportByAlias" ref = "bySearch" entity = "Article">
<parameter key="query" value= 'ArticleStructureMap.StructureGroup(HeilerStandard) -> StructureGroup.Identifier startsWith "04_"' />
</dataSource>
 
<dataSource identifier = "dataSet" type = "reportByAlias" ref = "bySearch" entity = "Article">
<parameter key = "query" value = 'Article.SupplierAID equals "1001618-4-502051-2)"' />
</dataSource>

Report by ID

This type of data source also represents an entity report that has been contributed to Product 360 via the extension mechanism. The only difference is that it can also be used to access reports that have not been made available via the REST interface.

Field/subelement

Value

Description

type

reportById

ref

e.g. com.heiler.ppm.article.core.ArticlesOfStrucureGroup

Has to match the "id" of an entity report that has been contributed to the Product 360 installation via the Eclipse extension point.

parameter

e.g. key="catalog" value="Apparel"

Specifies a value that will be passed to the report before execution. The "key" has to match either ther "id" or the "alias" field of a report parameter as defined in the contribution to the Eclipse extension point.

Report-by-ID data source examples
<!-- ***** Simple data source without parameters -->
<!-- All articles in the master catalog -->
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.ArticlesOfMasterCatalog" />
 
<!-- ***** Data sources with parameters -->
 
<!-- All articles of a supplier catalog -->
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.ArticlesOfSupplierCatalog">
<parameter key="SupplierCatalog" value="Apparel" />
</dataSource>
 
<!-- All articles of an assortment -->
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.assortment.core.ArticlesOfAssortment">
<parameter key="Assortment" value="MyAssortment" />
</dataSource>
 
<!-- All articles from master catalog classified within a structure system -->
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.SupplierArticlesClassifiedTo">
<parameter key="Structure" value="HeilerStandard" />
</dataSource>
 
<!-- All articles from master catalog classified to a specific structure group -->
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.ArticlesOfStrucureGroup">
<parameter key="StructureGroupID" value="'GROUP_1'@'HeilerStandard'" />
</dataSource>
 
<!-- ***** data source with multiple parameters -->
 
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.MasterArticlesClassifiedTo">
<parameter key="Catalog" value="1" />
<parameter key="Structure" value="HeilerStandard" />
</dataSource>
 
<!-- ***** data source with an editable parameter -->
 
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.MasterArticlesClassifiedTo">
<parameter key="Catalog" value="1" />
<parameter key="Catalog.editable" value="true" />
 <parameter key="Structure" value="HeilerStandard" />
</dataSource>

Saved searches

Within the rich client users can build search expressions and store them as saved searches for later use in either the rich or the web client. This type of data source enables access to such saved searches in flexible UIs.

Note that apart from catalog parameter nothing is supported. Parameter values for a saved search should be provided in Product 360 Desktop when it is created.

Field/sublement

Value

Description

type

savedSearch

ref

e.g. SearchName

Has to match the name of the saved search.

entity

e.g. Article

Has to match the "item-entity" attribute of the saved query.

Saved search data source example
<dataSource identifier="dataSet" type="savedSearch" ref="AllItemsEditedByMe" entity="Article" />

Saved search data source with catalog example

With reference to the above point, in the rich client users can also set catalog parameter inside flexible UIs for saved searches.

Field/sublement

Value

Description

key

catalogName

value

e.g. MASTER

Has to match the name of the catalog

Saved search data source example
<dataSource entity="Article" identifier="dataSet" ref="Query1" type="savedSearch">
<parameter key="catalogName" value="MASTER" />
</dataSource>

Components

A component displays some specific information within a flexible UI and may also offer some actions to work with the displayed data. Most components are defined using the component tag. In general the structure of a component definition is as follows.

Setting

Location

Description

type

attribute

Defines what type of component this is. The following chapters provide a list of all available component types.

identifier

attribute

Defines a unique name for the component in the scope of this flexible UI.

i18NKey

attribute

Provides the title for the component which will be displayed in its header.

layoutData

nested tag

Specifies any layout specific parameters for this component - see section on layout at the beginning of this page.

dataSource

nested tags

Specifies any data source parameters that are needed/supported by the component type. See section for specific component for details.

parameter

nested tags

Specifies any parameters that are needed/supported by the component type. See section for specific component for details.

i18N

nested tags

This label can be included in components to have localized translation for i18NKey in the Flex UI header.

There are a few exceptions to this:

  • The group component has its own tag and is not really a component in its own right. As described .Standard flex components v10.1#group it combines multiple components for layout purposes.
    Groups only have their own tag so no type attribute is needed. There is also no identifier, no header and no nested data sources. Layout data and nested parameters are supported.

  • The form component and the list component have specialized content defining in detail which Product 360 data fields are displayed.

Note that all following examples of component definitions omit the layoutData tag. See the .Standard flex components v10.1#layout on how to fine-tune the appearance of each component.

Translation By i18N:

Translation of header title for specific language and locale is done by i18N which is picked directly from XML. Translation takes place under certain conditions :

  • If there is no i18N label in component then the Existing functionality for Flex UI header will work.

  • If any i18N label is present in the component then the header string will be picked from the i18N label in the below manner for a Locale user is logged in

    • if there is the matching i18N label for locale(languageCode_countryCode), that will be picked

    • if the above not found, the matching i18N label with languageCode will be picked

    • if the above not found, the default i18N label value which is without locale will be picked

i18N example
<flexUi version="1.0.0">
<layout type="grid">
<parameter key="columns" value="5"/>
<parameter key="rows" value="9"/>
<group identifier="Detail">
...
<form i18NKey="Detail" identifier="preview">
...
<fieldFormDefinition position="2147483647" rootEntity="Article">
...
</fieldFormDefinition>
<i18n>Detail</i18n>
<i18n locale="en">Detail</i18n>
<i18n locale="en_US">Detail</i18n>
<i18n locale="de">Detail</i18n>
<i18n locale="ja_JP">詳細</i18n>
</form>
</group>
</layout>
</flexUi>

Dashboard components

Dashboards generally do not require any global data source in contrast to flexible task UI components which may rely on the data source implicitly defined by the task that is displayed. All dashboard components may also be used in task UI templates.
All components listed below support asynchronous loading on dashboards. Asynchronous loading is not supported in task UI templates.
For further technical limitations for the asynchronous loading feature, refer to sub chapter "Technical limitations" in the chapter "Asynchronous loading of custom dashboard components" of the customization manual.

Message box component

Displays a fixed message.

Type: messageBox

Parameter name

M(andatory)
O(ptional)

Example values

Description

message

M

The quick brown fox jumps over the lazy dog.

Specifies the text that will be displayed.

Message box example
<component type="messageBox" identifier="message1" i18NKey="Greetings">
<parameter key="message" value="Hello, world!"/>
</component>

System message component

Displays active system messages. If the user has appropriate permissions it also supports adding new system messages.

Type: systemMessage

System message example
<component type="systemMessage" identifier="system1" i18NKey="System messages">
</component>

iFrame component

Displays an external web page on the dashboard within a limited area occupied by the component. Note that no content will be displayed if the publisher of the external page does not allow it to be displayed in a frame.

Type: iframe

Parameter name

M(andatory)
O(ptional)

Example values

Description

url

M

https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3164.8565...14244

https://www.youtube.com/embed/UJW0VDJoAas

Specifies the URL for the web page that will be displayed.

iFrame example
<component type="iframe" identifier="googlemaps" i18NKey="Informatica Headquarters">
<parameter key="url" value="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d12659.780154317712!2d-122.19728541031158!3d37.509214421263046!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x808fa2f5dfdc5097%3A0xc479e59839708591!2sInformatica+Corporation!5e0!3m2!1sde!2sde!4v1427979234929" />
</component>

Bar chart component

Displays a horizontal bar chart that shows the distribution of values for a specified field in the specified set of data. The set is specified by an embedded data source. The field is specified using the Service API syntax for Product 360 fields and has to match the type of entity items that are provided by the data source (for instance it makes no sense to group the values of a product specific field when the underlying data is a set of articles).

Throughout the data set the occurrence of each value is counted and displayed as a bar with the bar label being the value and the bar length being in proportion to the number of occurrences of this value. For example if the field that is looked at is the "segment" and there are 255 articles in the data source that have "Consumer Electronics" as the value for the "segment field", then there will be a bar labelled "Consumer Electronics" and the size of the bar will reflect the number 255.

Regarding the bar sizes, the longest bar (i.e. largest occurrence count) will occupy the available space horizontally and the other bars will be drawn in proportion to it.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg By clicking on a bar the user can switch to a table view of the items that are represented by that bar.

Type: barchart

Data source name

M(andatory)
O(ptional)

Description

dataSet

M

Specifies the data set. The bar chart component supports combo boxes for editable data source parameters (see above).

Parameter name

M(andatory)
O(ptional)

Example values

Description

groupingField

M

Article.CurrentStatus

Product2GLang.Segment(de_DE)

Article.Status->QualityStatusSummary.Status(${Default})

ArticleLog.ModificationDate(&#x22;Web Shop&#x22;)

Specifies a Product 360 field in Service API syntax. The entity holding this field must match the entities provided by the dataSet data source.

If the path to the sub-entity holding the field requires qualifications they are provided in a comma separated list at the end of the field name. If any of the qualifications have default definitions in the repository then those can be used by providing the special string "${Default}" instead of an actual value for the qualification.

If a qualification value starts with a number or contains white spaces, the value has to be quoted with html-encoded double-quotes: &#x22;

groupingField.lkn.editable

O

true

false (default)

Specifies whether the nth (starting at 0) qualification of the field should be made available as a drop down box in the UI so the user can switch between e.g. the segment field in English or German on the fly. By default no combo boxes for qualifications are displayed.
images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that for this to work the respective Product 360 qualification field has to have an enumeration assigned to it.

numValueBuckets

O

10

5

For some fields it does not make sense to count the appearance of each individual value as there would be too many bars (e.g. item prices). For such fields the values can be split into buckets and all values in a bucket are counted together (e.g. all item prices between 50 and 100).

Currently this behavior is only available for all fields of type BigDecimal and Long. The buckets are defined by taking into account the minimum and maximum values of the data set. Furthermore the bucket boundaries are also aligned to a well readable raster e.g. 1, 2.5, 5, 7.5, 10, ... The granularity of the chosen raster depends on the distance between min and max and also on the number of buckets to create as specified by this parameter. The actual number of created buckets may be less than specified due to the imposed raster.

The lowest bucket always contains the minimum and the highest always contains the maximum value.

showBlankEntries

O

true (default)

false

Specifies whether there should also be bars of size zero for values that were not present in the data set but within the range of expected values. This of course only works if there is a set of expected values for the field specified as groupingField - which is the case if:

  • the field type is boolean (true, false)

  • the field type is tri-state booelan (true, false, unknown)

  • the field has an enumeration assigned to it in the Product 360 repository

  • the field type is BigDecimal or Long and numValueBuckets has been specified

  • the field includes the BPM workflow as one its qualifiers and it is marked in the Product 360 repository - as a result the possible status values of the respective workflow are then used as expected values

showNullValues

O

true (default)

false

Specifies whether the item count for items with missing/null values should be shown as a separate bar labelled "<No input>" or not.
Note that pointers to deleted data are also considered to be null values. For instance an article keeps record of the user that created it. If that user has been marked as deleted in the meantime, this field will be treated as missing/null.

barChartColor

O

red, blue, green, black

#000000 (black), #399bf9 (blue)

rbg(255, 0, 255) (magenta)

Default color is the theme-based color descriped in dashboard.css in style class:

.hpmw-horizontal-barchart-widget

Specifies the color of the bars. Valid values are either CSS standard color names like red, blue, green, black. The CSS standard colors are defined here: http://www.w3.org/TR/CSS21/syndata.html#value-def-color.

Or CSS-style rgb(x,y,z) values, where x,y,z must be values between 0 .. 255 .

Or hexcoded colors like #000000 for black or #399bf9 for blue can be used.

The longest bar will use this color directly and shorter bars will be drawn with a lighter color - the shorter the bar, the lighter the color.

isCacheable

O

truefalse (default)

Enables the data cache for this dashboard component. See chapter "Data caching for dashboard components" for details.

timeToLiveSeconds

O

3600 (default)

Specifies in seconds how long a cache element resides in the cache before it is destroyed and loaded from the data source anew.
Therefor the data cache has to be enabled for this component (isCacheable="true").

isRefreshable

O

truefalse (default)

Enables a button for this dashboard component which forces the reloading of the data from the data source (and thereby destroys the "old" cache element).
Therefor the data cache has to be enabled for this component (isCacheable="true").

sortBy

O

sortByKey (default)
sortByValue

Specifies which field (grouping field-sortByKey or grouping count- sortByValue) of the dashboard component to sort

sortOrder

O

asc (default)
desc

Specifies sorting order (Ascending or Descending) of "sortBy" parameter

Barchart examples
<!-- mandatory parameters only -->
<component type="barchart" identifier="chart1" i18NKey="Product Status in Master Catalog">
<parameter key="groupingField" value="Product2G.CurrentStatus"/>
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.product2g.core.ProductsOfCatalog"/>
</component>
 
<!-- show bars of size 0 for the status values that are not used in any product; enabled data cache and refresh button -->
<component type="barchart" identifier="chart1" i18NKey="Product Status in Master Catalog">
<parameter key="groupingField" value="Product2G.CurrentStatus"/>
<parameter key="showBlankEntries" value="true"/>
<parameter key="isCacheable" value="true"/>
<parameter key="timeToLiveSeconds" value="1800"/>
<parameter key="isRefreshable" value="true"/>
 <dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.product2g.core.ProductsOfCatalog"/>
</component>
 
<!-- qualified grouping field with editable qualification specifiying the language -->
<!-- show a bar with the count of all articles that do not have any short description in the given language -->
<component type="barchart" identifier="chart2" i18NKey="Article Short Desc in Master Catalog">
<parameter key="groupingField" value="ArticleLang.DescriptionShort(${Default})"/>
<parameter key="groupingField.lk0.editable" value="true" />
<parameter key="showNullValues" value="true"/>
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.ArticlesOfMasterCatalog"/>
</component>
 
<!-- report with an editable parameter and a different color for the bars -->
<component type="barchart" identifier="chart3" i18NKey="Articles by Segment in specified catalog (default: Apparel)">
<parameter key="groupingField" value="ArticleLang.Segment(${Default})"/>
<parameter key="barChartColor" value="rgb(34,45,78)"/>
<dataSource identifier="dataSet" type="reportByAlias" ref="byCatalog" entity="Article" >
<parameter key="catalog" value="Apparel"/>
 <parameter key="catalog.editable" value="true"/>
</dataSource>
</component>
 
<!-- display the distribution of article prices in buckets -->
<component type="barchart" identifier="chart3" i18NKey="Article Prices in Master Catalog">
<parameter key="groupingField" value="ArticlePriceValuePurchase.Amount(${Default},${Default},${Default},${Default},${Default},1.0)"/>
<parameter key="numValueBuckets" value="10"/> <!-- maximum number of buckets is 10 -->
<parameter key="showBlankEntries" value="true"/> <!-- show all buckets, even empty ones -->
<parameter key="showNullValues" value="true"/> <!-- show a bar with the articles that don't have a price set up -->
  <dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.ArticlesOfMasterCatalog"/>
</component>
 
<!-- Barchart component sorting -->
<component i18NKey="BarChart Sorting Demo" identifier="grouped_chart2" type="barchart">
<parameter key="groupingField" value="Article.CurrentStatus"/>
<parameter key="showBlankEntries" value="false"/>
<parameter key="sortBy" value="sortByValue"/> <!-- sort by grouping count -->
<parameter key="sortOrder" value="asc"/> <!-- sorting descending order -->
<dataSource entity="Article" identifier="dataSet" ref="byCatalog" type="reportByAlias">
<parameter key="catalog" value="Master"/>
</dataSource>
</component>

Piechart component

Displays a round pie chart that shows the distribution of values for a specified field in the specified set of data. The set is specified by an embedded data source. The semantics are very similar to the bar chart, just the presentation differs. Also, there are some additional options available as described below.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg As for the bar chart component, by clicking on a pie section the user can switch to a table view of the items that are represented by that section.

Type: piechart

Data source name

M(andatory)
O(ptional)

Description

dataSet

M

Specifies the data set. The bar chart component supports combo boxes for editable data source parameters (see above).

Parameter name

M(andatory)
O(ptional)

Example values

Description

groupingField

M

Article.CurrentStatus

Product2GLang.Segment(de_DE)

Article.Status->QualityStatusSummary.Status(${Default})

ArticleLog.ModificationDate(&#x22;Web Shop&#x22;)

Specifies a Product 360 field in Service API syntax. The entity holding this field must match the entities provided by the dataSet data source.

If the path to the sub-entity holding the field requires qualifications they are provided in a comma separated list at the end of the field name. If any of the qualifications have default definitions in the repository then those can be used by providing the special string "${Default}" instead of an actual value for the qualification.

If a qualification value starts with a number or contains white spaces, the value has to be quoted with html-encoded double-quotes: &#x22;

groupingField.lkn.editable

O

true

false (default)

Specifies whether the nth (starting at 0) qualification of the field should be made available as a drop down box in the UI so the user can switch between e.g. the segment field in English or German on the fly. By default no combo boxes for qualifications are displayed.
images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that for this to work the respective Product 360 qualification field has to have an enumeration assigned to it.

numValueBuckets

O

10

5

For some fields it does not make sense to count the appearance of each individual value as there would be too many sections (e.g. item prices). For such fields the values can be split into buckets and all values in a bucket are counted together (e.g. all item prices between 50 and 100).

Currently this behavior is only available for all fields of type BigDecimal and Long. The buckets are defined by taking into account the minimum and maximum values of the data set. Furthermore the bucket boundaries are also aligned to a well readable raster e.g. 1, 2.5, 5, 7.5, 10, ... The granularity of the chosen raster depends on the distance between min and max and also on the number of buckets to create as specified by this parameter. The actual number of created buckets may be less than specified due to the imposed raster.

The lowest bucket always contains the minimum and the highest always contains the maximum value.

maxNumberOfEntries

O

10 (default)

Space is limited and rendering a pie chart with too many sections breaks up the layout. Hence, the maximum number of sections is limited.

showLegend

O

true

false (default)

Toggles the visibility of a legend that lists all captions for each of the values.

showNullValues

O

true (default)

false

Specifies whether the item count for items with missing/null values should be shown as a separate bar labelled "<No input>" or not.
Note that pointers to deleted data are also considered to be null values. For instance an article keeps record of the user that created it. If that user has been marked as deleted in the meantime, this field will be treated as missing/null.

colors

O

red, blue, green, black

#000000 (black), #399bf9 (blue)

rbg(255, 0, 255) (magenta)

List of colors used for coloring the sections. Colors are separated by semicolon ";".

Valid values are either CSS standard color names like red, blue, green, black. The CSS standard colors are defined here: http://www.w3.org/TR/CSS21/syndata.html#value-def-color.

Or CSS-style rgb(x,y,z) values, where x,y,z must be values between 0 .. 255 .

Or hexcoded colors like #000000 for black or #399bf9 for blue can be used.

isCacheable

O

truefalse (default)

Enables the data cache for this dashboard component. See chapter "Data caching for dashboard components" for details.

timeToLiveSeconds

O

3600 (default)

Specifies in seconds how long a cache element resides in the cache before it is destroyed and loaded from the data source anew.
Therefor the data cache has to be enabled for this component (isCacheable="true").

isRefreshable

O

truefalse (default)

Enables a button for this dashboard component which forces the reloading of the data from the data source (and thereby destroys the "old" cache element).
Therefor the data cache has to be enabled for this component (isCacheable="true").

Piechart examples
<!-- mandatory parameters only -->
<component type="piechart" identifier="chart1" i18NKey="Product Status in Master Catalog">
<parameter key="groupingField" value="Product2G.CurrentStatus"/>
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.product2g.core.ProductsOfCatalog"/>
</component>
 
 
<!-- pie chart with legend and custom colors; enabled data cache and refresh button -->
<component i18NKey="Product Status in Master Catalog" identifier="pie1" type="piechart">
<parameter key="groupingField" value="Product2G.CurrentStatus"/>
<parameter key="showLegend" value="true"/>
<parameter key="colors" value="red;blue;green;pink"/>
<parameter key="isCacheable" value="true"/>
<parameter key="timeToLiveSeconds" value="1800"/>
<parameter key="isRefreshable" value="true"/>
<dataSource identifier="dataSet" ref="com.heiler.ppm.product2g.core.ProductsOfCatalog" type="reportById"/>
</component>

Channel status component

Displays the result of Data Quality checks for the entity items specified by the dataSet data source. On the left hand side a list of channels (defined by the channelIdentifiers parameter) is displayed alongside the aggregated quality status counts across all rules of the respective channel, i.e. how many entity items were in status OK, Failed, Unchecked. When a channel is selected then on the right hand side the list of quality rules from that channel is displayed with the rule specific status counts.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg The number of passed/failed/unchecked of a channel or of a rule can be selected by clicking on it. If the component is configured accordingly (see below) the user can then create a task for the selected set of items (e.g. all items that failed a certain rule).

Type: channelstatus

Data source name

M(andatory)
O(ptional)

Description

dataSet

M

Specifies the data set. The channelstatus component does not support editing of data source parameters.

Parameter name

M(andatory)
O(ptional)

Example values

Description

channelIdentifiers

M

Mobile,Print Catalog,Web Shop,Amazon

Comma separated list of Product 360 channels to display. Nonexistent channels are ignored.

enableCreateTask

O

true

false (default)

Specifies whether a button for creating a task is displayed whenever a category of items is selected from a channel or a rule. The task will have the respective set of items attached to it.

enableDrillDown

O

true

false (default)

Specifies whether a button for showing the selected items is displayed whenever a category of items is selected from a channel or a rule. The view will show the respective set of items in a table.

isCacheable

O

truefalse (default)

Enables the data cache for this dashboard component. See chapter "Data caching for dashboard components" for details.

timeToLiveSeconds

O

3600 (default)

Specifies in seconds how long a cache element resides in the cache before it is destroyed and loaded from the data source anew.
Therefor the data cache has to be enabled for this component (isCacheable="true").

isRefreshable

O

truefalse (default)

Enables a button for this dashboard component which forces the reloading of the data from the data source (and thereby destroys the "old" cache element).
Therefor the data cache has to be enabled for this component (isCacheable="true").

Channel status example
<!-- Only display status, no possibility to create tasks -->
<component type="channelstatus" identifier="dqstatus1" i18NKey="Channel Status Information">
<parameter key="channelIdentifiers" value="Mobile,Print Catalog,Web Shop"/>
<parameter key="enableCreateTask" value="true"/>
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.ArticlesOfMasterCatalog"/>
</component>
 
<!-- Display status and enable creating tasks; enabled data cache and refresh button -->
<component type="channelstatus" identifier="dqstatus2" i18NKey="Channel Status Information">
<parameter key="channelIdentifiers" value="Mobile,Print Catalog,Web Shop"/>
<parameter key="enableCreateTask" value="true"/>
<parameter key="isCacheable" value="true"/>
<parameter key="timeToLiveSeconds" value="1800"/>
<parameter key="isRefreshable" value="true"/>
<dataSource identifier="dataSet" type="reportById" ref="com.heiler.ppm.article.core.ArticlesOfMasterCatalog"/>
</component>

My tasks component

Displays information about tasks related to the current user. Three different sets of tasks can be selected:

  • Tasks assigned to the user and already accepted by the user

  • Tasks assigned to the user or one of his/her user groups that have not yet been accepted

  • Tasks assigned to other users or user groups for which the current user is the "responsible" person.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg The user can click on a task title which will either open the task UI of the task (if it is set), present the list of attached items of the task (if there are any) or just display the task details.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg When displaying the tasks that the user is responsible for he/she can click on the envelope next to the assignee's name to open the local email client and send an email regarding the task to the assignee The envelope is available if the assignee is a single user (not a group) and Product 360 has been set up with an email address for this user.

Type: mytasks

Parameter name

M(andatory)
O(ptional)

Example values

Description

initialSet

O

accepted (default)

notAcceptedmyResponsibilities

Specifies which set of tasks is initially displayed in the component. The value is case insensitive. Unknown values are ignored and the default is used instead.

mode

O

all (default)

workflow

allFixed

workflowFixed

Specifies in which mode the component should operate. There are two modes:

  • Displaying both normal and workflow tasks.

  • Displaying only workflow tasks and offering additional filtering capabilities

If set to "all" or "workflow" the mode specifies the initial mode and the user still has the possibility to change it in the UI.

If set to "allFixed" or "workflowFixed" the mode is set accordingly and the user cannot change it.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg If no BPM server is configured the default mode is allFixed and this will override any setting in the template.

filterByName

O

true
false (default)

If set to true a text field is added in the component header. If the user enters some text in this field the task list is filtered down to those tasks that include the text in their name.

MyTasks examples
<!-- all parameters are optional -->
<component type="mytasks" identifier="mytasks1" i18NKey="My Tasks" />
 
<component type="mytasks" identifier="mytasks2" i18NKey="My Tasks">
<parameter key="initialSet" value="notAccepted" />
<parameter key="mode" value="allFixed" />
<parameter key="filterByName" value="true" />
</component>

Team tasks component

Displays information about tasks related to members of the user's user groups. If the user has more than one user group assigned a combo box is displayed which can be used to filter the tasks so that only tasks for that group and its members are displayed.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg The user can click on a task title which will either open the task UI of the task (if it is set), present the list of attached items of the task (if there are any) or just display the task details.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg The user can click on the envelope next to the assignee's name to open the local email client and send an email regarding the task to the assigned. The envelope is available if the assignee is a single user (not a group) and Product 360 has been set up with an email address for this user.

Type: teamtasks

Parameter name

M(andatory)
O(ptional)

Example values

Description

mode

O

all (default)

workflow

allFixed

workflowFixed

Specifies in which mode the component should operate. There are two modes:

Displaying both normal and workflow tasks.

Displaying only workflow tasks and offering additional filtering capabilities

If set to "all" or "workflow" the mode specifies the initial mode and the user still has the possibility to change it in the UI.

If set to "all_fixed" or "workflow_fixed" the mode is set accordingly and the user cannot change it.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg If no BPM server is configured the default mode is allFixed and this will override any setting in the template.

includeGroups

O

group1, group2

Comma separated list of user groups that should be considered when adding tasks to the table. By default all user groups of the current user are considered.

The provided list is sanitized against the list of user groups of the current user. Unknown groups and groups that the user does not belong to are ignored.

excludeGroups

O

group1, group2

Comma separated list of user groups that should be ignored when adding tasks to the table. By default no user groups are ignored. If the includeGroups option is also present the excludeGroups are applied afterwards, i.e. if a group appears in both lists it will be ignored due to excludeGroups being applied at the end.

The provided list is sanitized against the list of user groups of the current user. Unknown groups and groups that the user does not belong to are ignored.

completedTasksDaysLimit

O

5 (default)

10

-1

Completed tasks are also shown but only if they have been completed in the last couple of days. The actual number of days can be defined with this parameter. The number should be greater or equal to -1 - with -1 meaning "do not display completed tasks".

filterByName

O

true
false (default)

If set to true a text field is added in the component header. If the user enters some text in this field the task list is filtered down to those tasks that include the text in their name.

userAssignedTasks

O

true (default)
false

Indicates whether tasks assigned to users of the user groups should also be listed or if only tasks directly assigned to the user groups are taken into consideration.

Team tasks examples
<!-- start in mode "all", show tasks for all user groups of the logged in user, include completed tasks of the last 5 days -->
<component type="teamtasks" identifier="teamtasks1" i18NKey="Team Tasks">
 
<!-- restrict mode and only include the groups specified here, do not show user assigned tasks, only user group assigned tasks -->
<component type="teamtasks" identifier="teamtasks2" i18NKey="Team Tasks">
<parameter key="groups" value="PriceMaintainers, SuperUsers" />
<parameter key="mode" value="allFixed" />
<parameter key="userAssignedTasks" value="false" />
</component>
 
<!-- only include all user groups of the logged in user that are not listed here, extend time window for completed tasks and add a filter by name field -->
<component type="teamtasks" identifier="teamtasks3" i18NKey="Team Tasks">
<parameter key="excludeGroups" value="DashboardAdmins" />
<parameter key="completedTasksDaysLimit" value="10" />
<parameter key="filterByName" value="true" />
</component>

Supplier Portal Timeline component

Displays an the Product 360 Supplier Portal timeline as widget. Can be used for supplier communication and to get an overview on recent supplier activities.

Type: timeline

Parameter name

M(andatory)
O(ptional)

Example values

Description

hsxWebappUrl

M

http://localhost:9090/hsx

Root url pointing to a running Supplier Portal application. If application runs behind a load balancer/reverse proxy, use externally visible url.

Technically this component uses an iFrame to display the Timeline.

Supplier portal timeline example
<component type="timeline" identifier="spTimeline" i18NKey="Supplier Portal Timeline">
<parameter key="hsxWebappUrl" value="http://portalserver:9090/hsx"/>
</component>

Workflow KPI component

Displays persisted KPI values that are the result a KPI calculation as described in the Knowledge Base documentation for the Standard KPI 'Average Time Spent In Workflow States'.

In order to show the calculated KPI values in the Web UI, the customer has to add a dashboard component of the type "workflowProcessKPI".
The component displays KPI values for certain parameters. The tool tip of the KPI value bar chart shows the corresponding object count.
Parameters which are selectable via Combobox are:

  • KPI Identifier of the desired Workflow Process KPI

  • Catalog filter (All or specific catalog)

  • Time period (see preSelectionCurrentTimePeriod parameter in table below for possible values)

  • Comparison time period dependent of the previously selected time period (see preSelectionPreviousTimePeriod parameter for possible values)

The WorkflowProcessCalculationConfig.xml configuration file mentioned in the Knowledge Base documentation for Standard KPI 'Average Time Spent In Workflow States' also has to be configured furthermore to show the KPI values in the Web UI:

  • Each kpi element must have a sub element displayName with a particular display name in order to be clearly recognizable in the UI by the customer.

  • The state element can have a sub element 'allowedValue' which helps the customer to compare the calculated KPI Values with the corresponding allowed value. This allowed value provides useful information to interpret the calculated KPI values and to identify possible problems within the workflow.

There are several component parameters to define the pre-selection value of the combo box parameters.

Parameter name

M(andatory)
O(ptional)

Example values

Description

preSelectionKPI

O

Specifies the preselected value of Workflow Process KPI combobox. Valid values are the KPI identifier or its displayName which is defined in the above mentioned configuration xml file.

preSelectionCatalog

O

MASTER

MySupplierCatalogIdentifier

Specifies the preselected value of catalog combobox. Valid values are the catalog identifier of a supplier catalog, or "MASTER" for master catalog.

preSelectionCurrentTimePeriod

O

CurrentDay

Specifies the preselected value of current time period combobox. Valid values are the following identifiers or its language specified display name:

identifier

display name (in english)

CurrentDay

Current day

CurrentWeek

Current month

CurrentMonth

Current week

CurrentYear

Current year

The language dependent display name should only be used, if all users login with the same language, since preselection then only works with this specific language. Therefor the identifier is recommended to be used.

preSelectionPreviousTimePeriod

O

PreviousDay

Specifies the preselected value of previous time period combobox. Valid values are a PreviousTimePeriod identifier or its language specified displayName.

identifier

display name (in english)

NoComparisonPeriod

No comparison period

PreviousDay

Previous day

PreviousWeek

Previous week

SameWeekOfPreviousYear

Same week of previous year

PreviousMonth

Previous month

SameMonthOfPreviousYear

Same month of previous year

PreviousYear

Previous year

The language dependent display name should only be used, if all users login with the same language, since preselection then only works with this specific language. Therefor the identifier is recommended to be used.

allowedTimeBarChartColor

O

red, blue, green, black

#000000 (black), #399bf9(blue)

rbg(255, 0, 255)(magenta)

Specifies the color of the allowed time bar chart. Valid values are either CSS standard color names like red, blue, green, black. The CSS standard colors are defined here: http://www.w3.org/TR/CSS21/syndata.html#value-def-color.

Or CSS-style rgb(x,y,z) values, where x,y,z must be values between 0 .. 255 .

Or hexcoded colors like #000000 for black or #399bf9 for blue can be used.

If no value is defined, the default color #6AA84F will be used.

currentTimeBarChartColor

O

red, blue, green, black

#000000 (black), #399bf9(blue)

rbg(255, 0, 255)(magenta)

Specifies the color of the current average completion time bar chart. Valid values are either CSS standard color names like red, blue, green, black. The CSS standard colors are defined here: http://www.w3.org/TR/CSS21/syndata.html#value-def-color.

Or CSS-style rgb(x,y,z) values, where x,y,z must be values between 0 .. 255 .

Or hexcoded colors like #000000 for black or #399bf9 for blue can be used.

If no value is defined, the default color #1155CC will be used.

previousTimeBarChartColor

O

red, blue, green, black

#000000 (black), #399bf9(blue)

rbg(255, 0, 255)(magenta)

Specifies the color of the previous average completion time bar chart. Valid values are either CSS standard color names like red, blue, green, black. The CSS standard colors are defined here: http://www.w3.org/TR/CSS21/syndata.html#value-def-color.

Or CSS-style rgb(x,y,z) values, where x,y,z must be values between 0 .. 255 .

Or hexcoded colors like #000000 for black or #399bf9 for blue can be used.

If no value is defined, the default color #00FFFF will be used.


Example dashboard template

Example dashboard template
<flexUi name="Default" version="1.0.0" >
<layout type="grid">
<!-- Specify default parameters of the grid, like number of columns and rows -->
<parameter key="columns" value="2"/>
<parameter key="rows" value="2"/>
<parameter key="rowHeight" value="350px"/>
<parameter key="spacingSize" value="20px"/>
<!-- Display a workflowProcessKPI component -->
<component type="workflowProcessKPI" identifier="WorkflowProceesKPI1" >
<parameter key="preSelectionKPI" value="kpi 2"/>
<parameter key="preSelectionCatalog" value="All catalogs"/>
<parameter key="preSelectionCurrentTimePeriod" value="Current year"/>
<parameter key="preSelectionPreviousTimePeriod" value="Previous year"/>
<parameter key="allowedTimeBarChartColor" value="green"/>
<parameter key="currentTimeBarChartColor" value="blue"/>
<parameter key="previousTimeBarChartColor" value="yellow"/>
</component>
</layout>
</flexUi>

Flexible task UI components

Data provisioning in task UIs

In contrast to dashboard components the data provisioning of task UI components is driven by the task to which the task UI template is applied. Three different aspects play a role here:

  • Is the component simply displaying data for a "certain item" or is it displaying a table or list of "child items of a certain item" ?

    • General components and forms display data for a certain item

    • List/table components display child items of a certain item

      The definition of child items is rather broad in this context:

    • A task usually has a set of items attached to it - in this context for example some "Article" items can be the children of a "Task" item.

    • A product may have variant children or article children (depending on the product paradigm in use) underneath.

    • A structure group may have a mixture of product, variant and article children assigned to it which maps to three distinct sets of child items.

  • What entity does the "certain item" need to belong to in order to be suitable as input for a component ?

    • General components specify the applicable entity via the attribute rootEntity in the component tag. Leaving this out means the component can handle any entity.

    • Form components specify the applicable entity through the rootEntity attribute of the nested fieldFormDefinition (see below for details).

    • List/table components specify the entity of the child items through the rootEntity attribute of the nested listModelDefinition (see below for details).
      Whether or not a "certain item" is suitable as input for the component depends on whether it can provide child items matching this entity.
      For example a task item can be fed into a component displaying an article list only if the task has a set of child items with entity "Article".

  • How is the "certain item" specified for a component ?

    • Statically through a parameter of the component in the XML
      (e.g. a component displaying the structure groups of a structure system, with the actual structure system defined in the XML)

    • At runtime through the task for which the task UI is displayed
      (e.g. a form displaying fields of the task)

    • Dynamically through selections in other components
      (e.g. a form with details for an article listening to selection events in an article list)

So how does this all play together ?

  1. Each component gets initialized with its parameters. If this is all that a specific component needs, it's done
    (e.g. a structure tree component with structure system as parameter)

  2. Next the central task item that is currently displayed is forwarded to all components that indicate that they can handle it.

    1. all components with rootEntity = Task

    2. list based components with a rootEntity for which the task can provide a list of matching child items

  3. Whenever a user selects one or more items in a list based component the selected item(s) is/are forwarded to all components that can handle the respective entity

    1. all components with rootEntity set to the entity of the selected item

    2. list based components with rootEntity for the selected item can provide a list of matching child items
      (e.g. a list components displaying variants can be fed with a product item because the product can have variant child items)

Here is an example illustrating the data provisioning within a task UI. Details are omitted and the featured component types are fully documented further below.

Task UI data provisioning
<flexUi version="1.0.0">
<layout type="grid">
...
 
<!-- This form will receive the currently displayed task as input -->
<form identifier="taskForm" i18NKey="Task: ">
<fieldFormDefinition rootEntity="Task">
...
</fieldFormDefinition>
</form>
 
<!-- List also receives the id of the task as it has listenFor Task inside it -->
<!-- and displays the attached items of the task. -->
<!-- The rootEntity attribute specifies what kind of items this table can display. -->
<!-- User selecting an article in the table will trigger a selection event -->
 <list i18NKey="Items">
<listenFor source="Task" type="initialEvent" />
<listModelDefinition rootEntity="Article">
...
</listModelDefinition>
</list>
 
<!-- This component will be updated with the selection events for Article -->
<component identifier="preview1" type="preview" i18NKey="Detail" rootEntity="Article">
...
</component>
 
<!-- This form will also be updated with the selection events for Article -->
<form identifier="translationForm" i18NKey="Translate">
<fieldFormDefinition rootEntity="Article">
...
</fieldFormDefinition>
</form>
 
...
</layout>
</flexUi>

Filtering

While the rules described so far cover most cases, it can be necessary to restrict the selection events that a component listens for. This can be achieved with the listenFor tag. Filtering can be set up regarding the source of events (component identifier) and/or the type of event. For now only one type of event (selectionEvent) is supported.

Multiple filters can be set up for a single component, so it is still possible to listen for selections in more than one source component.

Event filtering example
<!-- table showing the products attached to the task -->
<list identifier="TaskProducts" i18NKey="Products">
<listenFor source="Task" type="initialEvent" />
<listModelDefinition rootEntity="Product2G">
...
</listModelDefinition>
</list>
 
<!-- this preview is tied to the table above -->
<component identifier="productPreview" type="preview" i18NKey="Detail (Product)" rootEntity="Product2G">
<listenFor source="TaskProducts" type="selectionEvent" />
...
</component>
 
 
<!-- displaying a structure tree based on configuration parameter -->
<component identifier="structure" type="structureTree" i18NKey="My structure" >
...
<parameter key="structure" value="MyStructure" />
</component>
 
<!-- the selected structure can be used to derive a set of product child items ! -->
<list identifier="StructureProducts" pageSize="20" i18NKey="Classified in Structure">
<listenFor source="structure" type="selectionEvent"/>
<listModelDefinition rootEntity="Product2G">
...
</listModelDefinition>
</list>
 
<!-- this preview is tied to the list above, ignores selections in TaskProducts table -->
<component identifier="productPreviewFromStructure" type="preview" i18NKey="Detail (Product)" rootEntity="Product2G">
<listenFor source="StructureProducts" type="selectionEvent" />
...
</component>

Header strategy

It is possible to change component header via the headerStrategy tag. By this header implementation may be changed and additional information or controls displayed. For the moment the following values are possible:

  • "defaultHeader",

  • "defaultEntityHeader"

  • "taskActionsHeader".

defaultHeader

The "defaultHeader" is used in all components not related to entity information (e. g. message component of iframe component) and information from components i18NKey attribute.Translation of header title for specific language and locale is done by i18N .

defaultEntityHeader

The "defaultEntityHeader" is used in components which shows information from given entity (form, table, etc.) and provides entity name information in header.

taskActionsHeader

The "taskActionsHeader" is currently used for:

  • Standard tasks (non-workflow tasks):
    In case of unaccepted standard tasks, the header adds a toggle button for accepting the current task in the form that displays the task details.
    In case of accepted standard tasks, the header adds a toggle button for marking the current task as completed.

  • Workflow tasks:
    In case of unaccepted workflow tasks, the header adds a buttons for accepting or directly finishing the work the selected entities(items, products or variants) in the entity table that displays the attached entities of the workflow task.
    In case of accepted workflow tasks, the header adds a buttons for finishing or cancelling the work on the selected entities in the entity table that displays the attached items of the workflow task.
    In case of accepted "approval workflow tasks" , the header adds buttons for approving, rejecting (with comment) or cancelling the work on the selected entities in the entity table that displays the attached items of the workflow task.
    In order to have convenient way to toggle between unaccepted workflow tasks and accepted workflow tasks, we have provided navigation buttons. The navigation buttons are available only if the tasks are associated with the current logged in user or the tasks are associated with user groups where the current user is a part of.

The current "taskActionsHeader" implementation does not add a toggle button for terminating the current workflow for entities of a workflow task. Furthermore, a click on the buttons for accepting, finishing and approving does not open a dialog for entering comments.

Mass-edit header

massEditHeader is used as a form header that listens for selection events in an item list component. It allows to edit any entity field specified in the header parameters. If there are several items selected, the header will update field values for all of them.
The header looks as the default header with an additional field editor at the right.

Note following:

  • Only one field can be set as editable in the header. For example, it is not possible to have Status and Short Description fields in the header simultaneously.

  • The header works only for a component that listens for selection events with listenFor tag

  • The field to edit is specified through the header parameters

  • If all the selected items have the same field value, the mass-edit field shows the value. If not, the mass-edit field is empty

  • If just one item is selected, the mass-edit field shows its field value

  • If user changes the value in the mass-edit field, the value is applied immediately to the selected items

Configuration

A mass-edit field is configured in the flex template XML as following:

Mass-edit field configuration in the template XML
<header headerStrategy="massEditHeader">
<parameter key="fieldIdentifier" value="Article.CurrentStatus" />
<parameter key="fieldCaption" value="Set Status" />
</header>

The example has two parameters:

  • Mandatory fieldIdentifier parameter

  • Optional fieldCaption parameter. Field caption could be a i18n key if it starts with % symbol.

If the specified field cannot be determined because of a configuration error, the default header strategy is used and the configuration errors are logged.

Mass-edit field with logical keys

Let's consider a more complex example:

Configuration of a mass-edit field with logical keys
<header headerStrategy="massEditHeader">
<parameter key="fieldIdentifier" value="Product2GPriceValueSales.Amount" />
<parameter key="logicalKeyIdentifier1" value="ArticlePriceType.LK.PartyMS" />
<parameter key="logicalKeyValue1" value="&lt;Public&gt;" />
<parameter key="logicalKeyIdentifier2" value="ArticlePriceType.LK.Territory" />
<parameter key="logicalKeyValue2" value="USA" />
<parameter key="logicalKeyIdentifier3" value="ArticlePriceType.LK.ValidAt" />
<parameter key="logicalKeyValue3" value="now" />
<parameter key="logicalKeyIdentifier4" value="ArticlePriceValueType.LK.LowerBound" />
<parameter key="logicalKeyValue4" value="1" />
<parameter key="logicalKeyIdentifier5" value="ArticlePriceType.LK.Type" />
<parameter key="logicalKeyValue5" value="3" />
<parameter key="logicalKeyIdentifier6" value="ArticlePriceType.LK.Currency" />
<parameter key="logicalKeyValue6" value="USD" />
</header>

Two parameters are necessary to specify a logical key: logicalKeyIdentifierXXX and logicalKeyValueXXX where XXX is some suffix (it could be empty) that should be the same for both parameters. This approach allows specifying any number of logical keys.

If the field has no all required logical keys defined, no field fill be shown (the default header will be used) and all the detected errors will be written in the server log.

Task UI specific syntax summary

Task UI components deviate from the standard component syntax as follows:

  • Several components have their own tags: form, list, mediaDetail - see the respective section for details.

  • Specification of the applicable entity via the rootEntity attribute of the component tag or a nested tag in case of form, list .

  • Filtering of events via the nested listenFor tag.

  • Specification of the applicable for initialization entity for list tag via the nested listenFor tag.

  • Activation of task actions via the nested headerStrategy tag.

Form

Displays a set of fields for a single item in a form. Due to its rather specific content it has its own tag.

Tag: form

Setting

Location

Description

fieldFormDefinition

Nested tag

For the actual form definition the syntax is the same as for defining detail tabs in the Product 360 web application as described in "Customizing Lists Views, Detail Tabs and Action Menus".

Note that the fieldFormDefinition tag used in this component corresponds to the definition tag used in detail tab XML files.

rootEntity

Attribute of
fieldFormDefinition

Specifies what kind of items this component can display.

i18N

Nested tag

contains translation of i18NKey for different languages and locales

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that in this context the other attributes of the fieldFormDefinition tag are not applicable and should not be used (e.g. permissionId, position, id, i18NKey)

Parameter name

M(andatory)
O(ptional)

Example values

Description

inlineLabels

O

true (default)

false

Should field label be in one line with value or above it.

enableRefreshButton

O

true

false (default)

Specifies whether the component has a manual refresh button in the header.

Form example
<form identifier="taskForm" i18NKey="Task: ">
<parameter key="enableRefreshButton" value="true"/>
<parameter key="inlineLabels" value="true"/>
<header headerStrategy="taskActionsHeader" />
<fieldFormDefinition rootEntity="Task">
<column>
<fieldGroup>
<field identifier="Task.Name" />
<field identifier="Task.Description" />
<field identifier="Task.CreationUser" />
<field identifier="Task.CreationDate" />
</fieldGroup>
</column>
<column>
<fieldGroup>
<field identifier="Task.User" />
<field identifier="Task.UserGroup" />
<field identifier="Task.Substitute" />
<field identifier="Task.Responsible" />
</fieldGroup>
</column>
</fieldFormDefinition>
<i18n>task</i18n>
<i18n locale="de">Aufgabe</i18n>
<i18n locale="ja_JP">仕事</i18n>
</form>

List

Displays a set of items in a table. Due to its rather specific content it has its own tag.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg Selections within the table are forwarded to matching components.

Tag: list

Setting

Location

Description

listModelDefinition

Nested tag

For the definition of fields that are displayed in the table the syntax is the same as for defining list models in the Product 360 web application as described in "Customizing Lists Views, Detail Tabs and Action Menus".

Note that the listModelDefinition tag used in this component corresponds to the definition tag used in list model XML files.

rootEntity

Attribute of
listModelDefinition

Specifies what kind of items this component can display. It will accept an item (e.g. through selection events) only if a list of child items can derived from it with this entity.

identifier

Attribute of
listModelDefinition

Defines a unique name for the listModelDefinition in the scope of this list component.

pageSize

Attribute of list tag

Specifies page size of underlying table. It defines amount of rows loaded from server each time during scrolling. Default is 20.

i18N

Nested tag

contains translation of i18NKey for different languages and locales

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that if identifier is not provided in listModelDefinition then flexUI table layout (column orders, sorting, width, visibility) will not be stored in browser cookie

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that in this context the other attributes of the listModelDefinition tag are not applicable and should not be used (i18NKey)

Parameter name

M(andatory)
O(ptional)

Example values

Description

forceShowContentFromMaster

O

true

false (default)

For the case when data source for list is structure group, information about catalog can be obtained from task context (default behaviour) or master catalog can be used forcibly.

enableRefreshButton

O

true

false (default)

Specifies whether the component has a manual refresh button in the header.

List example
<list identifier="StructureProducts" pageSize="20" i18NKey="Classified in Structure">
<listModelDefinition rootEntity="Product2G" identifier="ProductListModel">
<field caption="%web.client.product.table.thumbnail" identifier="Product2GMediaAssetDocument.ImageIdentifier" sortable="true" width="50">
<logicalKey identifier="ArticleMediaAssetDocumentType.LK.Language" value="English" />
<logicalKey identifier="ArticleMediaAssetDocumentType.LK.Quality" value="Internet image" />
</field>
<field identifier="Product2G.ProductNo" sortable="true" />
<field identifier="Product2GLang.DescriptionShort" sortable="true">
<logicalKey identifier="ArticleLangType.LK.Language" value="English" />
</field>
</listModelDefinition>
<i18n>Classified in Structure</i18n>
<i18n locale="de">Klassifiziert in Struktur</i18n>
<i18n locale="ja_JP">構造で分類される</i18n>
</list>

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that if list have to be populated by task content instead of listening selection events listenFor tag should be used:

Task content list example
<list identifier="TaskProducts" i18NKey="Products" pageSize="20">
<listenFor source="Task" type="initialEvent" />
<parameter key="enableRefreshButton" value="true"/>
<listModelDefinition rootEntity="Product2G" identifier="TaskListModel">
<field identifier="Product2G.ProductNo" sortable="true" />
<field identifier="Product2G.CurrentStatus" sortable="true" width="180" />
<field identifier="Product2GLang.DescriptionShort" sortable="true">
<logicalKey identifier="ArticleLangType.LK.Language" value="English" />
</field>
</listModelDefinition>
<i18n>Products</i18n>
<i18n locale="de">Produkte</i18n>
<i18n locale="ja_JP">製品</i18n>
</list>

Preview

Displays a preview template.

Type: preview

Parameter name

M(andatory)
O(ptional)

Example values

Description

previewTemplate

M

WebShopPreview

The name of the preview template to display.

enableAutoRefresh

O

true

false (default)

Specifies whether the component is refreshed on edit events.

enableRefreshButton

O

true

false (default)

Specifies whether the component has a manual refresh button in the header.

Preview example
<component type="preview" identifier="preview" i18NKey="Detail (Product)" rootEntity="Product2G">
<parameter key="enableRefreshButton" value="true"/>
<parameter key="enableAutoRefresh" value="true"/>
<parameter key="previewTemplate" value="Product - Web, Flexible UI, Translation"/>
</component>

Audit Trail History

Displays a audittrail-based history component.

Type: history

Parameter name

M(andatory)
O(ptional)

Example values

Description

enableAutoRefresh

O

true

false (default)

Specifies whether the component is refreshed on edit events.

enableRefreshButton

O

true

false (default)

Specifies whether the component has a manual refresh button in the header.

filterUsers

O

Administrator;rest;someUserName

Specifies which user changes should be filtered by default

filterFields

O

Article.EAN;ArticleLang.DescriptionLong(${Empty})

Specifies which field changes should be filtered by default

filterDate

O

2020-10-07T11:59

Specifies up to which date the changes should be displayed to by default.

History example
<component type="history" identifier="history" i18NKey="Detail (Product)" rootEntity="Product2G">
<parameter key="enableRefreshButton" value="true"/>
<parameter key="enableAutoRefresh" value="true"/>
<parameter key="filterUsers" value="Administrator;rest;someUserName"/>
<parameter key="filterFields" value="Article.EAN;ArticleLang.DescriptionLong(${Empty})"/>
<parameter key="filterDate" value="2020-10-07T11:59"/>
</component>

Structure tree

Displays the structure tree with the structure groups of the specified structure system.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/lightbulb_on.svg Selections in the tree are forwarded to matching components.

Type: structureTree

Parameter name

M(andatory)
O(ptional)

Example values

Description

structureSystem

M

HeilerStandard

External identifier for the structure system that will be displayed.

Structure tree example
<component identifier="structure" type="structureTree" i18NKey="Structure" >
<parameter key="structureSystem" value="HeilerStandard" />
</component>

Media Document Details

Displays information about selected media document (event forwarded from another component) in one or more detail tabs defined by a set of nested form definitions.
The form definitions are specified in definition tags within a formDefinitions tag, each definition represents one section.

Tag: mediaDetail

Parameter name

M(andatory)
O(ptional)

Example values

Description

embeddedMetaDataTabVisible

O

true (default)

false

Defines whether the embedded metadata tab is shown for the HMM provider.

embeddedMetadataTabPosition

O

30 (default)

Defines the position of the embedded metadata tab for the HMM provider.

i18N

O

contains translation of i18NKey for different languages and locales

Media document details examples
<mediaDetail identifier="mediaDocumentDetailsId" i18NKey="Details">
<parameter key="embeddedMetaDataTabVisible" value="true" />
<parameter key="embeddedMetadataTabPosition" value="30" />
<formDefinitions>
<definition i18NKey="%web.multimedia.detail.tab.technical.information" rootEntity="MediaAsset">
<column>
<fieldGroup displaySectionWidget="false" subEntityId="MediaAssetDocumentAttributes">
<field identifier="MediaAssetDocumentAttributes.FilenameHMM" readOnly="true"/>
<field identifier="MediaAssetDocumentAttributes.TypeHMM" readOnly="true"/>
<field identifier="MediaAssetDocumentAttributes.ColorDepthHMM" readOnly="true"/>
<field identifier="MediaAssetDocumentAttributes.ColorSpaceHMM" readOnly="true"/>
</fieldGroup>
</column>
</definition>
<definition i18NKey="%web.multimedia.detail.tab.general.information" rootEntity="MediaAssetFile">
<column>
<fieldGroup displaySectionWidget="true" subEntityId="MediaAssetFileAttributeLang">
<field identifier="MediaAssetFileAttributeLang.Name"/>
<field identifier="MediaAssetFileAttributeLang.Memo"/>
<logicalKey identifier="MediaAssetFileAttributeLangType.LK.Language" selectable="true" value="English"/>
</fieldGroup>
<fieldGroup displaySectionWidget="false" subEntityId="MediaAssetFileAttribute">
<field identifier="MediaAssetFileAttribute.Level"/>
<field identifier="MediaAssetFileAttribute.State"/>
<field identifier="MediaAssetFileAttribute.Status"/>
<field identifier="MediaAssetFileAttribute.InProgress"/>
</fieldGroup>
</column>
</definition>
</formDefinitions>
<i18n>Detail (Product)</i18n>
<i18n locale="de">Detail (Produkt)</i18n>
<i18n locale="ja_JP">詳細(製品)</i18n>
</mediaDetail>

Media documents list

Displays list of media documents in the selected category. Has ability to filter documents. Reacts on category selection events from other components to determine the list of media documents to show.

Selections in the list are forwarded to any components that can handle a media document selection.

Type: documentsList

Parameter name

M(andatory)
O(ptional)

Example values

Description

dragEnabled

O

true (default)

false

Defines whether the drag from list operation enabled.

selectionMode

O

none

single (default)

multiple

Defines if the user can select (one or more) media documents.

enableRefreshButton

O

true

false (default)

Specifies whether the component has a manual refresh button in the header.

Media documents examples
<component identifier="documentsListId" type="documentsList" i18NKey="Images" >
<parameter key="enableRefreshButton" value="true"/>
<parameter key="selectionMode" value="single" />
</component>

Media categories tree

Displays tree of media categories for a specified root category. Selecting a category is forwarded to any components that can handle a category selection.

Type: multimediaTree

Parameter name

M(andatory)
O(ptional)

Example values

Description

category

O

hlr-system

Root category name which children to display. By default shows all.

Media tree examples
<component identifier="multimediaTreeId" type="multimediaTree" i18NKey="Multimedia attachments" >
</component>

Dynamic Web page

Displays an external web page with a URL that can contain a parameter. For task attached articles/variants/products this is useful to preview it e.g. in a live web shop using its identifier.

Without using parameter valueField, this component can be used to simply display an external web page.

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Note that no content will be displayed if the publisher of the external page does not allow it to be displayed in a frame.

Type: dynamicWebPage

Parameter name

M(andatory)
O(ptional)

Example values

Description

urlPattern

M

http://yourshop.com/display?itemid={0}

URL that will be used. {0} is the placeholder.

valueField

O

Product2G.Id

The value of this Product 360 Field will be used to replace the placeholder. See the groupingField parameter of the bar chart component for examples regarding logical key qualification of this field.

If not set, placeholder will not be used, and external web page won't be refreshed on selection change.

enableRefreshButton

O

true

false (default)

Specifies whether the component has a manual refresh button in the header.

Dynamic web page example
<component type="dynamicWebPage" identifier="websearch" i18NKey="Search results for short description" rootEntity="Product2G">
<parameter key="enableRefreshButton" value="true"/>
<parameter key="urlPattern" value="http://www.searchsite.com/search?q={0}"/>
<parameter key="valueField" value="Product2GLang.DescriptionShort(de)"/>
</component>

Characteristic values form

Displays a form to maintain characteristic values of products/variants/items selected in a list. This is a great way to have a full page form based data entry flow on items with categories assigned and their characteristics inside.

Type: characteristicrecordset

Parameter name

M(andatory)
O(ptional)

Example values

Description

filterCategories

O

<filterCategories>Shipping</filterCategories>

<filterCategories>CareInstructions,AuditReport</filterCategories>

Characteristics will be filtered based on category Code. Multiple category Code can be supplied by comma separating.

filterType

O

<filterType>include</filterType>

<filterType>exclude</filterType>

Type of filter to be applied on the supplied category codes.

enableRefreshButton

O

true

false (default)

Specifies whether the component has a manual refresh button in the header.

Characteristic values form example
<component i18NKey="Characteristics" identifier="characteristicsDetails" rootEntity="Article" type="characteristicrecordset">
<listenFor source="TaskItems" type="selectionEvent"/>
<parameter key="enableRefreshButton" value="true"/>
<header headerStrategy="characteristicsHeader"/>
</component>

The component allows to also include a filter that will define which individual categories of characteristics should be shown in it. This helps to create UIs that are tailored to individual use cases and user persona needs. Therefore the following optional elements have been added:

<filterCategories>{category_code}</filterCategories> and <filterType>{include_or_exclude}</filterType>. These element tags have root tag <component> and should be defined after the <header> tag as shown in the following code block example where the component would only show the category "Shipping" for example.

Category Filter
<component i18NKey="Characteristics" identifier="characteristicsDetails" rootEntity="Article" type="characteristicrecordset">
<layoutData>
<parameter key="collapsible" value="true"/>
<parameter key="collapsed" value="false"/>
<parameter key="sizeRatio" value="3"/>
</layoutData>
<listenFor source="TaskItems" type="selectionEvent"/>
<parameter key="enableRefreshButton" value="true"/>
<header headerStrategy="characteristicsHeader"/>
<filterCategories>Shipping</filterCategories>
<filterType>include</filterType>
</component>

Filter Behavior

filterCategories

filterType

Categories displayed

tag present - comma separated values

tag present

Categories mentioned (include or exclude)

tag present - comma separated values

tag not present

Categories mentioned (include)

tag present - empty value

tag present - empty value

All Categories

tag present - incorrect or empty value

tag present or not present

All Categories

tag not present

tag not present

All Categories

tag not present

tag present

All Categories

tag present or not present

tag present - incorrect or empty value

All Categories

images/s/o7yjop/8703/51k4y0/_/images/icons/emoticons/warning.svg Invalid filterCategories or filterType will lead to a log entry.

NOTE

  • The copy action on the top right corner of the component will filter down to the categories visible (and not all categories assigned to the item).

Compare View

Displays a comparison view which shows the selected object in one column, and the compare objects/revisions in other columns

images/plugins/servlet/confluence/placeholder/unknown-attachment.png

Type: compare

Parameter name

M(andatory)
O(ptional)

Example values

Description

i18NKey

M

"Compare with"

%compareView.name

The name of the compare view. With a leading % it's the key of the name in the i18n properties file

mode

M

EACH_OTHER,
REVISION,
MASTER_ITEM,
SUPPLIER_ITEM,
MERGE_PREVIEW

To compare two or more different items/products/variants with each other

To compare a single item with all it's revisions

To compare a supplier catalog item, with it's corresponding master catalog item

To compare a master catalog item with it's corresponding supplier catalog items (might be multiple!)

To compare the supplier catalog item, with the master catalog item as it would look like after the merge

rootEntity

M

Article,

Product2G,

Variant

The root entity of the objects which should be compared (make sure that the entity of the task UI matches!)

enableRefreshButton

O

true

false (default)

Specifies whether the component has a manual refresh button in the header.

Example

The following xml example code must be added within the <layout> of the Task UI configuration:

<component i18NKey="Compare with Master" identifier="compareWithEachOther" rootEntity="Article" type="compare">
<listenFor source="TaskItems" type="selectionEvent"/>
<parameter key="enableRefreshButton" value="true"/>
<parameter key="mode" value="EACH_OTHER"/>
<header headerStrategy="compareHeader"/>
</component>

Drag & Drop

Some components used in Task UIs support drag and drop. For now this includes the classification and media attachment use cases. In the classification scenario the user can drag a single or multiple items from the items list and drop them on structure tree node similarly as in the existing structure context of the web client. For multimedia assignment the media document can be dragged from media documents list component and dropped on a row in task item list. If the target item is part of a current multi-selection in that list then the whole selection acts as drop target and the media document will be attached to all selected items.