Dev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

Entity extension considerations

Describes customization options using the Application Dictionary or Commerce (SaaS) .NET objects and methods.

Commerce (SaaS) is designed to be highly configurable and extensible to accommodate a multitude of business needs.

For example, an SAP ERP implementation stores customer data which includes organizational code. Commerce (SaaS) does not include an organizational code on customer records. Therefore, there is a need to extend the Commerce (SaaS) customer entity to map ERP properties to Commerce (SaaS) properties.

Extension options

Commerce (SaaS) has two ways in which to extend the entities within the platform. This can be done one of the following ways:

  • Using the Application Dictionary
  • Using Commerce (SaaS) .NET objects and methods

Use the application dictionary

The entities that define the blueprint of the digital commerce objects needed to operate the platform can be extended using the Admin Console. Additionally, security permissions for fields are also managed from the Application Dictionary. Extending entities within the Admin Console provides a means to enrich the commerce objects with additional data. These fields, or properties, are then populated using any of the following ways:

  • Users of the Admin Console
  • Developers using Commerce (SaaS) .NET objects and methods
  • Configuration of Integration jobs

📘

Note

Only basic types such as Boolean and Strings can be stored using application dictionary control types.

Use Commerce (SaaS) .NET objects and methods

Custom properties can also be defined using code. This is usually done within a Handler of the Chain of Responsibility. Defining custom properties in code has the added advantage of storing complex types such as developer defined objects. The limitation here is that those custom properties cannot be edited within the Admin Console.

Use custom properties

From an implementation perspective, custom properties are stored as string values separate from the standard Commerce (SaaS) objects, like Customer and Product. This flexibility in structure allows you to store a wide range of content, but can also cause a loss in application performance. Before using a custom property to store data, you should make the following considerations regarding the data and be certain that a custom property is the solution.

  • Does the data need to be managed in Commerce (SaaS)? Does it need to be displayed in the Storefront or should the data only be managed in the ERP or PIM? If the data is not required as described above, you should consider not storing it in the platform and keeping it in an external system.
  • Does Commerce (SaaS) provide a standard property that can store this data? Each Commerce (SaaS) object provides quite a few properties and by default, some of them are not visible in the Admin Console. You can view them by enabling Master Edit Mode from the Debug Tools menu. Once that mode is enabled, you will see more properties displayed on the various detail pages.
  • If a standard property cannot be found, can the data be stored on one of the standard properties that is not currently in use? This might seem odd, but there may be standard properties not currently being used. If you find a standard property with the correct data type, you could store the data in that property. The name of the property won't match the data, but the performance benefits could outweigh the inconsistency.

Custom properties may still be the correct solution. If this is the case and you start to see performance degrading for requests that retrieve those custom properties, you should consider creating a custom endpoint. The endpoint could be used to return only the custom properties you actually need. For example, on the product detail page, you could have a request that retrieves custom properties for that product. This request would be separate from the main product API request that retrieves the product data. If this solution does not work, you could consider creating a custom database table to store the custom properties. The table could be designed specifically for those custom properties, rather than having a table full of string values.

Always consider the need for custom properties. They are a useful and flexible feature, but they can also cause a loss in application performance. Other solutions are available to help offset this loss.

Database schema

The following tables are used for extending the entities and objects within Commerce (SaaS). Specifically these tables represent the schema used for custom properties and security. These entities are managed using the Commerce (SaaS) Application Dictionary.

AppDict.PropertyConfiguration

Used to store the custom property definition. This custom property record is associated with the AppDict.EntityConfiguration table.

ColumnData TypeDescriptionRequired
IdUnique IdentifierThe unique identifier.Yes
EntityConfigurationIDUnique IdentifierThe unique identifier of the configurations used for entities.Yes
Namenvarchar(256)The unique name of the property used in code.Yes
ParentPropertynvarchar(256)No
Labelnvarchar(256)The label used to describe the property.No
ControlTypenvarchar(2048)The class definition that represents the UI control.No
IsRequiredbitIdentifies if the property is required.No
IsTranslatablebitIdentifies if the property is included in translation services.No
HintTextnvarchar(2048)The string used for contextual help.No
CreatedOndatetimeoffset(7)The date and time the property was created.Yes
CreatedBynvarchar(100)The username used to create the property.Yes
ModifiedOndatetimeoffset(7)The date and time the property was modified.Yes
ModifiedBynvarchar(100)The username used to update the property.Yes
ToolTipnvarchar(256)The string used as a description to the property.No
PropertyTypenvarchar(2048)The underlying data type used to store the property value.No
IsCustomPropertybitIdentifies if it is a custom property.Yes
CanViewbitIdentifies if the property can be viewed when editing or viewing the entity details.Yes
CanEditbitIdentifies if the property can be edited when editing or viewing the entity details.Yes

AppDict.EntityConfiguration

Used to store the entities that can be used and extended within the platform.

ColumnData TypeDescriptionRequired
IdUnique IdentifierThe unique identifier.Yes
Namenvarchar(256)The name of the entity.Yes
Descriptionnvarchar(2048)The description of the entity.No
Labelnvarchar(256)The label used to describe the entity.No
PluralizedLabelnvarchar(256)The label used to describe the entity when in a list.No
DisplayNameFormatnvarchar(1024)No
InstructionalTextnvarchar(2048)No
CreatedOndatetimeoffset(7)The date and time the property was created.Yes
CreatedBynvarchar(100)The username used to create the property.Yes
ModifiedOndatetimeoffset(7)The date and time the property was modified.Yes
ModifiedBynvarchar(100)The username used to update the property.Yes
CanViewbitIdentifies if an object from the entity can be viewed.Yes
CanEditbitIdentifies if the entity can be edited.Yes
CanCreatebitIdentifies if an object from the entity can be created.Yes
CanDeletebitIdentifies if an object from the entity can be deleted.Yes

AppDict.PropertyPermission

Used to store the permissions related to any custom properties added to the existing entities. By default the following roles are automatically assigned to custom properties (Property Configurations):

  • ISC_System
  • ISC_Integration
  • ISC_Admin
  • ISC_ContentAdmin
  • ISC_User
  • ISC_ContentApprover
  • ISC_ContentEditor
ColumnData TypeDescriptionRequired
IdUnique IdentifierThe unique identifier.Yes
PropertyConfigurationIdUnique IdentifierThe unique identifier of the property configuration associated with the entity.Yes
RoleNamenvarchar(256)The role name allowed to interact with the property.Yes
CreatedOndatetimeoffset(7)The date and time the property was created.Yes
CreatedBynvarchar(100)The username used to create the property.Yes
ModifiedOndatetimeoffset(7)The date and time the property was modified.Yes
ModifiedBynvarchar(100)The username used to update the property.Yes
CanViewbitIdentifies if the property can be viewed when editing or viewing the entity details.Yes
CanEditbitIdentifies if the property can be edited when editing or viewing the entity details.Yes

dbo.CustomProperty

Used to store the values for a given record of an extended entity.

ColumnData TypeDescriptionRequired
IdUnique IdentifierThe unique identifier.Yes
ParentIdUnique IdentifierUnique Id of the record that has been extended.Yes
Namenvarchar(100)The name of the custom property.Yes
Valuenvarchar(max)The value of the objects custom property.Yes
CreatedOndatetimeoffset(7)The date and time the property was created.Yes
CreatedBynvarchar(100)The username used to create the property.Yes
ModifiedOndatetimeoffset(7)The date and time the property was modified.Yes
ModifiedBynvarchar(100)The username used to update the property.Yes
ParentTablenvarchar(100)SQL table name of the entity that has been extended.Yes