Inheritance in the Product Hierarchy
Inheritance in STEP is the concept that when the value of an attribute is defined in a parent product, all the child products that exist under the parent product can inherit the value - meaning that the value is present on the child, as well as the parent. If the attribute is also valid on the child (in addition to the parent), then the value can be locally edited on the child (e.g., a different value supplied so the child no longer inherits the value from the parent). Note that value inheritance also applies to references, meaning that if a reference is populated on a parent, it is also available on the child in the same way as an attribute value. However, references must be explicitly configured for inheritance to be in place, while attribute values will automatically inherit to child products.
In addition to value inheritance, attribute inheritance is also available in the product hierarchy. This means that attributes can be linked to specific nodes / categories so they only appear for those categories and their children. For example, consider a company that manages data for both batteries and clothing. Size might be applicable to both categories of objects since both batteries and apparel have sizes assigned. However, sleeve length and voltage are characteristics applicable for clothing and batteries, respectively, and it could be confusing to have a 'Voltage' attribute on a clothing item. To avoid this, the 'Voltage' attribute could be linked to the 'Batteries' category, while the 'Sleeve Length' attribute could be linked to an 'Upper Body Apparel' category.
Inheritance perpetuates throughout the hierarchy, no matter how many levels are present (e.g., inherited attributes and values appear on children, grandchildren, etc.). When attributes are considered applicable to all products, regardless of category, they are called 'global attributes'. For example, attributes such as Price, Description, and Manufacturer Name. Thus, these attributes are linked to the top level in the product hierarchy and are inherited down to all products beneath, no matter how many levels there are.
Attribute inheritance only means that the attributes are available for all of the products beneath where they are linked. The process of linking attributes to different levels does not have anything to do with the actual values that will go into the attributes for any particular product. In the 'Voltage' example, when linking that attribute, you are only concerned with making that attribute available to all the battery products—not with the actual voltage for any given product. However, if many batteries under a parent shared the same value, the value could be populated on the parent to inherit down to the children. Any children varying from the parent value could then be edited individually, while those having the same value as the parent do not need to be updated further. Note that attribute inheritance within the product hierarchy is only available with specification attributes, and is not available with description attributes. Further note that this topic focuses on inheritance solely within the product hierarchy. However, it is important to be aware that attribute inheritance can also be used within classification hierarchies that are used to organize product objects. Attributes can be linked to a classification, making them available for all products linked into that classification (or a child classification). More information on attribute inheritance with classifications is available in the Classifications topic within this guide here, and within the Attribute Links topic in the System Setup guide here.
Important: Value inheritance is a powerful feature, but care should be taken not to maintain values at a level too high in the hierarchy. With such a setup, a single change could mean that thousands or millions of products would have to be updated in downstream systems and many systems are not geared to handle massive feeds like that.
When working with products and/or creating new products, users should be mindful of inheritance, considering both the inheritance of the available attributes, as well as their specific values or references. It may be helpful to consider the following:
- Is the hierarchy granular enough to allow products within the category to be grouped so that all products only have the relevant attributes, or are additional category levels required to obtain this granularity?
- Which attributes are required for the products in the category and/or subcategories?
- If product variants are used, which attributes should be maintained at the family level and which ones should be maintained at the variant level?
Note: Data can also inherit from dimensions (e.g., language or country). More information on this is available in the Dimension Dependent Data section of the Contexts topic in System Setup here.
Linking Attributes to Products
To make attributes valid for products, they must be linked to the appropriate tree nodes in the product hierarchy. Some attributes will be global attributes (applicable to all objects in the product hierarchy) and are linked to the “Product Hierarchy” root node. These global attributes are then valid for all products. Other attributes apply only to specific categories of objects, and are then linked directly to those categories, making them available for all objects within that category (if also set as valid for those object types). Attributes should not be linked to individual leaf objects, as each one would have to have the link individually applied. Instead, attributes should be linked to some parental folder in the hierarchy above the objects needing to use the attribute.
Before proceeding, be aware of the following:
- Attributes can be linked to objects of the product or classification super type. In either case, the steps are comparable and the attributes are made available for the children "under" the node at which they are linked (being mindful that "under" means "actual children" in the product hierarchy, whereas it means "objects with a reference to" when dealing with classifications).
- Linked attributes apply only to objects of the product super type. For example, linking attributes to a classification object that holds assets does not make those attributes available on the child assets.
- Only Specification attributes can be linked to products or classifications. Description attributes cannot be linked attributes.
Linking Attributes
- Select the product group or classification and click the References tab.
- Expand the appropriate flipper (Linked Attributes from Product Hierarchyon product objects or Attributes on classification objects), then click Link to Attribute.
- In the standard search / browse window that displays, locate the appropriate attribute(s) and click Select.
Localizing an Attribute Link
Local attribute links can be created to override inherited attribute links.
- Select any existing inherited attribute link and right-click on the row indicator.
- Select the Create Local Link option.
This creates a local version of the link where attributes on the reference can be locally edited. Local links are removed the same way as inherited links, though removing a local link re-applies the inherited link.
Unlinking a Linked Attribute
Unlinking an attribute does not delete the attribute from STEP; it removes the link so the attribute is no longer available for population on the selected node (and child nodes, if applicable). Note that attribute links must be removed from the same node to which they were added. In other words, trying to remove an inherited attribute link is not possible and the 'Remove Link to Attribute' option will be disabled. To remove an inherited link, it must be removed on the parental object that holds the link. However, care should be taken in doing this as it will remove the link for all child groups, and will need to be re-linked at those lower child levels if it is still needed there.
- On the References tab of the object, expand the appropriate flipper (Linked Attributes from Product Hierarchy on product objects or Attributes on classification objects).
- Right-click on the row indicator and select Remove Link to Attribute from the context menu (or use Ctrl + “-”). Multiple attributes can be unlinked simultaneously by multi-selecting.
Note: If an attribute has been linked locally, removing the link only removes the local link, and the inherited link will again take effect.
Additional methods for maintaining attributes links
Attribute links can be added and removed in a number of ways, in addition to what has been described above. These include:
- References tab of the attribute itself
- Maintain menu, then Link menu when a product or classification is selected
- Edit menu, then Link to Attribute / Remove Link to Attribute menu when a product or classification is selected
All methods for adding and removing attribute links are equivalent, producing the same end result.
Working with Inherited Values
There are many advantages to setting common values:
- When an update is needed, the value is only entered once in the product group instead of – potentially – separately, across hundreds of products.
- When new products are added to the group, they automatically inherit the product group’s values.
- The translation of product group values only need to be performed once, as opposed to translating the same value every time for individual products.
As mentioned above, it is possible to set attribute values for an individual product, but consider a situation where all products within a product group share common attribute values. For example, a set of hats that share a common description and features.
There are two ways to approach this: 1) keep all common values with the individual product or 2) set the common value at a higher level in the product hierarchy. By setting the value higher in the hierarchy, the attribute value is inherited down to all products beneath.
The image above shows three inherited values, which are designated by a green down arrow ().
The value is set at the product group, or in this case, 'Hats and Caps Sales Items'. Therefore, all products beneath will inherit the same value.
It is possible to override an inherited value by setting a different value at any subordinate level, e.g., the product level. This is called a localized value. However, this requires that the attribute be valid for the child object type (as is the case for the inherited values shown in the screenshot above). Attributes that display as inherited (indicated by the green arrow) but not editable (e.g., value field is yellow rather than white) are not valid for the object, so they can only have a common value with all sibling products, which is inherited from a parent higher in the hierarchy. Detailed information on setting validity of attributes is available in the Validity on Specification Attributes topic here in System Setup.
If a value is localized, then subsequently deleted, the product will again automatically inherit the parental value. Therefore, it is impossible to have null (blank) values for inherited attributes (unless the parental object has the null value).
For information on working with and/or setting up inherited reference values, refer to the Inheritance Example for a Reference section of System Setup here.