Product Modeling

1 Introduction

This system administration guide contains key information to setup Manufacturing Sales Platform (MSP) Product Modelling effectively. The guide provides the concepts and detailed definition of the functions, aiming to enable administrator to have sufficient knowledge to setup the function with minimal supervision.

The document will be continually edited and updated based on latest product releases. Taking into the consideration of expensive effort keeping the document updated and effective usage of it, only major and complex features should be covered.

 

To better illustrate how to setup certain feature, some examples are given. It also contains the steps linked to relevant screens. Each step contains actions which the administrator needs to perform to complete the setup.

This administration guide is based on Manufacturing X (MX) release version 1902.

Enjoy!

The Product Engineering Team

2 Product Modelling Introduction

A product modelling is a task to create one or more products and define the product rules depending on the characteristics of the product. MSP has a configuration engine which will apply the product rules defined in the product model to perform the BOM Explosion logic and range restriction as well as visibility of the attributes and its value. The MSP internal price engine can also make use of configured data and exploded product to calculate the overall price/cost of sales document differently.

Figure 1 - Configuration, Pricing and Reporting based on product
Figure 1 - Configuration, Pricing and Reporting based on product

A product can be modeled using product BOM, attributes, knowledge base, rules and scripting.

The product modelling can be further divided into five main tasks, structure definition, calculation and rules definition.

  • Product Creation
  • Product Structure Definition
    • Attributes
    • Group and Sub Group
  • Product BOM Definition
  • Product Rules Definition
    • Range Restriction Rule
    • BOM Explosion Rule
    • Conditional Rule
  • Calculations
  • Scripting Feature (IMCScript Engine)

3. Product Creation

A product can be mainly categorized into the following.

  • Classified product
    • A classified product is a product that cannot be configured by user. However, it can have the KBClass which holds the attributes with default value/characteristics of the product.
  • Configurable product
    • A configurable product is a product that can be configured by user and define the rules in order to perform the BOM explosion.

A product can be created with the following properties.

PropertyDescription
NameThe name of the product that must be unique in the MSP platform.
Unit of MeasureIt is to assign the unit of measure of the product such as Each or Kilogram
Product StatusIt is to mark the product if it is active or inactive
Product TypeIt is to define the type of product if it is finished good, raw material.
Product CategoryIt is to organize all the products that belonged to the same category.
Classified ProductIf the product is marked as classified product, it means that the product cannot have knowledge base to define the configuration rules. However, it can attach the corresponding KBClass to show the attributes of classified product in the configuration page.
ERP IDThe ERP ID of the product that must be unique in the MSP platform. in order to map with ERP product. For numeric ERP ID, there is a setting to set the leading zero. By default, the length of leading zero is 18.
CRM IDThe CRM ID of the product that must be unique in the MSP Platform.
Export to CRMMark this product if MSP has integrated with external CRM system and to export the product to CRM.
Export to ERPMark this product if MSP has integrated with external ERP system and to export the product to ERP.
Optional Product

The product or products can be created in three different ways.

  • Via GUI
  • Via Synchronization from ERP
  • Via Excel Upload

3.1 Products Creation via UI

  • Click the Products tab and click [+] icon to create new product
Figure 2 - Product Creation via UI
Figure 2 - Product Creation via UI
Figure 3 - Overview of Product
Figure 3 - Overview of Product

3.2 Products Creation Using ERP Synchronization

  • In order to synchronize the products from ERP system, click the System Processes ->Products Synchronization tab.
    • Click Sync button to open the Synchronize Products view
    • Check Product and force sync product if you wanted to synchronize all product.
Figure 4 - Synchronize Products View
Figure 4 - Synchronize Products View

3.3 Products Creation Using Excel Upload

  • The product modeler can set the setting to download the excel template with existing product data to modify the existing products data or without existing product data to create new products.
Figure 5 - Setting to download all products or empty product template
Figure 5 - Setting to download all products or empty product template
  • Click the download icon to download the products excel template
  • Enter/Select the product data
Figure 6 - Product Excel Sheet to define the product header data
Figure 6 - Product Excel Sheet to define the product header data
  • Click the upload icon to upload the filled excel file to create new products or update existing products.

 

A modeler can also add new label and comment column for different languages by copying the LABEL_EN and COMMENT_EN and changing the name of the column header to be LABEL_DE and COMMENT_DE if modeler wanted to define the localization of German language.

Things to Node About:
In excel, not all the product header properties can be modified. Only those listed in the Product sheet are supported.

4 Product Characteristics Definition

A classified product or configurable product can have the attributes to define the characteristics of a product. In MSP, characteristics of product is defined via attribute (more specifically, DynamicAttribute), that holds the value(s). Based on characteristics of a product, a product modeler can define the rule(s) to explode the sub components/accessories of main product.

4.1 Attributes Introduction

  • Every configurable product has its own characteristics or attributes that hold property of a product. In MSP, we called it, DynamicAttribute (DA) which could be either DynamicDataAttribute (DDA) or DynamicSymbolicAttribute (DSA).DDA is an attribute which can hold literal value having type, Boolean, String, Numeric, Date, Currency. However, it cannot hold the localization information about the value having string data type.DSA is an attribute which holds the string/text value which can have the localization. The value of the range must not contain the special characters (example pipe, dot, comma, space, dash). Before adding the attributes to product, the master DA must be created. The attribute can be created in four different ways
    • Via UI (See Section Adding Attribute via User Interface)
    • Via Global Attribute Excel Upload (See Section Adding Attribute via Global Attribute Excel )
    • Via Product Knowledge Base Excel Upload (See Section Adding attribute via Product Knowledge Base Excel )
    • Via ERP Synchronization (See Section Adding attribute via ERP Synchronization )
Figure 7 - Example of Dynamic Attribute Properties
Figure 7 - Example of Dynamic Attribute Properties

Data Type

The DDA can be specified the following data type. However, for DSA, the data type is always string.

  • Numeric
    • If DDA is numeric, the product modeler can also set the minimum range and maximum range value as well as the precision of the value. If the precision of the numeric DDA was not set, MSP will use the global precision setting.
  • String
  • Boolean
  • Date
  • Currency
    • If DDA is currency data type, it can hold value and currency information. That DDA is mainly used for the case where MSP is using the internal price engine and had pricing step that fetch that value and currency.

 

Enumerable

Once DA (DSA or DDA) is marked as enumerable, it means that value of that attribute will be selected from the drop-down list by the user. Only DDA having data type, String or Numeric can be marked as enumerable. For DA with enumerable, the range value must not contain special characters (example pipe, comma, space, dash). If user wanted to see some special characters inside the down list, it needs to convert to DSA and provide the localization of its value while defining the range value without special characters.

Mandatory

Once DA (DSA or DDA) is marked as mandatory, it means that user/system must assign the value to that attribute. Not having value assigned in mandatory will have the SalesItem (SalesItem is a line item inside the Quote which has links with Product and KnowledgeBase) error and user cannot submit the Quote (Quote is the technical term for Sales Document in MSP). The attribute can be marked as mandatory via global properties of the attribute or Rule using Conditional Rule or IMCScript. The details about how to mark DA as mandatory via Rule will be explained in Section Conditional Rule (Conditional Triggers) and IMCScript Guide)

ReadOnly

Once DA (DSA or DDA) is marked as read only, it means that user cannot assign value for read only attribute however, the attribute can be marked as read only via global properties of the attribute or via Rules (conditional rule or IMCScript). The details about how to mark DA as read only via conditional Rule will be explained in Section in Section Conditional Rule (Conditional Triggers). The syntax and usage of IMCScript for making attribute read only can be found in IMCScript Guide.

Multi Value

Once DA is marked as multi value, it means that user can assign more than one value for that DA.

The attribute can be marked as multi value via global properties of the attribute or via Rule. The details about how to mark DA as read only via Rule will be explained in Section Conditional Rule (Conditional Triggers) )

Hidden

Once DA is marked as hidden, it means that user will not see that attribute in configuration page. The hidden property can be set in three different ways.

  • Rule (See Section Conditional Rule (Conditional Triggers) )
  • IMCScript (There is a separate documentation to understand more about the feature of IMCScript)
  • DA Profile (There is a separate documentation to understand more about the feature of DA Profile)

 

Costing Relevant

Once DA is marked as costing relevant, it means that changes done in that DA will trigger the internal price engine to calculate the total cost/price of the SalesItem based on the setting of the interactive pricing. The attribute can be marked as costing relevant via global properties of the attribute, conditional rule or IMCScript. The details about how to mark DA as costing relevant via Rule will be explained in Section Conditional Rule (Conditional Triggers) ).

4.1.1 Adding Attribute via User Interface

Attributes can be created using UI via the Attributes Management tab as follow. Name, Type, Position and Data Type are mandatory fields to provide. The name must be unique and should not contain any special characters.

Figure 8 - Example of Creating DDA via UI
Figure 9 - Example of Creating DSA via UI

4.1.2 Adding Attribute via Global Attribute Excel

  • The DA can also be created via Excel by downloading the empty template and upload via Attributes Management tab.
    • Click the download
    • Select Template Type
      • Choose Empty to define new Attribute that does not exist in the system.
      • Choose Selected Attributes to download the template with the selected attributes (This is useful when user wanted to change selected attribute properties or range value of that attribute)
      • Choose All Attributes to download the template with all the attributes (For performance wise, if MSP had 500+ attributes, it will take sometimes to download and upload. The time taken might also depends on the server load and the network connection)
    • User can further filter the attribute if user selected All Attributes or Selected Attributes
      • Choose [All] to download all DA with and without enumerable property
    • Choose [With Range] only to download all DA or selected attributes having the enumerable property
    • Choose [Without Range] only to download all DA or selected attributes not having the enumerable property
    • Click Download Icon to download the empty template

4.1.2.1 Defining Attribute Property in Excel

  • Define the attribute property and localization
    • Attribute Name
      • Attribute name is the mandatory value to specify and the specified name should not be found inside the system if user wanted to create new attribute.
      • The name of the attribute must only contain A-Z and 0-9 and underscore is allowed to have between the letters or numbers.
    • Attribute Type
      • Attribute type is the mandatory to specify to classify between DDA or DSA. Choose Data to represent the DDA and choose Symbolic to represent the DSA
    • Data Type
      • If Attribute type is Data, it is mandatory to specify the Data Type of the attribute (See also Section Attributes Introduction )
  • Define the range values and localization for those attributes having the enumerable property
    • The range value must only contain A-Z and 0-9 and underscore is allowed to have between letters or numbers.

4.1.2.2 Customizing the template to include more localization

A product modeler can customize the template to include more columns for localization by adding more column at the Attributes sheet and Attributes_Range sheet. Example, in order to add label and comment for German, user can get the pre-defined template from MSP’s Customer Support team, add more column with the naming convention, Label_CN and Comment_DE in column header and put the JXLS syntax in Label and Comment columns for downloading existing label or comment for other languages. Example (${da.label_de}, ${da.comment_de}).

After that upload the template inside the content management with the following folder structure

  • excels
    • DynamicAttribute
      • xlsx

4.1.3 Adding attribute via Product Knowledge Base Excel

While adding attribute via product knowledge base excel, the way to define the attribute properties is same as mentioned in Section Adding Attribute via User Interface or Adding Attribute via Global Attribute Excel. However, the way to download the template needs to follow the following step.

    • Select the Knowledge base and click the download icon
    • Select the download options
      • For adding the attributes only, it is not needed to check any options
    • Click Download

The knowledge base excel template with ATTRIBUTES sheet will be obtained.

  • Follow the same step mentioned in Section Defining Attribute Property in Excel
  • Upload the filled template and click Confirm if there are no errors

Things to Note About: Customizing of product knowledge was not supported. If product modeler wanted to change the localization of Attribute or range value for some DA, it is needed to follow the same steps mentioned in Section Customizing the template to include more localization.

4.1.4 Adding attribute via ERP Synchronization

MSP provides feature to synchronize classified product data which will also synchronize all attributes/characteristics of classified product.

4.1.4.1 Synchronizing all attributes of classified product from ERP

The attribute can also be downloaded from the ERP by downloading as classified data which will download all classified knowledge base class from ERP as well as all the attributes of it.

4.1.4.2  Synchronizing individual attribute

If the user knew the name of the attribute in ERP, he/she can also synchronize the individual attribute by specifying the ERP ID of the attribute.

4.2 Classified Product Characteristics Definition

Characteristics of the classified product can be defined via KBClass under Model -> Class Management tab.KBClass is a knowledge base for classified product and is not allowed to define the configuration rules. In order to create the classified product with characteristics,

  • Click [+] icon to create new Knowledge Base Class
  • Select the class to add the attributes/characteristics of that class
Figure 10 - Creating a classified class
Figure 10 - Creating a classified class

A new class was created and next step is to attach that class to the classified product. In order to do that, select the classified product and click on the Knowledge Base tab.

  • Select Classified Classes to link the knowledge base class that was defined previously to current product.
  • Create Snapshot in order to assign the default value for the attributes inside the class.
Figure 11 - Attaching the KBClass to Product
Figure 11 - Attaching the KBClass to Product
Figure 12 - Creating the Snapshot (KBSnapshot)
Figure 12 - Creating the Snapshot (KBSnapshot)

Things to Note About : All the classified product can be synchronized from external ERP system if MSP has integrated with external ERP system. The details about how to synchronize product data from ERP can  be found in ERP Integration Guide or brief introduction of synchronizing of attributes from ERP can be found in Section Adding attribute via ERP Synchronization.

4.3 Configurable Product Characteristics Definition

A configurable product defines the product structure which contains at least one attribute to determine the characteristics of a product. A product modeler can define attributes of the product and group the attributes depending on how the sales people want to see in configuration page.

In order to add the attributes to the product, a knowledge base must be created first. The knowledge base is a kind of container that holds the properties of the product as well as allow a product modeler to define the product rules (Details can be found in Section Quote Attributes (KBTriggerRelation).

4.3.1  Creating Knowledge Base

The knowledge base can be created using UI or knowledge base excel template. In order to create the knowledge base via UI,

  • Enter the unique name of the knowledge base
  • Select the unique valid from date
    • If the user specified the future valid from date, MSP will not use that knowledge base, but will choose the knowledge base which is having the most valid from date at time of line item creation inside a quote.
  • Links the BOM that knowledge base wanted to link with
    • This is optional if the product does not have the related products to be added and has rules to do the BOM Explosion.
Figure 13 - Creating a KB via UI
Figure 13 - Creating a KB via UI

In order to create the knowledge base via excel, the following steps are needed.

  • Download the empty knowledge base excel template
  • Enter the unique name of the knowledge base
  • Enter the valid from date in DD-MM-YYYY
  • Select the BOM if the knowledge had BOM explosion rule
  • Add attributes to be included in the knowledgebase if modeler has already known which attributes to be added. (Details can be seen in Section Adding Knowledge Base Attributes)
Figure 14 - Download Options View to Download Existing KB or Template
Figure 14 - Download Options View to Download Existing KB or Template
Figure 15 - Defining the Knowledge Base Header
Figure 15 - Defining the Knowledge Base Header
  • Upload the excel back to the MSP
  • Click Confirm if there are no errors
  • It will create an empty knowledge base without any attributes assigned.

4.3.2 Adding Knowledge Base Attributes

Once product had the knowledge, the attributes to define the characteristics of product can be added to knowledge base.

4.3.2.1 Added Attributes to Knowledge Base via UI

  • Select the knowledge base
  • Select the existing attributes
    • If the attribute was not found, create new attribute as mentioned in Section Attributes Introduction.
Figure 16 - Adding Attributes to Knowledge Base
Figure 16 - Adding Attributes to Knowledge Base

4.3.2.2 Added Attributes to Knowledge Base via Excel

  • In order to add the attributes via knowledge base excel template
    • Select an existing knowledge base
    • Download with no options selected
    • Select the Attributes sheet and enter the existing attribute name
      • All the names of existing attributes could be found in _ExistingAttributes sheet if option to include the existing attributes sheet was selected in Download Options
Figure 17 - Adding new Attribute via Knowledge Base Excel Template
Figure 17 - Adding new Attribute via Knowledge Base Excel Template
  • If attribute name was not found inside the drop-down list, a product modeler can also define the new name by remove the data validation in Column C in excel and define the new attribute property as mentioned in Section Defining Attribute Property in Excel.
  • Upload the filled excel template to add attributes to Knowledge Base and click confirm if there are no errors.

4.3.3 Grouping Knowledge Base Attributes

The product modeler can organize the attributes of the product into Group and Sub Group depending on the needs of the sales people. It is important to note that a configurable product must have at least one group and sub group which contains attributes. If the product modeler wanted to hide certain attributes for some role, he/she can use the following feature

    • DA Profile feature (See also DA Profile Guide)
    • Conditional trigger rule (See also Section Conditional Rule (Conditional Triggers) )
    • IMCScript with Update Config Item Event (See also IMCScript Guide)
4.3.3.1 Defining Group and Sub Group via GUI
  • Enter the group name and position of the group
  • Click on the group created above to add the sub group inside
  • Enter the sub group name
  • Add the attributes which has been assigned to the Knowledge Base
4.3.3.2 Defining Group and Sub Group using Excel
  • Select an existing KnowledgeBase
  • Download the Knowledge Base excel template
  • Click on the Group sheet
  • Enter the Group Name and Sub Group Name as shown below
  • Select the ATTRIBUTES sheet to copy all the Attributes Name
  • Paste it inside the ATTRIBUTE Name column inside the Group sheet
  • Upload and confirm if there are no errors.
Define Group

4.3.4   Quote Attributes (KBTriggerRelation)

A Quote Attribute, which is named in excel, is a KBTriggerRelation in technical term. It is an attribute which could be part of knowledge but is not an attribute that user will see in Configuration page. The main purpose of Quote Attribute is to provide the configuration engine to fetch some value within a quote. The Quote Attribute or KBTriggerRelation will let the MSP’s config engine to know the domain values of attribute and how to search the value at run time within a Quote. This attribute will mainly be mainly used as conditional attribute in range restriction ( See also Section Case 6 How to define range restriction based on single Quote Attribute ) or BOM explosion (See also Section Default BOM Explosion and Section Attributes value and Quote Attribute values based BOM Explosion) rule.

The KBTriggerRelation will have the following three main properties.

The domain values of attribute are determined by the OnType and OnAttribute property and the way to search the value inside the Quote at runtime is determined by the SearchExpression.

In order to define KBTriggerRelation via UI,

  • Go to Master Data Management and search for KB Trigger Relation and click on it
  • Click [+] to add KB Trigger Relation
  • Click the icon to open the search expression dialogue which will list all the supported search expressions
  • Select the search expression which will automatically assign the OnType, OnAttribute

The KBTriggerRelation can also be specified via the QUOTE_ATTRIBUTE sheet of product Knowledgebase excel (See also 0). However, it is highly recommended to use the UI to define the new KBTriggerRelation as it has support for the list of all supported search expressions together with the associated onType and onAttribute property.

5 Product BOM

A product BOM (Bill of Materials) is the structure of the product which defines related materials/parts/sub-assemblies/intermediate assemblies/sub components and quantity of each required to manufacture the product. Below is an example of Toy Car product which comprises of Wheel Assembly (which could be further classified into Axel and Wheel, Body where each sub-assembly has its own required quantity to be included as part of main product.

In MSP, all those sub components of main product are listed as Product BOM. A BOM can be attached to the knowledge base where modeler can define the BOM Explosion rule in order to add the related product as the sub sales items based on the configured data. A product can have more than one BOM however one BOM can only be attached to one knowledge base. At run time, MSP will pick the most valid Knowledge base and apply the BOM explosion rules. A BOM will includes one or more than one related product (MSP called it as BOMEntry). A BOMEntry can have the following properties.

  • BOM Quantity
    • Quantity
    • Position (the order to add the related products)
    • Allow parent to change the quantity of BOM Entry
      • Enable this if modeler wanted to change the quantity of sub line items based on parent line item’s quantity.
    •  BOM Quantity is manually changeable or not
    •  BOM Quantity is calculation or not
      • This setting will only be applied if BOM Quantity is allowed to change manually.
      • Mark this to obtain the quantity via IMCScript so that changing the parent line item will not impact the child quantity.
      • If this setting is true, the quantity will not be obtained from the parent line item qty.

 

The quantity of the sub items can also be calculated via the IMCScript using the event, AFTER CREATE SALESITEM. The details feature of IMCScript can be found in IMCScript Guide.

5.1 Creating Product BOM via GUI

  • Enter the name for a BOM
  • Click BOM created to navigate to Products tab to add the related products into it
  • User can change the BOM Entry Id to have name of product or ERP ID or CRM ID which will help during the excel download to map to BOM Entry ID in Rule sheet. However, the BOM Entry Id must be unique and should be have duplicate name.

5.2 Creating Product BOM via Excel

Product BOM can be created together with the Knowledge base as having product BOM means that there must be BOM Explosion logic to define rules to add related products from the Product BOM.

  • Select the existing Knowledge base or click the download icon to download the Knowledge Based excel template
  • Select the download options if there is any to include template sheet into the downloaded excel.
  • Tick [Includes Existing Products] sheet if user wanted to include all the products in the system in order to search for the product ERP ID or CRM ID or name.

The knowledge base sheet will be generated with the PRODUCT BOM sheet to define the Product BOM data.

  • Enter the name of the BOM Name
  • Specify the unique BOM ENTRY ID
  • Enter the Object Name/Product Name or ERPID or CRM
    • MSP will find the product by ERP ID followed by CRM ID first
    • If searching the product by ERP ID or CRM ID was not found, it will use the object name or product name to search the product inside the MSP
    • User can check the existing product list in _ExistingProducts if user selected the option to include existing products.
  • Upload the filed excel to the MSP
    • MSP will show the error found inside the excel sheet
    • Correct the errors if there is any and upload again after correcting the errors
  • Click confirm to upload the Knowledge Base Data.
  • MSP will create the Knowledge base if it does not exist in MSP as well as Product BOM.

6 Product Rules Definition

A configurable product can be modelled to have the product specific rules. In MSP, rules are represented in a technical term called, KBTrigger and the same type of rules are grouped together inside an object having a technical type called, KBTriggerGroup ( In excel, we will call RULE_ sheet to represent the KBTriggerGroup ). The technical representation of the relationships of rules to product is as follow.

Figure 18 Technical Representation of the Relationship Between Product and Rule
Figure 18 Technical Representation of the Relationship Between Product and Rule

Depending on the complexity and requirements of product model, product rules can be defined within the knowledge base or using the IMCScript. However, the rules to define the range restriction and BOM explosion can only be done inside the knowledge base as of 1902 release. Generally, the rules are defined in order to do the following tasks.

  • to restrict some attribute’s range value based on the configuration data
  • to perform the BOM Explosion
  • to assign some values based on certain condition
  • to assign the property of an attribute such as read Only, mandatory, costing Relevant, hidden
  • to calculate some attribute value
Figure 19 - Components of Product Rules
Figure 19 - Components of Product Rules

6.1 Range Restriction Rule

The range restriction will limit the values of the certain attributes based on some other attributes value assigned in the configuration page or some data point inside the Quote or SalesItem using the Quote Attribute/KBTriggerRelation ( See how to define Quote Attribute/KBTriggerRelation in Section Quote Attributes (KBTriggerRelation) ) in rule.

6.1.1 Defining Range Restriction Rule via GUI

  • Create Range Name
Figure 20 - UI for Creating a Range Rule
Figure 20 - UI for Creating a Range Rule
  • Add the attributes and click the Triggers tab
Figure 21 - UI for Selecting Controlling Attribute for Range Restriction
Figure 21 - UI for Selecting Controlling Attribute for Range Restriction
  • Create new trigger and add range restriction condition
    • BOM Entries are not needed to define for the type having type, Range ( White List ). They are only needed to define when the type of rule is BOM or BOM_AND_RANGE.
Figure 22 - Example of a Rule
Figure 22 - Example of a Rule
Figure 23 Viewing All Rules
Figure 23 Viewing All Rules

In above example, there are three triggers, if the user selected DA1 value to be DA1_1, user will only see the DA2 value as DA2_1 and DA3 value as DA3_1.

To see the data more clearly as shown below, a product modeler can download the data into excel sheet by downloading the existing knowledge base.

  • Select the sheet starting with name RULE_
Figure 24 - Example Rule Sheet Showing All Rules inside A Group
Figure 24 - Example Rule Sheet Showing All Rules inside A Group

Things to Note About:

A product modeler can add the more than one KBTriggerRelation/Quote Attribute as part of controlling value for range restriction.

Figure 25 - Example of Defining Range Restriction by Attribute and Quote Attribute
Figure 25 - Example of Defining Range Restriction by Attribute and Quote Attribute

6.1.2 Creating Range Restriction Via Excel

In order to create range restriction rule, it is recommended that product already had the Knowledge Base and all the attributes to be considered for that product have been added to the Knowledge Base. By doing so, user can see the range value as a drop-down list in Rule sheet.

  • Select the knowledge base to define the new range restriction rule or update the existing one rule if there is an existing knowledge base
  • Select the Range (White List) and specify the number of range restriction group
  • Click download to obtain the knowledge base excel template with/without existing data
Figure 26 - Downloading an Existing Knowledge Base with Additional Range Rule Sheet
Figure 26 - Downloading an Existing Knowledge Base with Additional Range Rule Sheet

The following template with the new sheet called, RULE_2 will be obtained. The new sheet will also list all the DA having enumerable property automatically together with drop list for each column.

Figure 27 - Generated Rule Sheet for Range Restriction with All Enumerable Attributes
Figure 27 - Generated Rule Sheet for Range Restriction with All Enumerable Attributes
  • Define the header of the RULE
  • Enter the name of the rule
  • Define the Sequence ID of the rule (Defining the sequence ID will make sure that the order of sheets inside the workbook will be maintained when user downloaded it from KnowledgeBase again)
  • The new rule sheet will list all the DA with enumerable property inside a knowledge base and user can add new DA which is not enumerable or remove it if it is not necessary.
  • User can also add the new column using the QUOTE_ATTRIBUTE by following the naming convention such as QUOTE ATTRIBUTE.[Name of KBTriggerRelation] and use the value based on definition of KBTriggerRelation’s onType  and onAttribute property.
  • Define the details of the RULE
  • In this example, we will use DA1 (which is a shared DA used in RULE_1, DA4, and DA5)
  • Remove other attributes column that are not part of the range restriction rule
  • Define the range restriction rule and upload
Figure 28 - Example of Range Restriction Definition in Excel Sheet
Figure 28 - Example of Range Restriction Definition in Excel Sheet
  • Define the range restriction rule as above and uploading will show as follow.
Figure 29 - Results of Rules Defined in Excel
Figure 29 - Results of Rules Defined in Excel

Things to Note About:

A product modeler can manually add the Quote Attribute in range restriction/BOM explosion Rule sheet if the requirement is to restrict range value not only be attribute value but also by Quote Attribute value such as Sales Organization of Quote or Product Status of Sales Item which is being inserted.

Figure 30 - Example Range Restriction Rule with Quote Attribute ( Sales Org ERP ID )
Figure 30 - Example Range Restriction Rule with Quote Attribute ( Sales Org ERP ID )

6.1.3 Understanding the concept of Range Restriction

Currently range restriction algorithm is using the OR operator between the attributes within a same sheet and UNION concept is used to combine all range values obtained from different rule sheets if there is no intersected range values or INTERSECTION concept is used if there are intersected range values from all groups having the shared attribute. If there is a shared attribute among the different group and the attribute that user wanted to see the range value is on that attribute, the following concept will be applied.

Concept One: All Group Having Common Range Value

For example, we had three rule groups/sheets and each rule group/sheet can return the common attribute as shown below, user will only see the value(s) which are in common in all three groups. According to below example, you will see the value 2.

Figure 31 – All Groups with Shared Attribute Having Common Range Value (Three Groups)
Figure 31 – All Groups with Shared Attribute Having Common Range Value (Three Groups)
Figure 32 – All Groups with Shared Attribute Having Common Range Value ( Two Groups )
Figure 32 – All Groups with Shared Attribute Having Common Range Value ( Two Groups )

Concept Two: All Groups with Shared Attribute Not Having Common Range Value

In case, all groups having shared attribute does not return the common attribute in all groups or one of the groups, it will return the UNION values obtained in all groups.

Figure 33 -All Groups with Shared Attribute Not Having Common Value in One of Groups
Figure 33 -All Groups with Shared Attribute Not Having Common Value in One of Groups
Figure 34 - All Groups with Shared Attribute Not Having Common Value
Figure 34 - All Groups with Shared Attribute Not Having Common Value

If the requirement is to provide range restriction based on some logical condition ( For example, if DA1 > 10 and DA1<= 20then  range value of DA2 must be 1,2,3 and if DA1>20 then the range value of DA2 must be 4,5,6), the product modeler can make use of Simplified Conditional Rule and Dummy Attribute to assign unique value ( See also Section Case 5 How to get range value based on some logical condition for more information about how to implement such use case ).

6.1.3.1 Use Case 1 Ignoring the rule

For example, Let’s say, we had defined the following two groups/rules as shown below and user has selected the DA4 value as DA4_4.

Figure 35 - Example Rule Definitions to Present Rule Ignorance Concept
Figure 35 - Example Rule Definitions to Present Rule Ignorance Concept

When the user clicks on the DA1 to see the range value of it based on above rule, he/she will see the DA1_4 as shown below. That is because, the RULE 1 is not applying as none of the conditions are met. Only Rule 2 was applied by filtering the DA4 value to be DA4_4.

Figure 36 - Example Range Restriction Ignoring A Rule Group
Figure 36 - Example Range Restriction Ignoring A Rule Group
Figure 36 - Example Range Restriction Ignoring A Rule Group
6.1.3.2 Use Case 2 Applying both rules for shared attribute’s range values

Let’s say user selected DA2 to be DA2_1 and DA4 to be DA4_4. When the user selected the DA1 which is used both RULES, he/she will see the values for DA1 as DA1_1 from RULE 1 sheet and DA1_4 from RULE_2. This case shows that it is using OR between the Attributes inside a sheet and the UNION concept to gather all the results obtained from different rule group (RULE_ sheet) as there is no common value returned from two different rule group/sheet.

Figure 37 - No Common Values In Both Group
Figure 37 - No Common Values In Both Group
Figure 38 - Example Range Restriction Showing OR and UNION Concept
Figure 38 - Example Range Restriction Showing OR and UNION Concept
6.1.3.3 Case 3 Combining Rule which had shared attribute into one to restrict more

Let’s say the requirement is to show DA1 as DA1_1 if DA2 is selected as DA2_1 or DA1 as DA1_4 if DA4_4 is selected. In order to solve this requirement, it is needed to combine all sheet having the common attribute, in this case DA1 as follow.

Figure 39 - Example of Combining Rule Having the Shared Attributes
Figure 39 - Example of Combining Rule Having the Shared Attributes

After combining two sheets into one as above, the DA1 value will still be shown as DA1_1 and DA1_4. That is because of the following

  • In row with DA1 having value DA1_1, DA2 and DA3 will be used to check the condition using [OR]. Since DA2 is having DA2_1, that row is valid as it is using [OR] condition between the condition attributes for Range Restriction.
  • In row with DA1 having value DA1_4, DA4 and DA5 will be used to check if row is valid for getting range value. Since DA1_4 is having DA4_4, the row is valid and thus DA1_4 will become part of the range value for DA1.

In order to satisfy the requirement to show only DA1_1 once DA2_1 was selected in DA2, it is needed to put default value in DA2, DA3, DA4 and DA5 for those rows which has value assigned for DA1.

Figure 40 - Putting the Default Value to Get Required Result
Figure 40 - Putting the Default Value to Get Required Result

In this way, user can only select DA4 as DA4_NONE when DA2 was selected first with value DA2_1 which lead to have value for DA1 as DA1_1 if the user started from DA2.

Figure 41 - Example Result for Combined Rule with Default Value (Starting with DA2)
Figure 41 - Example Result for Combined Rule with Default Value (Starting with DA2)

If user started with the DA4 with value DA4_4, he/she will see None in DA2 and DA1 value as DA1_4 as shown below.

Figure 42 - Example Result for Combined Rule with Default Value (Starting with DA4)
Figure 42 - Example Result for Combined Rule with Default Value (Starting with DA4)
Figure 42 - Example Result for Combined Rule with Default Value (Starting with DA4)
6.1.3.4 Case 4 Concept About Intersected Range Value in Different Group

Let’s say we had the following range rule defined and user expected to show DA1 value as DA1_1 once DA2 was selected as DA2_1 and DA4 as selected as DA4_4. It means, he/she wanted to show the range values which are in common (ie. DA1_1). In term of set theory’s intersection rule, Range Value from Rule 1 (DA1_1) ∩ Range Value from Rule 2(DA1_1, DA1_4) = DA1_1.

Figure 43 - Example Data to Show How to Get the Interested Range Value
Figure 43 - Example Data to Show How to Get the Interested Range Value
Figure 43 - Example Data to Show How to Get the Interested Range Value

Since both RULE groups are having the common range value DA1_1 from RULE_1 and  DA1_1,DA1_4 from RULE_2  due to interception concept, the final range value becomes DA1_1.

Figure 44 Intersection Concept Used In This Case
Figure 44 Intersection Concept Used In This Case
6.1.3.5 Case 5 How to get range value based on some logical condition

Let’s say the requirement is to obtain the range restriction based on some attribute value which is greater than or equal to certain value. Firstly, the attribute to use as condition must be DDA and having the data type, Numeric. Below is an example rule definition to restrict the range value of DA1 based on DDA_NUMBER1. Example, if DDA_NUMBER_1’s value is greater than 10 and less than or equal to 20, the range value for DA1 should be DA1_1.

Figure 45 - Example Data to Restrict DA Values by Logical Condition
Figure 45 - Example Data to Restrict DA Values by Logical Condition

Since range restriction algorithm only apply the EQUALTO operator for the value in each attribute column, it is needed to create some DUMMY attribute to maintain some value based on DDA_NUMBER_1 by writing the conditional rule or IMCScript to assign some unique value which will be used to restrict the value of DA1.

Step 1: Define the dummy attribute as follow

Figure 46 - Defining the Dummy Attribute to Maintain the Result of Logical Condition
Figure 46 - Defining the Dummy Attribute to Maintain the Result of Logical Condition
Figure 47 - Example Definition of Range Values for Dummy Attribute
Figure 47 - Example Definition of Range Values for Dummy Attribute

Step 2: Add that Dummy Attribute to Knowledge Base and Group

Figure 48 - Adding the Dummy Attribute to Knowledge Base
Figure 48 - Adding the Dummy Attribute to Knowledge Base

Step 3: Download an existing Knowledge Base with Simplified Conditional Rule and Range Rule

Figure 49 - Downloading Knowledge Base with Simplified Conditional Rule
Figure 49 - Downloading Knowledge Base with Simplified Conditional Rule

Step 4: Define the conditional rules to assign to Dummy Attribute

Figure 50 - Defining the Conditional Rule to Assign to Dummy Attribute
Figure 50 - Defining the Conditional Rule to Assign to Dummy Attribute

Above is an example definition for Dummy attribute assignment using the Simplified Conditional sheet. Next step is to define the range rule in Rule 2.

Figure 51 - Alternative Implementation for Logical Condition Based Range Restriction
Figure 51 - Alternative Implementation for Logical Condition Based Range Restriction

Uploading the above RULE_1 and RULE_2 and configuring the DDA_Numeric_1 value will trigger the Conditional Rule to assign the value to Dummy Attribute (example, Logical_Condition_Result).  At the time of getting range values for DA1, it will apply the RULE_2 sheet based on the Dummy Attribute as shown below. Based that Dummy attribute’s value, the range values for DA1 will be restricted as shown below.

Figure 52 - Result of Range Restriction using Logical Condition
Figure 52 - Result of Range Restriction using Logical Condition
6.1.3.6 Case 6 How to define range restriction based on single Quote Attribute

In some case, a product modeler wants to define the simple range restriction based on some Quote Attribute. In order to define range restriction by Quote Attribute via UI,

  • KBTriggerRelation/Quote Attribute must have been defined (See also Section Quote Attributes (KBTriggerRelation) )
  • Create new knowledge base if it has not been defined.
  • Create new rule with Range (White List) and add an existing quote attribute ( See also Section Quote Attributes (KBTriggerRelation) ) which is a controlling data point and a Knowledge base attribute where the range value of that will be restricted by Quote Attribute.
Figure 53 - Adding the KBTriggerRelation/Quote Attribute to Range Restriction Rule
Figure 53 - Adding the KBTriggerRelation/Quote Attribute to Range Restriction Rule
  • Add triggers to restrict Knowledge base attribute’s range values ( in this case, DA5 ) by the Quote Attribute’s value. In below case, the value of DA5 will be DA5_1 if the quote’s sales organization is selected as 0006.
  • Due to the definition of Quote Attribute’s onType and onAttribute property, a modeler can select the Sales Org ERP ID from the list as shown above.
Figure 54 - Example Showing Range Restriction Definition by Quote Attribute
Figure 54 - Example Showing Range Restriction Definition by Quote Attribute

Things to Note About:

The Quote attribute value will not be restricted by Knowledge base attribute. Generally, if the product model contains such attribute usage in Rule, user must be informed to assign the Quote Attribute (Example Sales Org) value before doing any configuration.

In order to define range restriction by Quote Attribute via Excel

    • Click the knowledge base and download
    • Click the advanced tab and choose one Quote Attribute and specify the number of values to be used
Figure 55 - Download the Knowledge Base with Quote Attribute in Attribute Range Sheet
Figure 55 - Download the Knowledge Base with Quote Attribute in Attribute Range Sheet
  • Select the ATTRIBUTES_RANGE sheet
    • The two new columns were added
      • 1: QUOTE_ATTRIBUTE.Sales Org ERP ID
        • 1 represent the index,
        • QUOTE_ATTRIBUTE represent the QUOTE_ATTRIBUTE sheet name
        • Sales Org ERP ID is the object name of KBTriggerRelation
      • 2: QUOTE_ATTRIBUTE.Sales Org ERP ID
Figure 56 - Example Showing Range Restriction by a Quote Attribute
Figure 56 - Example Showing Range Restriction by a Quote Attribute

In above example, the DA2 value will be restricted to have DA2_1 if Quote sales organization is 0006.

Things to Note About:

If the requirement is to restrict the range value not only be Quote Attribute but also by another attribute’s value, then this feature is not suitable for it. It needs to use the standard rule definition with Quote Attribute (See Also Section Defining Range Restriction Rule via GUI and Section Creating Range Restriction Via Excel )

6.2 BOM Explosion Rule

  • After defining the product BOM (See also Section Quote Attributes (KBTriggerRelation)) and the KB has linked with the respective BOM, the product modeler can specify the BOM explosion rules. There are three categories that the product modeler can specify the BOM Explosion rules.
    • Default BOM Explosion Rules
    • Attributes value based BOM Explosion
    • Attributes value and Quote Attribute values (Example: Sales Org) based explosion

    Same as range restriction, it needs to define the conditions by the value of one or more than one attributes and actions to insert the product into the parent product.

6.2.1  Default BOM Explosion

  • The BOM Explosion could be configured to execute once the main configurable product is added to the sales document (Quote). In order to do that, user needs to define KBTriggerRelation or Quote Attributes (See also Section Quote Attributes (KBTriggerRelation)) which will fetch the value from Product status. After that it needs to create rule with type BOM to define the rules to trigger the BOM Explosion based on main product’s status.
6.2.1.1 Defining the default BOM rule via UI

To define the default BOM rule via UI, so here is the step below for user to create.

Step 1: There should be Product BOM defined for those products that are to be inserted as sub line items together with main product (See also Section Product BOM). The knowledge base should also link with preferred BOM.

Step 2: There should be QuoteAttribute or KBTriggerRelation with search expression, SalesItem().isProduct.hasProductStatus.objectName[0]. See also (Section Quote Attributes (KBTriggerRelation)).

Figure 57 - Defining the KBTriggerRelation to fetch value from Product Status
Figure 57 - Defining the KBTriggerRelation to fetch value from Product Status

Step 3: Define the new trigger group with type BOM and add the KBTriggerRelation attribute created above.

Figure 58 - Defining the new Rule with Type BOM to Define Default BOM
Figure 58 - Defining the new Rule with Type BOM to Define Default BOM
Defining the new Rule with Type BOM to Define Default BOM

Step 4: Define the new triggers and assign the attribute value as Active and add the BOM Entry created in Step 1.

Figure 59 - Example Trigger to Explode the Default BOM Item
Figure 59 - Example Trigger to Explode the Default BOM Item
6.2.1.2  Defining the default BOM rule via excel

In order to define default BOM explosion rule, a product modeler can download the knowledge base with option as shown below.

Default BOM rule via excel

In Quote attribute sheet, new row with name Product Status can be found as it was created via UI in Section Quote Attributes (KBTriggerRelation). If it is not inside the list, it can be entered in QUOTE_ATTRIBUTE sheet as follow.

Figure 60 - Checking the QUOTE_ATTRIBUTE sheet
Figure 60 - Checking the QUOTE_ATTRIBUTE sheet
  • Define the product BOM
Figure 61 - Adding Products to PRODUCT BOM
Figure 61 - Adding Products to PRODUCT BOM
  • Go to the new rule sheet and add column called, QUOTE_ATTRIBUTE.ProductStatus where QUOTE_ATTRIBUTE is the sheet name and ProductStatus is the one that was defined in QUOTE_ATTRIBUTE sheet.
Figure 62 - Defining the Default BOM via Excel
Figure 62 - Defining the Default BOM via Excel

By that RULE_3, adding the main product will do the BOM explosion for those products listed in PRODUCT BOM sheet.

Figure 63 - Example of Default BOM
Figure 63 - Example of Default BOM

6.2.2  Defining the default BOM rule via excel

Below are the steps to define the attributes based BOM Explosion using the UI.

  • Create new KBTriggerGroup
  • Add Attributes which will be used to determine the BOM Explosion
  • Create Trigger and assign the attributes value and select the BOM Entries
Figure 64 - Example of Creating Attribute Value Based BOM Explosion via UI
Figure 64 - Example of Creating Attribute Value Based BOM Explosion via UI
Figure 64 - Example of Creating Attribute Value Based BOM Explosion via UI

To create the attributes based BOM explosion via Excel,

  • Download the knowledge base template with option BOM
  • Define the Product BOM if it has not been defined ( See Also Section Product BOM)
  • Define the BOM explosion rule in newly created sheet as shown below
Figure 65 - Example of Defining Attribute Value Based BOM Explosion Via Excel
Figure 65 - Example of Defining Attribute Value Based BOM Explosion Via Excel

6.2.3 Attributes value and Quote Attribute values based BOM Explosion

This is for the case where user wanted to do the BOM explosion based on some data point inside the Quote such as Sales Organization. Depending on Sales Org, product modeler can define the rule to explode certain product that is only available for the sales organization of the Quote. The steps to define this kind of BOM explosion rule is the mixture of steps mentioned in Section Default BOM Explosion and Section Attributes value based BOM Explosion.

In order to define the BOM Explosion rule based on Product Attributes and Quote Attributes,

  • Define new Trigger Group with type BOM
  • Add attributes (Knowledge Base Attributes and Quote Attribute/KBTriggerRelation that are to be used to perform the BOM Explosion based on that attribute value)
Figure 66 Adding Knowledge Base Attributes
Figure 66 Adding Knowledge Base Attributes
  • Define triggers and assign the attributes value and attach the BOM Entries
Figure 67 - Defining Conditions to Explode BOM Entries
Figure 67 - Defining Conditions to Explode BOM Entries
Figure 68 - BOM Entries to Explode Based on Knowledge Base Attribute and Quote Attribute
Figure 68 - BOM Entries to Explode Based on Knowledge Base Attribute and Quote Attribute
  • In order to define the BOM Explosion rule via the knowledge base excel,
    • Download the knowledge base excel template with option to include the new rule with type BOM
    • Select the new rule sheet and add or remove the knowledge base Attributes (Example, DA1, DA2, DA3 as shown below)
    • Add the QUOTE_ATTRIBUTE.[xxx] column (example QUOTE_ATTRIBUTE.Sales Org ERPID where [Sales Org ERPID] must be found in QUOTE_ATTRIBUTE sheet, see also Section Default BOM Explosion for creating new QUOTE_ATTRIBUTE via UI and Excel if the quote attribute was not found inside the QUOTE_ATTRIBUTE sheet. )
    • Add the condition values for knowledge base Attributes and Quote Attributes
    • Assign the BOM Entry ID
Figure 69 - Defining BOM Explosion Using Quote Attribute and Knowledge Base in Excel
Figure 69 - Defining BOM Explosion Using Quote Attribute and Knowledge Base in Excel

6.2.4 Understanding the concept of BOM Explosion Rule

The BOM Explosion rule is using the AND between the ATTRIBUTES inside a sheet and using UNION concept between different sheets if the BOM Entry ID is not same and INTERSECTION concept if BOM ENTRY ID is same. If the cell value is empty, it will be ignored and will not be used as part of a condition to explode the BOM Item. For example, let’s say we had the following definition for BOM.

Figure 70 - Example BOM Explosion Definition
Figure 70 - Example BOM Explosion Definition
  • Product A1 will be exploded when DA1 is DA1_1 and DA2 is DA2_1 and DA3 is DA3_1 and Quote’s Sales Org ERP ID is 0006.
  • Product A5 will be exploded when DA2 value is DA2_5 and DA2 value is DA3_5 and Sales Org of Quote is having 0007.
  • Product A6 will be exploded when DA2 value is DA2_5.
  • Product A5 and Product A6 will be exploded when DA2 is DA2_5 and DA3 is DA3_5 and Quote’s Sales Org is 0007. It is because, row 13 is a valid condition and row 14 is also a valid condition as in row 14, the empty cells are ignored and will not be part of condition thus in row 14, only DA2 will be considered to decide if product should be added or not.
Figure 71 - Example of BOM Explosion with Empty Attribute Value in a Trigger Rule
Figure 71 - Example of BOM Explosion with Empty Attribute Value in a Trigger Rule

Things to Note About:

In BOM Explosion, AND operator is used between the attributes having value and empty value will be ignored and will not be part of condition to decide to inject product or not. If there are same products returned from different rule group and each having the same position and quantity, it will be exploded once due to INTERSECTION concept. If there are same products returned from different rule group and each having the different position or quantity, it will exploded twice due to UNION concept.

6.3 Conditional Rule (Conditional Triggers)

Conditional Triggers are rules that are fired once the condition is found to be true. The conditional triggers are defined per Product-Knowledgebase. The different types of the conditional triggers are:

  1. Trigger Assign DA Value
  2. Trigger Assign DA Default Value
  3. Trigger Copy Attribute Values
  4. Triger Change Dynamic Attribute (DA) Meta Attribute
  5. Trigger Assign Business Type
  6. Trigger Product Recommendation
  7. Validation Trigger

The triggers are part of the MSP Configuration engine and hence mostly work on/in the configuration of a line item.

A common use case is to set one DA (Dynamic Attribute) value based on the value of another or change the readability, visibility of an attribute based on the value of another DA. This can be achieved by trigger assign DA Value and default value or change DA meta attribute value. Where meta attributes control the visibility, editability or mandatory of an attribute. Another use case is in recommendation where recommendation trigger come to use to suggest to user additional products that can be sold as up/cross selling potential.

The sequence of execution of triggers is controlled by the group and next by the order of trigger within the trigger group.

Calculations:

Calculations are used to calculate new information during the configuration process flow. Defined as arithmetic equations/ formulas these calculations make the bulk of costing estimates based on user entered data and calculation of other dependent parameters.

For example: Based on the metal length and width a simple calculation can find its area. This calculated information can next be used in price engine to get the metal cost* (*Note that in such a case getting cost value is the responsibility of price engine, whereas getting area calculated is the responsibility of Calculation engine).

Calculations are defined on the Product Knowledgebase and calculate the values of a dynamic attribute. One can make use simple BODMAS principle and combine it with various arithmetic functions to achieve simple to complex estimation work.

6.3.1 Conditional Triggers Definition via GUI

Conditional triggers are part of a product knowledgebase and are defined under the triggers.

To create a conditional trigger, select the trigger group type: Conditional.

6.3.1.1  Trigger Assign DA (Dynamic Attribute) Value

Use this trigger if you want to assign a value to a DA that cannot be changed by the user. The value assigned is also shown as read-only.

The value becomes system assigned.

Steps to setup the trigger:
1. Create the required Dynamic Attribute in the system.

Under Model > Attributes Management > Create New Attribute / Existing Attribute

2. After creating Dynamic Attribute, create a new product / or use an existing one.

Under Products > Products > Create a New Product / Select Existing Product

3. Create New Knowledge Base / Existing Knowledge
Open the individual product > under Knowledge Base > Create a Knowledge Base/Existing Knowledge Base for the product.

4. Selects the dynamic attributes required.

5. Creates a Group, Sub Group. Then select the attributes into the sub group.

The purpose of the sub group is to group the attributes when displaying them on the configurator page.

Example:

6. Go to Triggers Tab> Create New Trigger > create a trigger group: type conditional, later to define the condition and the action.

7. Create condition(s) and save. One can create more than one condition, the trigger executes the action when all the conditions are met (that is true):

  • Name – A name represent the condition.
  • Search Expression – The search expression can be used to find the value of a Dynamic Attribute (DA) / value of attribute (URI)
      • SalesItem().getDAValue(‘DDA’)[0]-> To get the value of a DA.
      • SalesItem().getDAUri(‘DDA’)[0] -> to get the URI of a DA
  • Operator – The supported compare operator
      • Equal
      • Not Equal
      • GreaterThanOrEqualTo
      • GreaterThan
      • LessThan
      • LessThanOrEqualTo
      • IN
      • NotIN
      • Contains
      • NotContains
  • Condition Value – The value to compare with.
  • Create Action and save. (Only a set of action)
    • Actions – The type of trigger. Select Trigger Assign DA Value.
    • Attribute – The Trigger Assign Value required 2 attributes
      • toSearchExpression – the target attribute to be assigned the value. The target attribute should be the starting object (the sales item which triggering the trigger)
      • Example: Create the trigger on the children if wanted to get a value from the parent and assign to the children. Similarly, create the trigger on the parent if wanted to get a value from the children and assign to the parent.
      • toValue – the literal value to be assigned OR
      • toSearchExpressionValue – the search expression to get a value to be assigned. System selects the ‘toValue’ if ‘toValue’ and ‘toSearchExpressionValue’ are defined together in the action list.
6.3.1.1.1  Trigger Assign DA Default Value

8. Go to Knowledge Base Snapshots, create a snapshot so that the latest settings are applied. Create a new Knowledge Base Snapshots every time after updated the trigger.

The trigger can be tested:

Step 1: Go to Quote and create a new quotation.

Step 2: Add a line Item by choosing the product with trigger configured.

Step 3: Clicks on the line item ID to open the configurator page

Step 4: Fill up the DA, the trigger will be fired if the condition is met.

6.3.1.2  Trigger Assign DA Default Value

The trigger assigns the value of a DA if the condition/s are true, however, unlike Trigger Assign Value, the assigned value can be changed by the user. The value assigned by the trigger is no read only and hence editable. However, if the user removes (Deletes) the value assigned by him or her, the default value (that is the trigger assigned value) is applied again.

Steps to configure:

The steps of configuration for Trigger Assign DA Default Value are same as Trigger Assign DA Value. The only difference is Trigger Assign DA Default Value is selected at step Creation of Action.

6.3.1.3 Trigger Change DA Meta Attribute

This trigger changes DA’s meta attribute value. Using this trigger one can control if a DA is hidden, read only or mandatory. The trigger executes if all its conditions turn out to be true.

Steps to configure:
1. Create the required Dynamic Attributes in the Model.
2. Create a product in Products/ or use an existing one.
3.Creates a Group, Sub Group. Then select the attributes into the sub group.
4. Go to Triggers, create a trigger to define the condition and the action.
5. Create a condition(s) and save it.

  • Name – A name represent the condition.
  • Search Expression – The search expression to find the value of a DA / value of attribute (URI)
  • Operator – The compare operator
  • Condition Value – The value to compare with.

6. Create an Action and save it. (You can only have a set of action only)

  • Actions – The type of trigger. In this case, the Trigger Change DA Meta Attribute should be selected.
  • Attribute – This trigger requires 3 attributes in action part
    • fromSearchExpression
      • Eg: SalesItem().getDAValue(‘DA_Name_Custom’)[0]
    •  fromSearchExpression
      • Eg: SalesItem()
    • toAttribute – The target attribute
      • Example – http://www.inmindcloud.com/application/schema.owl#objectName
    • toSearchExpression
      • Eg: SalesItem()
    •  Value – The value for the attribute keys
  • http://www.inmindcloud.com/application/schema.owl#dynamicAttributeHidden
  • http://www.inmindcloud.com/application/schema.owl#dynamicAttributeMandatory
  • http://www.inmindcloud.com/application/schema.owl#dynamicAttributeReadOnly
    • toBooleanValue – the Boolean value to be assigned (true | false).
  • Value – The value for the attribute keys
6.3.1.4 Trigger Copy Attribute Value

This trigger copies the value of a DA from configuration, config item, of a sales item and makes it available on the sales item level. It can be used to map assigned/calculated/system derived values from configuration (config item) to sales item level for example: change sales item name based on a DA value or change sales item quantity based on a DA value.

Steps to configure

1. Create the required Dynamic Attribute in the Model
2. Create a product in Products/ or use an existing product.
3. Creates a Group and Sub Group. Then select the attributes into the sub group.

4. Go to Triggers, create a trigger to define the condition and the action.
5. Create the condition(s) and save it.

  • Name
  • Search Expression
  • Operator
  • Condition Value

6. Create the Action and save it.

  • Actions – The type of trigger. In this case, the Trigger Copy Attribute Values should be selected.
  • Attribute – This required 3 attributes
  • fromSearchExpression

Eg: SalesItem().getDAValue(‘DA_Name_Custom’)[0]

  • toSearchExpression

Eg: SalesItem()

  • toAttribute – The target attribute

Example

http://www.inmindcloud.com/application/schema.owl#objectName

 

  • Value – The value for the attribute keys
6.3.1.5 Trigger Product Recommendation

This trigger helps provide up/cross selling insights in MSP. Using this a specific product can be recommended for a given line item. The recommended products can be next added as sub line item.

Steps to configure:
1. Create a product in Products/or use existing products.
2. Creates a Group and Sub Group. Then select the required attributes into the sub group.
3. Go to Triggers, create a true condition(s) and save it.

    • Name – A name to represent the condition.
    • Search Expression – 1
    • Operator – equal to
    • Condition Value – 1

* The above condition is an always true condition.

4. Creates Action and save it.

    • Actions – The type of trigger. In this case, the Trigger Product Recommendation should be selected.
    • Attribute – It requires only 1 attribute in its action
      • ERPID – The ERP ID of the product.
    •  Value – The value for the attribute key. Use ‘,’ as separator for multiple values.
      • Eg: EASY400A,803

You can test the trigger by adding/updating/deleting a product which is configured with the Trigger Product Recommendation into the line item. The system sends a product recommendation insight when the product is added into the line item as main / sub item.

Example

The product recommendation insight notification is shown when a product (which is configured with Trigger Product Recommendation) is added as line item into the quote.

A click on the insight opens the Product(s) Recommendation panel, showing all recommended products.

User can act on these recommendations and can add the additional products into the quote. Note that as the recommendations are targeted to a product/sales item the recommended (and system added products) are created as sub line items for that product/sales item.

6.3.1.6 Validation Trigger

This trigger helps to validate the configuration attributes of the sales item based on the conditions defined in the knowledgebase. It also sends the pre-defined validation message to the user as notification/insight.

Steps to configure:
1. Create a product in Products/ or use existing products

2. Creates a Group, Sub Group. Then select the attributes required into the sub group.
3. Go to Triggers, create a trigger to define the condition and the action.
4. Create the condition(s) and save it.

  • Name – A name represent the condition.
  • Search Expression – The search expression to find the value of a DA / value of attribute (URI)
  • Operator – The compare operator
  • Condition Value – The value to compare with

5. Create Action and save it.

  • Actions – The type of trigger. In this case, the Trigger Validation should be selected.
  • Attribute – It requires 2 attributes in actions
    • messageType – Type of message (Information (default) | Warning |Error).
    • validationMessage – The label key in the message.properties.
      • Example: trigger.validation.general.max.threshold = {0}:{1}->{2}. Value exceed the maximum threshold! where

{0} = Item’s position,

{1} = The name of the salesItem,

{2} = The name of the trigger

*The parameters {0}, {1}, {2} are fixed in the code to show the item position, sales item name and the trigger name to the user.

  • Value – The value for the attribute key.

This trigger will be triggered after saving the line items.

 

*The label key will be displayed if it is not found in the message.properties.

*The message.properties files is in the CMIS localization-> ui-customization folder.

6.3.1.7   Trigger Assign Business Type

This is a legacy trigger and is deprecated from 1902 release. Its purpose is to assigns a business type to the config item of a sales item. Note that the assigned business type needs to be a sun type of Schema.KnowledgeBase

Steps to configure
1. Create a product in Products/ or use existing products
2. Creates a knowledge base from product Knowledge Base.
3. Go to Triggers, create a trigger to define the condition and the action.
4. Create condition(s) and save it.

  • Name – A name represents the condition.
  • Search Expression – SalesItem().salesItemIncludedBy.isProduct.includesKnowledgeBase.types[0]
  • Operator – IN
  • Condition Value – The knowledge base URI to compare with.

http://www.inmindcloud.com/application/products/products-schema.owl#MetalStamping-KB

5. Create Action and save it.

  • Actions – The type of trigger. In this case, the Trigger Assign Business Type should be selected.
  • Attribute – businessType
  • Value – The value for the attribute key.

http://www.inmindcloud.com/application/products/products-schema-knowledgebase.owl#PowderCoatingAndMaskingSubMaterial-KB

6. Create a snapshot at Knowledge Base Snapshots.

The attributes of the parent product will be inherited to the children product after the business type assigned to the children product.

6.3.2  Conditional Triggers Definition via Excel

A product modeler can define the conditional triggers using the rule sheet inside knowledge base excel. There are currently two features that can be used to define the conditional rules with excel.

  • Standard conditional rule definition
  • Simplified conditional rule definition
6.3.2.1 Standard Conditional Rule Definition

The standard conditional rule is mainly for advanced user where he/she had the knowledge about IMCScript syntax (See also IMCScript Guide documentation) as it needs to write the IMCScript syntax in Conditions and Actions properties.

In order to download the standard conditional rule,

  • Click the knowledge base and download with an option (Conditional) and specify the number of conditional rules to include the workbook.

The new sheet starting with name RULE_ will be generated and a product modeler can write the conditions and action part. Based on the action type selected, the corresponding action cells will be highlighted for the modeler to specify the actions.

The details of which action value can be entered depending on action type can be found in sheet, _ConditionalTriggersMasterData.

The details of which value can be put in condition and action arguments, can be found in Section Trigger Assign DA Value. The syntax of IMCScript to put as part of left or right condition and action argument values can be found in IMCScript Guide.

6.3.2.2  Simplified Conditional Rule Definition

The purpose of simplified conditional rule is to support for the simple case where a product modeler wanted to define the simple conditional like if [DA1] value EQUAL TO [Value 1] then assign [DA2] value to [Value 2]. This feature is only available via excel upload.

In order to download the simplified conditional rule, here is some information that the user can create.

  • Click the knowledge base and download with an option (Conditional Simple – Using direct names and values)
  • Select the Attribute name and Attribute Value as condition
  • Select the Action Type. The following actions will be available.
  • ASSIGN_DA_VALUE
  • ASSIGN_DA_DEFAULT_VALUE
  • HIDE_ATTRIBUTE
  • SHOW_ATTRIBUTE
  • MARK_READ_ONLY
  • MARK_MANDATORY
  • MARK_PRICING_RELEVANT
  • UNMARK_READ_ONLY
  • UNMARK_MANDATORY
  • UNMARK_PRICING_RELEVANT
  • Depending on the Action Type, a product modeler can select the TO ATTRIBUTE NAME and TO ATTRIBUTE LITERAL VALUE.
Figure 72 - Example of Simplified Conditional Trigger Sheet
Figure 72 - Example of Simplified Conditional Trigger Sheet
  • Note: Please note that the operator EQUAL is only supported in Simple Conditional Rule and also the assignment of DA value must be done with range value. It is not supported to assign some DA value coming from another DA. In order to support this case, it is needed to use the Standard Conditional Rule sheet user a product model has rich features of IMCScript capability.

6.4 Scripting Feature

MSP has its own graph transversal language called IMCScript which can be used as an alternative feature of conditional triggers defined within knowledge base (See also Section Conditional Rule (Conditional Triggers) ). The details of supported features can be found in IMCScript Guide.

7  Calculations

Calculations are simple arithmetic formulas that can be used to compute new information in configuration engine. Defined as arithmetic equations/ formulas these calculations draw new datapoints based on the entered data. Since 1902 IMCScript offers a more powerful tool set to set up custom calculations in the model. Though the calculations are knowledge base specific where as IMCScripts are system specific. Please also refer to IMCScript guide for more information.

For example: Based on the metal length and width a simple calculation can find its area. This calculated information can next be used in price engine to get the metal cost*.

Calculations are also defined on the Product Knowledgebase and calculate the values of a dynamic attribute. One can make use simple BODMAS principle and combine it with various arithmetic functions to achieve simple to complex estimation work.

The arithmetic calculation allows users to define Calculations for Dynamic Attributes defined in Knowledge Base. Calculations are supported to use Dynamic Data Attribute (DDA) as well as Dynamic Symbolic Attribute (DSA) of Numeric type. However, assignment can only be done on numeric DDA.

* Note that in such a case getting cost value is responsibility of price engine, whereas getting area calculated is responsibility of Calculation engine.

7.1  Calculations

1. Define a required Dynamic Attribute in the Model of data type Numeric
2. Go to Product -> Knowledge Base.
3. Add the DAs to the Knowledge Base.
4. Create a Group, Sub Group and select the attributes into the sub group.
5. Go to Calculation, create a new calculation, where

Name – List the DDA to calculate and define a calculation for.

Arithmetic Expression – Arithmetic Expression using one or more Das, where DA must be wrapped with $() and of numeric type. (See image below for example). Please refers Appendix Calculations for all the supported calculation libraries.

6. Create a new KB Snapshot.

7.2 Step to Test

1. Open latest Snapshot or Go to Quote and add a new line Item by choosing the product with calculation defined. Go to Line item -> Configurator page.

2. Fill in the DAs with numeric value. DA calculated by system is Read Only (Note that in case of using Snapshot, even calculated values will become default values once saved).

7.3 Features

  • Contains several Checks and Validationse. Cyclic Dependency, Cast exception, Divide by Zero exceptions, Unacceptable syntax check etc.
  • There are few in built functions, provided by Jexl library (i.e substring on String, size () on various objects).
  • Apart from supporting basic mathematical operators (+, -, *, /, %) and built-in Jexl functions, Library has been enriched with several Constants and Functions.
  • Nested function calls are supported. i.e. “min(max(5,2, pow(2,3)),20,30)”.
  • All the functions have been analyzed and optimized where needed, to perform under 0.1 ms* of average duration.
  • Unconventional to Java mathematical library, Dynamic variable lengths have been supported for necessary custom functions i.e. you can find GCD, LCM or AVG for multiple variables using single function i.e gcd (12,24,36,40).

* Performance has been measured under Core-i5 Processor, 8GB Ram, Windows 10 Pro, 64-bit OS and average usage of machine after startup. The parameters provided to functions are relatively as short with array up to length 5, and relatively smaller integers and strings. Hence actual performance may differ slightly, on case by case basis.

8 Downloading All Attributes of Product

  • A product modeler can download all the attributes used in configurable product via the Model management as follow in order to inspect the range value or properties of attribute as well as define the localization of attribute and its range value itself.There are three main options
    • Empty
      • Choose this option if product modeler wanted to define new attribute
    • Selected Attributes
      • Choose this option if product modeler wanted to check and update the range value and localization of range value for selected attributes. This will have better performance than downloading all attributes.
    • All Attributes
      • Choose this option to download all attributes

    A product modeler can also choose more options to further reduce the number of data to download for better performance.

9 FAQ

9.1 How to upload as new knowledge base

9.1.1 How to upload as new knowledge base

  • Select an existing KnowledgeBase and click Download Icon
  • Click Download button to download the existing knowledge base selected.

9.1.2  Step 2: Remove the ID value in sheet

  • Removed the ID value in the following sheet by unhiding all columns in each sheet
    • PRODUCT
    • PRODUCT BOM
    • ATTRIBUTES
    • ATTRIBUTE_RANGE
    • GROUP
  • Change the name of new product or keep it as it is if a product modeler wanted to create the product with same name.

9.1.3  Step 3: Open the new product in System B or same system

  • Search the product in System B using Name or ERP ID
  • If it is not found, create new Product using UI (See Also Section Product Creation)
  • Make sure that the name or ERP ID of the product is same as the one defined in PRODUCT sheet for the row marking as MAIN PRODUCT
  • Click Confirm to upload the knowledge downloading from other system or same system as new product model.

9.2 How to make the Product BOM available for BOM Explosion rule

A product modeler has created the Product BOM. However, the products inside the Product BOM were not listed to create the BOM trigger rule. The reason is mainly because of the knowledgebase has not linked with any BOM.

The knowledgebase must link with BOM as shown below. Only when knowledge base has linkage with BOM, a product modeler can see the product list during the BOM Explosion rule definition.

9.3 How to define the sales org-based range restriction

This can be done with the feature mentioned in Section Case 6 How to define range restriction based on single Quote Attribute. However, a product modeler can also make use of excel to define the range restriction of some DA value only by Sales Organization or Quote Attribute.

  • First of all, the KBTriggerRelation or QuoteAttribute with SearchExpression, Quote().hasSalesOrg.objectERPId[0] ( See also Section Quote Attributes (KBTriggerRelation) )
  • Download the knowledge base with Sales Org ERP ID in Advanced Tab and specify the number of sales organizations to be used to restrict the DA value.
  • Select the ATTRIBUTE_RANGE sheet where a product modeler can assign the sales organization beside each range value as shown below.
  • Upload the excel and confirm

9.4 How to define the sales org-based range restriction

  • The knowledge base specific range restriction basically means that some other DA are not restricting the value of the DA but the knowledge base itself. For example, we had attribute called DA1 and its range values are 1,2,3,4,5.  However, we wanted to restrict DA1 to be 1,2 if it is used in Product A and DA1 to be 3,4,5 if that DA1 is used in Product B. In order to do that, a product can define the range restriction rule as mentioned in Section Understanding the concept of Range Restriction.In order to define the knowledge base specific range restriction,
    • Download the knowledge base with Range (White List)
    • Add or Remove the Attribute that a product modeler wanted to restrict the range value by Knowledge Base

Upload the excel and new rule was automatically created with a name called Knowledge Base Specific Range

10 Appendix

10.1   Calculations

10.1.1  Constant Library

All the Function defined here, can be used by ‘Math.’ Prefix. Example: Math.PIE, Math.E, Math.EQ etc.

10.1.1.1 Standard Constants

1. PIE π = 3.14159265358979323846, ratio of circumference to its diameter.
2. E e = 2.7182818284590452354, the base of natural algorithms.

10.1.1.2  Conditional Constants

1. EQ
It defines Equivalence relation (“==”) between 2 operands.

2. NEQ
It defines Not-equivalence relation (“!=”) between 2 operands.

3. LT
It defines Less than relation (“<”) between 2 operands.

4. LTE
Defines Less than and equals to relation (“<=”) between 2 operands.

5. GT
Defines Greater than relation (“>”) between 2 operands.

6. GTE
Defines Greater than and equals to relations (“>=”) between 2 operands.

10.1.1.3 Directional Constants

1. ASC
Defines Ascending direction for any operation (Depends on context of use-case).

2.DESC
Defines Descending direction for any operation (Depends on context of use-case).

10.1.2 Function Library

10.1.2.1 Standard Functions
10.1.2.1.1  Summation

sum (Number… nVals) : Double

Finds summation of all values.

Examples:

sum ([10,20,30]) > 60.0

sum (5,15,25,100) > 145.0

10.1.2.1.2 Multiplication

mul (Number… nVals) : Double

Finds multiplication of all values.

Examples:

mul ([1,2,3]) > 6.0

mul (2,3,5,1) > 30.0

10.1.2.1.3 Absolute

abs (Number n) : Double

Gives absolute value (also called – mode) of the number.

Examples:

Abs (-7) > 7.0

10.1.2.1.4 Count

count (Number… nVals) : Double

Counts length of arguments/array.

Note: This is convenience method, which is similar to Jexl library’s default size method.

Examples:

count ([4,5]) > 2

count(1,2,3,4,5) > 5

10.1.2.1.5 Maximum

max (Number… nVals) : Double

Returns greatest number from the provided numbers.

Examples:

max (4,11) > 11.0

max (1,2,1,7,9) > 9.0

10.1.2.1.6 Average

avg (Number… nVals) : Double

Finds average of the provided numbers.

Note: This function is same as Mean function under Statistic domain.

Examples:

avg (4,7) > 5.5

avg (6,4.5,11.5,2) > 6.0

10.1.2.1.7 Greatest Common Divisor (GCD)

gcd (Number… nVals) : Double

Returns Greatest Common Divisor (GCD) of the provided numbers.

Examples:

gcd (24,18) > 6.0

gcd (50,24,18) > 2.0

10.1.2.1.8 Least Common Multiplier (LCM)

lcm(Number… nVals) : Double

Returns Least Common Multiplier (LCM) of the provided numbers.

Examples:

lcm (16,4) > 16.0

lcm (32,12,16,2) > 96.0

10.1.2.2 Convergence Functions
10.1.2.2.1 Convergence Functions

round (Number n, Number decimal) : Double

Rounds the number to specified decimal digits.

Note: In absence of second argument, default decimal digits will be considered 2.

Examples:

round (3.1345964,4) > 3.1346

round (3.1345964) > 3.13

10.1.2.2.2 Ceil

ceil (Number n) : Double

Finds ceiling value for a number.

Examples:

ceil (7.345) > 8.0

ceil (-7.345) > -7.0

10.1.2.2.3 Floor

floor (Number n) : Double

Finds floor value for a number.

 Examples:

floor (7.345) > 7.0

floor (-7.345) > -8.0

10.1.2.3 Statistical Functions
10.1.2.3.1 Mean

mean (Number… nVals) : Double

Finds mean of the provided numbers.

Note: This function is same as Average function given under general functions.

Examples:

mean (4,7) > 5.5

mean (6,4.5,11.5,2) > 6.0

10.1.2.3.2 Median

median (Number… nVals) : Double

Finds median of the provided numbers.

Examples:

median (3,2,7,1,9,2,10) > 3.0

median (1,2,3,4,5,6) > 3.5

10.1.2.3.3 Mode

mode (Number… nVals) : Double

Finds mode of the provided numbers.

Note: This method doesn’t guarantee any order of outcomes (modes).

Examples:

mode (8,2,7,2,9,2,10) > [2.0]

mode (1,3,3,4,2,5,2) > [3.0,2.0]

mode (1,2,3,4,5) >  []

mode (1,1,2,2,3,3) > [1.0,2.0,3.0]

10.1.2.4   Exponential Functions
10.1.2.4.1 Power

mode (Number… nVals) : Double

Finds mode of the provided numbers.

Note: This method doesn’t guarantee any order of outcomes (modes).

Examples:

mode (8,2,7,2,9,2,10) > [2.0]

mode (1,3,3,4,2,5,2) > [3.0,2.0]

mode (1,2,3,4,5) >  []

mode (1,1,2,2,3,3) > [1.0,2.0,3.0]

10.1.2.4.2 Root

root (Number n, Number root) : Double

Finds nth root of the number. If multiple roots exist, function returns only positive root of it.

Examples:

root (16,4) >  2.0

root (3,2) > 1.7320508075688772

10.1.2.4.3 Square

sq (Number n) : Double

Finds square of a number.

Note: This is special case of Power method with exponent 2, hence it’s same as calling pow(n,2).

 Examples:

sq (3) > 9.0

10.1.2.4.4 Cube

cube (Number n) : Double

Returns cube of a number.

Note: This is special case of Power method with exponent 3, hence it’s same as calling pow(n,3).

Examples:

cube (3) > 27.0

10.1.2.4.5 Square-Root

sqrt (Number n) : Double

Returns positive square root of a number.

Note: This is special case of Root method with root 2, hence it’s same as calling root(n,2).

 Examples:

sqrt (25) > 5.0

10.1.2.4.6 Cube-Root

sqrt (Number n) : Double

Returns positive square root of a number.

Note: This is special case of Root method with root 2, hence it’s same as calling root(n,2).

 Examples:

sqrt (25) > 5.0

10.1.2.5 Trigonometric Functions
10.1.2.5.1 Degree to Radian

rad (Number degree) : Double

Converts degree to radian and returns it.

Examples:

rad (50) > 0.8726646259971648

10.1.2.5.2 Radian to Degree

deg (Number degree) : Double

Converts radian to degree and returns it.

Examples:

deg (0.8726646259971648) > 50

10.1.2.5.3 Sine

sin (Number radian) : Double

Returns sine value of a radian.

Examples:

sin (0) > 0.0

sin (rad(45)) > 0.7071067811865475

10.1.2.5.4 Cosine

sin (Number radian) : Double

Returns sine value of a radian.

Examples:

sin (0) > 0.0

sin (rad(45)) > 0.7071067811865475

10.1.2.5.5 Tangent

sin (Number radian) : Double

Returns cosine value of a radian.

Examples:

tan (Number radian) : Double

Returns tangent value of a radian.

Examples:

tan (0) > 0.0

tan (rad(45)) > 0.9999999999999999

10.1.2.5.6 Arc-Sine

asin (Number radian) : Double

Returns arc-sine value of a number.

Note: arc-sin is nothing but inverse of Sine function, hence practically it returns radian for the provided value.

Examples:

asin (0.70) > 0.775397496610753

asin (sin(1)) > 1.0

10.1.2.5.7 Arc-Cosine

acos (Number radian) : Double

Returns arc-cosine value of a number.

Note: arc-cosine is nothing but inverse of Cosine function, hence practically it returns radian for the provided value.

 Examples:

acos (0.70) > 0.7953988301841436

acos (cos(1)) > 1.0

10.1.2.5.8 Arc-Tangent

atan (Number radian) : Double

Returns arc-tangent value of a number.

Note: arc-tan is nothing but inverse of Tangent function, hence practically it returns radian for the provided value.

 Examples:

atan (0.70) > 0.6107259643892086

atan (tan(1)) > 1.0

10.1.2.6 Logarithmic Functions
10.1.2.6.1 Logarithm

log (Number number, Number base) : Double

Calculates and returns logarithmic value of a number using provided base.

 Note: In absence of second argument, default base will be considered e = 2.718281828459045, which is the base of natural algorithms.

 Examples:

log (100,10) > 2.0

log (100) > 4.605170185988092

10.1.2.6.2 Logarithm with base 10

deg (0.8726646259971648) à 50

log10 (Number number) : Double

Calculates and returns logarithmic value of a number using base 10.

Note: This is special case of Logarithm method with base 10, hence it’s same as calling log(n,10).

 Examples:

log10 (100) > 10

10.1.2.7  Casting Functions
10.1.2.7.1 To Integer

1. log10 (100) à 10

toInteger (String s, Integer default) : Integer

Converts provided String to Integer type. If any exception raises while execution of this function, i.e CastException, it will return the default value provided as a second argument.

2. i (String[] sArray, Integer default) : Integer

Converts provided String array to Integer type of array. If any exception raises while conversion of any of element, i.e CastException, it will return the default value provided as a second argument.

Note: In case of second argument is of Double type, it will consider its Integer part as a default value. See last example below.

 

Examples:

toInteger (“11.3”,5) à 11

toInteger (“11”,5) à 11

toInteger (“abc”,5) à 5

toInteger (“def”) à 0

toInteger (“abc”,5.5) à 5

toInteger ([“5”,”6”],5.5) à [5,6]

toInteger ([“7”,”a”],5.5) à 5.5

1.toInteger (Number n, Integer default) : Integer
Converts provided Number to Integer type. If any exception raises while execution of this function, i.e provided unacceptable numbers such as NaN /Infinity/-Infinity (which are not supported to be under Integer type in Java) or null, it will return the default value provided as a second argument.

Note: In case of second argument is of Integer type, it will convert it to Double and consider it as a default value. See last example below.

2.toInteger (Number[] nArray, Integer default) : Integer
Converts provided Number array to Integer type of array. If any exception raises while conversion of any of element, i.e provided unacceptable numbers such as NaN /Infinity/-Infinity (which are not supported to be under Integer type in Java) or null, it will return the default value provided as a second argument.

Note: In case of second argument is of Integer type, it will convert it to Double and consider it as a default value. See last example below.

Examples:

toInteger (31.3,5) à 31

toInteger (31,5) à 31

toInteger (NaN,0) à 0

toInteger (log(0),0) à 0 (Because log(0) is -Infinity)

toInteger ([8.5,3.6],5) à [8,6]

toInteger ([8.5,NaN],5) à [8,5]

10.1.2.7.2 To Double

1. toDouble (String s, Number default) : Double
Converts provided String to Double type. If any exception raises while execution of this function, i.e CastException, it will return the default value provided as a second argument.

Note: In case of second argument is of Integer type, it will convert it to Double and consider it as a default value. See last example below.

2. toDouble (String[] sArray, Number default) : Double
Converts provided String array to array of Double type. If any exception raises while conversion of any of element, i.e CastException, it will return the default value provided as a second argument.

Note: In case of second argument is of Integer type, it will convert it to Double and consider it as a default value. See last example below.

Examples:
toDouble (“11.3”,5.0) à 11.3
toDouble (“11”,5.0) à 11.0
toDouble (“abc”,5.0) à 5.0
toDouble (“abc”,5) à 5.0
toDouble ([“11”,”13”],5.0) > [11.0,13.0]
toDouble ([“11”,”b”],5.0) > [11.0,5.0]

3. toDouble (Number… nVals) : Double
Converts provided Numbers to Double types.
Examples:
toDouble (40) > 40.17
toDouble (51.87) > 51.87
toDouble (40,50) > [40.0,50.0]

10.1.2.7.3 To String

toString (Number nVals) : String

Converts provided Numbers to String types.

Examples:

toString (11) à “11.0”

toString (11.3,5.0) > [“11.3”,”5.0”]

10.1.2.8 Check Functions
10.1.2.8.1 Is Finite

isFinite (Number n) : Boolean

Checks if number is finite or not. It returns true if the argument is a finite value;

returns false otherwise (For NaN and Infinity arguments).

Examples:

isFinite (0.70) > true

isFinite (log(0)) > false

isFinite (NaN) > false

10.1.2.8.2 Is Not-A-Number

isNaN (Number n) : Boolean

Checks if number is NaN or not. It returns true if the argument is a NaN; returns false otherwise.

Examples:

isNaN (NaN) > true

isNaN (0.70) > false

isNaN (log(0)) > false

10.1.2.8.3 Is Null

isNull (Number n) : Boolean

Checks if argument is null or not. It returns true if the argument is a null; returns false otherwise.

Examples:

isNull (null) > true

isNull (log(0)) > false

isNull (NaN) > false

10.1.2.9 Conditional Functions
10.1.2.9.1 If

iff (Boolean condition, Number numberIfTrue, Number numberIfFalse) : Number

This is conditional function (Just like ternary operator), which returns value based on the outcome of conditional argument (First argument).

Examples:

iff (10<5,1,0) > 0

iff (round(sin(rad(45)))== round(cos(rad(45))),1,0) > 1

10.1.2.9.2 Filter If

filterIf (Number[] nArray, Constant condition, Number compareTo) : Number[]

This method filters array based on provided simple mathematical condition using last two arguments. Here the second argument is Conditional constants: Math.EQ, Math.NEQ, Math. LT, Math. LTE, Math.GT, Math.GTE. See Conditional Constants for more info on these constants._Conditional_Constants

Note: User can also use simple String instead of Mathematical constant to increase the readability of expression. i.e “>=” instead of Math.GTE; Also, providing incorrect value as a conditional argument will lead to empty array as an outcome.

Examples:

filterIf ([1,2,3,4,5,6,7,8,9,10], Math.GT, 5) > [6,7,8,9,10]

filterIf ([1,2,3,4,5,6,7,8,9,10], Math.LTE, 5) > [1,2,3,4,5]

filterIf ([1,2,3,4,5,6,7,8,9,10], “>=”, 8)

filterIf (Number[] nArray, Constant condition, Number compareTo) : Number[]

This method filters array based on provided simple mathematical condition using last two arguments. Here the second argument is Conditional constants: Math.EQ, Math.NEQ, Math. LT, Math. LTE, Math.GT, Math.GTE. See Conditional Constants for more info on these constants._Conditional_Constants

Note: User can also use simple String instead of Mathematical constant to increase the readability of expression. i.e “>=” instead of Math.GTE; Also, providing incorrect value as a conditional argument will lead to empty array as an outcome.

Examples:

filterIf ([1,2,3,4,5,6,7,8,9,10], Math.GT, 5) à [6,7,8,9,10]

filterIf ([1,2,3,4,5,6,7,8,9,10], Math.LTE, 5) à [1,2,3,4,5]

filterIf ([1,2,3,4,5,6,7,8,9,10], “>=”, 8) > [8,9,10]

10.1.2.9.3 Count If

countIf (Number[] nArray, Constant condition, Number compareTo) : Integer

This is a special method for convenience to call Count and Filter If at one go. Internally the method calls Filter If and Count recursively.

Note: Providing incorrect value as a conditional argument will lead to 0 value as an outcome.

Examples:

countIf ([1,2,3,4,5,6,7,8,9,10], Math.GT, 5) > 5

10.1.2.10 Special Function
10.1.2.10.1 Sort

sort (Number[] nArray, Constant direction) : Boolean

This method returns sorted array for the provided one (nArray – First argument), with given direction (direction – Second argument). Here second argument: direction can be one of the Directional constants: Math.ASC or Math.DESC;

It’s good to know how the special cases like +Infinity, -Infinity and NaN will be sorted by this method; Above ‘Number line’ represents it in a simple way, where place of NaN is adapted from standard Java comparator convention.

 

Note: In absence of which Math.ASC is considered as a default value of it. Providing incorrect value as a directional argument will lead to unsorted array as an outcome.

 Examples:

sort ([4,3,6,9,5], ASC) > [3,4,5,6,9]

sort ([4,3,6,9,5], DESC) > [9,6,5,4,3]

sort ([10,NaN,-log(0),log(0)]) > [-Infinity,10,+Infinity,NaN]

10.1.2.10.2 Distinct

dist (Number[] nArray) : Number[]

Returns array of distinct elements for given array.

Note: This function does not guarantee to maintain any specific order of the sequence.

 Examples:

dist ([5,3,4,4,5]) > [3,4,5]

dist ([10,2,3,10,2], DESC) > [2,3,10]

Concatenate each respective element of both the array and returns as a concatenated array.

Note: Any null value in array will be considered as an empty string. The length of returned array is maximum length of both arrays provided in arguments.

10.1.2.10.3 Concatenate

dist ([10,2,3,10,2], DESC) à [2,3,10]

1.concat (String[] sArray1, String[] sArray2) : String[]

Concatenate each respective element of both the array and returns as a concatenated array.
Note: Any null value in array will be considered as an empty string. The length of returned array is maximum length of both arrays provided in arguments.

Examples:
concat ([“a”,”b”,”c”], [“1”,”2”,null]) à [“a1”,”b2”,”c”]
concat ([“a”,”b”,”c”], [“1”,”2”]) > [“a1”,”b2”,”c”]
concat ([“a”,”b”], [“1”,”2”,”3”]) > [“a1”,”b2”,”3”]

2. concat (String… sArgs) : String

Concatenate one or more string arguments and returns concatenated String.
Note: Any null argument will be considered as an empty string
 Examples:
concat (“a”,”b”,”c”) > “abc”
concat (“a”,”b”,null) > “ab”

10.1.2.10.4 Mapper

1. map (String[] sArray, Map<String,String> sMap) : String[]

Returns updated array by replacing each element of provided array (sArray) with mapped string, provided by map (sMap).
Note: Any missing keys in map will leave the element untouched. See last example

Examples:
map ([“a”,”b”,”c”], {“a”:”1”,”b”:”2”,”c”:”3”}) à [“1”,” 2”,”3”]
map ([“a”,”b”,”c”,”d”], {“a”:”1”,”b”:”2”,”c”:”3”}) à [“1”,” 2”,”3”,”d”]

2. map (Number[] nArray, Map< Number, Number > nMap) : Double[]

Returns updated array of value type Double, by replacing each element of provided array (nArray) with mapped value, provided by map (nMap).
Note: Any missing keys in map will leave the element untouched. See last example.

Examples:
map ([1,2,3], {1:11,2:22,3:33}) > [11.0,22.0,33.0]
map ([1,2,3], {1.0:11,2:22,3:33.0}) > [11.0,22.0,33.0]
map ([1,2,3,4], {1:11,2:22,3:33}) > [11.0,22.0,33.0,4.0]

10.1.2.10.5 Search Expression

se (String expression).as<<TYPE>>( TYPE defaultObj) : TYPE

This is special function which provides traversing capability between different level of objects (i.e parent SalesItem, children of salesItem, etc). Please refer to SearchExpression documentation for the syntax of expression. However, user is strongly encouraged, to go through important note, given below, before using this function.

This method is combination of 2 parts as shown in syntax: First one is se, which accepts expression (starting with “ConfigItem” always) of type String, whereas Second one as<<TYPE>> is kept explicitly to get expected return type of the result coming from se. Here <<TYPE>> can be replaced by different return types as shown here: Number (Numeric), String (String), SArray (String array) or NArray (Numeric array). The argument in this second part is defaultObject which can be used in case SearchExpression is provided null, or if any exception happens while execution in run time. The examples shown at the end of this will give user better clarity of the overall syntax.

This function has been added as an experimental basis to extend the traversing capability of Calculations. However, it doesn’t guarantee on performance, as it highly dependent on the nested level of traversals. Hence, user is highly encouraged to find alternate options first (By creating additional Das, and/or using Triggers). Furthermore, due to dynamic (run time) nature of this function, uncertainty of return type as well as being black-box for Calculations module, several validation features including cyclic dependency, need to be skipped, at the time of creation of calculations; User should take a note of which.

Examples:

se (“ConfigItem.configItemIncludedBy.children().getDAValue(‘DA1’)”).asNArray([])

>[10,20,30] (Assumed that DA1 is of type Numeric)

se (“ConfigItem.configItemIncludedBy.objectName”).asString(‘No_Name’)

> “SalesItem1”

10.1.3 Additional Note

  • User should keep special cases in mind for above functions, i.e NaN, +Infinity, -Infinity, null etc; which may return the answers NaN/+Infinity/-Infinity/Other (Case by case basis).
  • Providing one or more null argument(s) will result in NaN (Or Default argument, if any) in most of the cases. However, we highly discourage user to provide NaN and/or null in arguments to avoid unexpected results.
  • All the function/constant names are case-sensitive as well as signature-sensitive, hence user is encouraged to follow the syntax and signature accordingly.
  • Functions with single parameter of variable argument (i.e Double…, String…) type has flexibility to accept any of this: array or variable arguments. i.e “max (3,4,5)” will return same as “max ([3,4,5])”.
  • Calculations are limited under the scope of same KB for now, hence user cannot access DAs from the KB of another product or from parent/child attribute of SI; However, this requirement can be fulfilled by using Search Expressions as an entry point to such things.
  • User should try to avoid using SearchExpression method as far as possible, if not, he must keep read the notes mentioned under it, before using it.
  • SE note: type v/s types keywords has been simplified under SE. Previously there was difference between them, whereas from now onwards only type keyword exists, which will return collection of all types of object. This has been done to keep the syntax more generic while using it for different use cases. However, it’s still possible to get single type of object using first keyword (See table). At the time of migration, there is a need to change the syntax of such legacy SEs accordingly.

 

Old WayNew Way
SalesItem.type.endsWith(‘Stamping’)SalesItem.type.first().endsWith(‘Stamping’)
SalesItem.types.IDSalesItem.type.ID

10.2 Knowledge Base Excel Sheet

  • The product knowledge base excel contains the several sheets and below is the purpose and things to note about each excel sheet. Generally, all those sheets starting with “_” are a kind of system sheet which is to support the user defined sheet.

 

Sheet NamePurposeImportant Notes
_MasterDataThis sheet is to list the data validation list which will be referenced by another sheetDo not change anything inside that sheet.
_ProductMasterDataThis sheet is also to list the data validation needed for PRODUCT sheetDo not change anything inside that sheet.
_CondtionalTriggerMasterDataThis sheet is to highlight the valid arguments that can be assigned for each ACTION TYPE.Do not change anything inside that sheet.
_ExistingProductsThis sheet is to list all the Attributes inside the system so that user can reuse in the current product’s if the property of attributes is same.This is just for reference only and upload process will not consider that sheet. To update product details of properties, use PRODUCT sheet.

Do not change anything inside that sheet.

_ExistingAttributesThis sheet is to list all the attribute names in the MSP in order for the user to use in ATTRIBUTES sheet and RULE sheet.To know the details properties of attributes, it is needed to download the Attributes excel separately. See also Section 8.
_ATTRIBUTE_TABLEThis sheet is to list Knowledge Base attributes that can be used in Simplified Conditional Trigger sheet.Do not change anything inside that sheet.
PRODUCTThis is to update the PRODUCT properties NAME, ERP ID, CRM ID, CLASSIFIED PRODUCT, EXPORT To CRM, EXPORT To ERP, OPTIONAL PRODUCT, PRODUCT STATUS, PRODUCT TYPE, UNIT OF MEASURE (ERP ID), PRODUCT CATEGORY, LABEL_EN, COMMENT_ENIt is needed to mark the MAIN PRODUCT to be [Y] for the current product which is being under modelling.

– The other products which are used in PRODUCT BOM are to mark as [N] for main product.

– It is not mandatory to define all products in PRODUCT BOM inside the PRODUCT sheet.

– You can add more columns for LABEL_ and COMMENT_ for other language such as LABEL_DE, COMMENT_DE. However, please make sure that you had already defined language master data

PRODUCT BOMThis is to define the Bill of Materials of the Main Product. Normally, those are classified products. You can also add Configurable Product as a component of product however, the details knowledge base of that configurable product must be defined in separate excel.It is important to define the BOM ID which will be referenced in RULE_### sheet having TYPE, BOM, BOM_AND_RANGE. It can be string value.
ATTRIBUTESThis sheet is to define the Attributes of a product. You can either list the existing attributes by searching the attributes name in _ExistingAttributes sheet or enter new one.If you are using an existing attribute, putting the name in Attribute Name column is sufficient and it is not mandatory to define other properties.

– Sequence ID, Attribute Name, Attribute Type and Data Type are mandatory

– if Data Type is not Numeric, it is not needed to define the Precision, Min Range, Max  Range

ATTRIBUTES_RANGEThis sheet is to define the range value for those Attributes which are marked as enumerable. For existing Attribute, it is not needed to add the range value in the sheet unless, you had new range value. In order to know if the range value for an existing attribute is defined, please download the separate Attributes excel which show all Attributes and Range values.For any new attributes which are marked as enumerable, it is mandatory to define the Range value in ATTRIBUTES_RANGE sheet.

– You can add new column for LABLE_ and COMMENT_ for other language by adding column and giving the COLUMN name like LABEL_DE, COMMENT_DE

Please make sure not to enter the string range value for those attributes which are having data type, Numeric

– Attribute having Data Type, DATE, CURRENCY, and BOOLEAN are not supported to have the range value.

GROUPThis is to group the attributes listed in ATTRIBUTES sheet. You can also give the localization for GROUP and SUB GROUPAll attributes listed in ATTRIBUTES sheet must be inside   at least one Sub Group

-There should be at least one GROUP and SUB GROUP for a configurable PRODUCT.

QUOTE_ATTRIBUTEThis is to define the attribute which is inside Quote or Sales Item in order to use as a controlled factor for BOM explosion logic or RANGE restriction logic.
RULE_###Those sheets starting with RULE_ are to define the BOM Explosion logic, RANGE restriction logic and CONDITIONAL trigger logic.The name of the sheet must start with RULE_ and must define the following inside the sheet

·         NAME

·         SEQUENCE ID (

·         TYPE (BOM, BOM_AND_RANGE, RANGE, CONDITIONAL)

The user needs to fill

– Attributes name at Row number 7 starting from column C or 3

– BOM ID if type is BOM, BOM_AND_RANGE and Attribute value starting from Row number 9 onwards

Remark – Row number 8 does not needs to fill anything

Tags: