Quote Data Manipulation Functions
Add a Product to the Quote
ADDING A PRODUCT
Multiple ways exist to add a product to the quote - leveraging UI aids, import capabilities, headless APIs.
The following chapter focuses on illustrating the different ways that are accessible from Performance quoting UI to add products.
The products added to the quote are inserted according to the selected insertion point.
See Performance Quoting > Quote Data Manipulation Functions > Line Selection and Insertion Points for more details
Via embedded Catalog
As part of the quoting process designed in Performance Quoting, any Smart CPQ product catalog can be displayed at one or different steps of the process.
You can benefit from all the capabilities of the Smart CPQ catalog including (non-exhaustive list): quick search, full search, cross-sell recommendations, product comparator, collections...
Depending on the type of product/bundle/offer, you will be able to directly
- add a new product to the quote (Standard Items / Static Bundles)
- "Configure" it prior to adding it (Configurable Bundles / Products).
Using Search and Add in the grid action bar
If you know exactly which product you need to add to his quote, you can also choose to search and add it directly from a grid with a specific action button.
The "Search & Add" feature of the Quote allows searching the Catalog for products, and ultimately adding products to the Quote via the "Add" action associated with any search result. This feature also allows searching for Configurable Products and either configuring or directly adding them to the Quote:
- If the "Configure" action associated with the search result is used, the Configuration Process (for a Product or a Bundle) is launched in a dedicated panel in the Quote so that you can manually or automatically answer questions or make selections and add the outcome to the Quote.
- If the "Add" action associated with the search result is used, then the corresponding Configuration Process is automatically run by the Configurator engine - without any manual input - and the outcome is added to the Quote.
Full Text Search
An option available on the data provider definition enables to use the full text search instead of the regular one. If activated, then the results are retrieved from that search method.
Using Inline Quick Add in the grid
Add product in the grid at the right place by typing-in a product reference and adding it from a simplistic popup.
The Quick Add feature allows searching the Catalog for products from a Quote line, and ultimately inserting products in the Quote by clicking directly on a search result.
In the same way, clicking on a product with a Configuration link in the search results launches the associated Configuration Process in a dedicated panel in the Quote, so that you can manually or automatically answer questions and add the outcome to the Quote. Clicking on a product with a Computation link in the search results automatically triggers the execution of the corresponding Configuration Process - without any manual input - and adds the outcome to the Quote.
Full Text Search
An option available on the data provider definition enables to use the full text search instead of the regular one. If activated, then the results are retrieved from that search method.
Using Multiple Line Item Add
You are able to start the quoting process by massively adding lines in the quote with the Multiple Line Item Add feature. You can select several values for the columns defined by the administrator.
In addition, the dynamic filter service can be leveraged in order to define some incompatibilities between values. In that case, incompatible lines won't be added.
The following lines are generated
Configurable Product
Subscriptions
ADDING AND UPDATING A CONFIGURABLE PRODUCT OR A FAST CONFIGURATION (CONFIGURABLE BUNDLE)
For more details on the actions to define in the Configurator UI to support the below scenarios, please refer to Catalog and Configurator.
Warning
Change Tracking
Change Tracking in the quote is not supported for Configurable Products.
Identifying the Configurable Product to configure and add
Whenever you want to configure a new product (Configurable Product - Standard configurable product (CP), configurable product initiated with a Reference Standard Item (RefSI linked to a CP
via a configuration or computation link), or a Configurable bundle (CB)), you can start the process from 4 different locations in the quoting interface:
information related to the support of Configuration and Computation Links
There is a specific use case when it comes to adding Configurable Products to the Quote:
Configuration Links and Computation Links.
- Configuration Links: these links associate a Reference Standard Item ("RefSI") with a Configurable Product in the Catalog. The behavior of these links is driven by the User Interface: in the Catalog, a Configure action is associated with the RefSI. When clicked, this button opens the Configuration Process with the RefSI - and its characteristics - as input of the Configuration Process. The product configuration is manual in that scenario. The configured product can then be reopened from the quote to be modified if necessary.
- Computation Links: these links associate a Reference Standard Item ("RefSI") with a Configurable Product in the Catalog. The behavior of these links is driven by the User Interface: in the Catalog, an Add to quote action is available at the RefSI level. When clicked, this button runs the associated Configuration Process behind the scene - without any manual interaction - and the resulting Configured Product is added to the Quote. The product configuration is automated in that scenario. The configured product can then be reopened from the quote to be modified if necessary.
Note:
Both Configuration and Computation links are supported with Configurable Products within the Quote. This support of the Computation links may require to be activated on your CPQ tenants. Please contact your PROS representative for the activation.
Configuration links are supported with Configurable Bundles within the Quote. Computation links are not supported with Configurable Bundles, yet.
Access the Catalog within a Catalog widget
In this scenario, you open the Catalog in a Catalog widget. By browsing collections, you can then access Configurable Products and start a new Configuration Process from there (Configure action). The Configuration Process in this case is run within the Catalog widget.
Use the Quick Search within a quote grid widget
From the Quote grid, use the Search & Add action and start searching for a Configurable
Product. When a product meets the search criteria, you will see it appear in the suggested products list.
From there, several use cases can be observed:
- If the item in the list is a Configurable Product, clicking on the Configure action in the list opens the Configuration Process in a popup panel or in a Catalog widget.
- If the item in the list is a Reference Standard Item with a Configuration link pointing at a Configurable Product, clicking on the Configure action in the list opens the Configuration Process in a popup panel or in a Catalog widget.
- If the item in the list is a Reference Standard Item with a Computation link pointing at a Configurable Product, clicking on Add runs the Configuration Process behind the scene - without any manual input - and the outcome is added to the Quote.
Use the Inline Add insert function of the quote spreadsheet
Similarly to the Quick Search, you can also leverage the Inline Add action when set up to start a new Configuration Process. From the Quote grid, use the Inline Add action and start searching for a Configurable Product. When a product meets the search criteria, you will see it appear in the suggested products list.
From there, several use cases can be observed:
- If the item in the list is a Configurable Product, clicking on the Insert action in the list runs the Configuration Process in a popup panel or in a Catalog widget.
- If the item in the list is a Reference Standard Item with a Configuration link pointing at a Configurable Product, clicking on the Insert action in the list opens the Configuration Process in a popup panel or in a Catalog widget.
- If the item in the list is a Reference Standard Item with a Computation link pointing at a Configurable Product, clicking on Insert runs the Configuration Process behind the scene - without any manual input - and the outcome is added to the Quote.
Creating a new configured product from an Existing Configured Product
This advanced scenario requires a specific configuration of the Open Configurator action with the setting Initialize new configuration from existing set to true.
The new configuration process starts in a popup panel or in a Catalog widget.
Configuring the product
The configuration of a product happens just after its selection (brand new configured product or because you need to modify an existing configuration). In that case, a Configured product can be edited by clicking on a dedicated action from the quote product root line (provided that you have the privileges to open this configured product).
As mentioned above, the edition and configuration of a product happens in a dedicated Configurator User Interface screen that is surfaced either
- In a catalog widget
Example of a side by side layout
- or in a popup panel
The principle of the pop up panel is that it does not have to be pre-positioned in the Quote page. It simply appears on demand on top of the Quote UI - whatever the page structure and organization - and vanishes on close. It is not possible to access it by other means than on demand, nor to move or minimize it.
Page Redirection when opening an existing configured product
New Configuration versus Edit/Re-open
screen, which means that you will have no access to other sections or actions of the Catalog itself, in particular you will not have the capability to navigate to other collections of the catalog or return to the catalog home page from this screen
(Only the Catalog UI configuration area is used : <inclusion sourceName="eConfiguratorUI" widthPercent="100" heightPercent="100" hzAlignment="left" vtAlignment="up" autosize="on"/>)
Adding the configured product to the quote
Once the configuration of a product is done, you can add it to the quote - or ignore your modifications and close the configuration session.
You can find below the summary of the re-directions operated on an Add_To_Cart or Close actions.
| RE-DIRECTIONS | SAVE & CLOSE (MULTICONFIGURATION=OFF) | SAVE & NEW (MULTICONFIGURATION=ON) | CLOSE |
|---|---|---|---|
| Re-directions | Save & Close (multiConfiguration=off) | Save & New (multiConfiguration=on) | Close |
| From Catalog widget with full catalog user experience | |||
| Start a new configuration | Last catalog page | Remains in configuration | Last catalog page |
| Open an existing configuration | Quote spreadsheet | NA | Quote spreadsheet |
| From Catalog widget when reopening an existing Configured Product | |||
| Start a new configuration | Catalog home page | Remains in configuration | Catalog home page |
| Open an existing configuration | Last catalog page | NA | Last catalog page |
| From Popup Panl | |||
| Start a new configuration | Quote spreadsheet | Remains in configuration | Quote spreadsheet |
| Open an existing configuration | Quote spreadsheet | NA | Quote spreadsheet |
For more details on the Add_to_cart actions and its parameters to support the scenarios above, please refer to documentation related to the configuration of the Catalog and Configurator User Interface.
AUTOMATED HIERARCHY GENERATION
When adding a PRODUCT, BUNDLE PRODUCT or SUBSCRIPTION kind of line item in the quote:
- The inserted line item's line template is solved as usual.
- If the retrieved line template is marked as managed with an Automated Hierarchy
- The system will identify for the original product/bundle/subscription the hierarchy of parent collections from the catalog where it was picked
- Create or reuse existing Generated folder in the quote to replicate the hierarchy of the catalog in the quote
- Generated folder line template will be the one defined in the Automated hierarchy generation section in the designer in the product/bundle/subscription line template definition
- Generated are always created with a hierarchy starting at the root level of the quote, they can't be inserted in a regular folder.
- Generated folders will be created with:
- folder id = collection id (workspace/CL/collection id)
- folder description = collection description
- If the mass add functionality was used, then the order of collections in the catalog (excluding already created Generated folders) will be replicated as much as possible
Once a Generated Folder is in the quote, the user can:
- Delete it
- Move it inside its current parent
- Move contained products inside itself
Once a Generated Folder is in the quote, the user cannot:
- Move it to another parent
Hierarchical filtering is not impacted. These line templates will be considered as a regular Folder.
- automated deletion of an empty Generated folder
- ensure order of folders match with the catalog one
- move products/generated folders during a refresh
Edge case - Insertion point management
- If only one insertion point is selected, then the resolution of Line template is performed as in the current standard behavior. If the resolution matches with a line template in Automated hierarchy mode, then the insertion point is skipped and the product is inserted with first level of generated folders positioned at the quote root level.
- If several insertion points are selected, then two cases may happen:
- All resolutions match the same line template in Automated hierarchy mode → then the line item is added once only with first level of generated folders positioned at the quote root level.
- Resolutions match with several line templates, then the line item is added several times, potentially with a mix of standard creation in the insertion point and automated hierarchy mode.
Line Selection and Insertion Points
SELECTING LINES
The selection of line(s) in a quote (clicking on the left side check box) is used to provide a scope for some particular actions :
- Copy / Cut / Duplicate
- Delete
- Move (Drag and Drop)
- Mass Edit
- Refresh
- Mass Update
- Add to chart
See Performance Quoting - Quote Designer, Actions for more details.
DEFINING INSERTION POINTS
Selecting lines is also a way to define insertion points in the quote. The insertion point governs the way lines - particularly products - are added/inserted to the quote.
Insertion points are taken into account by several actions:
- Import
- Paste *
- Quick Add *
- Add from Catalog UI *
- Inline Add / Add product
- Inline Add / Add specific line
- Inline Add / Add folder
*Supports multiple insertion points
Multiple Insertion Points
If multiple insertion points (of similar types) are selected, then one instance of the added product or structure - including hierarchy, if any - is added at each insertion point.
If selected lines are not consistent (mixed types are selected - e.g. a Folder and a Product), insertion actions are not available.
Default Insertion Point Strategy
When no line is selected, the quote itself is considered as a root folder, being selected by default.
UNDERSTANDING THE INSERTION POLICY
The way a line is added to the quote (after or before the current insertion points, inside a folder or a bundle, at the top or bottom position, etc.) is governed by a default policy that is defaulted in the quote model and can be configured specifically for a given action (if necessary).
The following parameters allow to configure the insertion policy.
Default Parameters and values defined at quote level
| Line position | Defines where the added line should be inserted based on a selected line in the quote (when the new line is added at the same level) | "Before", "After" |
| Line position in Folder / Bundle | Defines where the added line should be inserted based on a selected folder or bundle line in the quote (when the new line is added inside). | "Top", "Bottom" |
| Folder insertion strategy (for Folders) | Defines if the added folder line should be inserted inside the selected folder line in the quote. | "Same level (default)", "Force Inside" |
| Folder insertion strategy (for Non Folder Lines) | Defines if the added line (products, specific, bundle or subscription lines) should be inserted inside the selected folder line in the quote. | "Force Inside (default)", "Same Level" |
At action level, those values can be overridden. A special value, “User Decision” can be used for some parameters.
User Decision
"User Decision" value means that the decision of inserting a line Before/After and Inside is made by the end-user, from Performance quoting UI.
It is not pre-defined by an administrator in the quote model.
Action menus or buttons are automatically generated by Performance quoting depending on the actions that is used and the context of selection.
Via different action menu entries
- Via dedicated Buttons
| Line position | Defines where the added line should be inserted based on a selected line in the quote (when the new line is added at the same level) | “blank” (i.e. apply Quote defaults) , "Before", "After", “User Decision” |
| Line position in Folder / Bundle | Defines where the added line should be inserted based on a selected folder or bundle line in the quote (when the new line is added inside). | “blank” (i.e. apply Quote defaults) , "Top", "Bottom" |
| Bundle insertion strategy | Defines if the added products or specific lines should be inserted inside the selected bundle line in the quote. | “blank” (i.e. apply Quote defaults) , "Same level", "Force Inside", “User Decision” |
| Folder insertion strategy (for Folders) | Defines if the added folder line should be inserted inside the selected folder line in the quote. | “blank” (i.e. apply Quote defaults), "Same level", "Force Inside", “User Decision” |
| Folder insertion strategy (for Non Folder Lines) | Defines if the added line (products, specific, bundle or subscription lines) should be inserted inside the selected folder line in the quote. | “blank” (i.e. apply Quote defaults) , "Force Inside", "Same Level", “User Decision” |
List of actions used to insert line items
| ACTION TYPE | MULTI-INSERTION SUPPORTED (SEE NOTE BELOW) | INSERTION POINT(S) ARE ALL FOLDERS | INSERTION POINT(S) ARE ALL BUNDLES (PRODUCT OR SPECIFIC) | INSERTION POINT(S) ARE A MIX OF PRODUCTS, SPECIFIC, SUBSCRIPTION LINES | INSERTION POINT(S) ARE A MIX OF PRODUCTS, SPECIFIC, SUBSCRIPTION AND BUNDLES |
|---|---|---|---|---|---|
| SEARCH_PRODUCTS | Yes | New product(s) can be added "before" or "after" the insertion point(s) depending on the 'Line position' configuration That capability is only eligible when the 'Folder insertion strategy (for Non Folder Lines)' = "Same Level" or “User Decision” inside the folder, at 'top' or 'bottom' position depending on the 'Line position in Folder / Bundle' configuration. That capability is only eligible when the 'Folder insertion strategy (for Non Folder Lines)' = "Force Inside" or “User Decision” | New product(s) can be added "before" or "after" the insertion point(s) depending on the 'Line position' configuration That capability is only eligible when the 'Bundle insertion strategy' = "Same Level" or “User Decision” | New product(s) can be added "before" or "after" the insertion point(s) depending on the 'Line position' configuration | New product(s) can be added "before" or "after" the insertion point(s) depending on the 'Line position' configuration That capability is only eligible when the 'Bundle insertion strategy' = "Same Level" or “User Decision” Additionally, when the 'Bundle insertion strategy' = "Force Inside" or “User Decision” an info message invites the end-user to select only bundles if he wants to add components in selected bundles |
| INLINE_QUICK_ADD | No | Special case of MULTIPLE LINE ITEM ADD :
Insert "Inside" Bundles is not authorized. Action in the menu will NOT be visible/generated Special case of INLINE_QUICK_ADD / ADD SPECIFIC :
When using Add 'Inside' and then "add and new" for the subsequent insertions, all insertions will be added 'after' the last inserted line | |||
| ADD SPECIFIC ADD BUNDLE SPECIFIC | No | ||||
| MULTIPLE LINE ITEM ADD PRODUCT MULTIPLE LINE ITEM ADD SPECIFIC | No | ||||
| ADD FOLDER | No | Action may be visible but de-activated | Action may be visible but de-activated | Action may be visible but de-activated | |
| PASTE ROWS | Yes | ||||
| DUPLICATE ROWS | No | ||||
| IMPORT_FILE | No | ||||
| ADD A CONFIGURED PRODUCT from Quick Search (following a CONFIGURE action) or ADD any type of PRODUCT (CP/SI) from Catalog/Configurator UI Widget or Popup | Yes | No 'User decision' supported for this action. Quote level parameters will be used. |
Also, the insertion action of a new line may be authorized/available in the UI but may then fail/be rejected due to the business rules applied in the quote.
Impossible to Insert (or Move) a Line
Example of rules :
- a specific type of line may never be authorized to be added at a specific location in the quote (as per the logic defined in the quote model)
- the root product is by nature never updatable in the quote
- Typical example : Configured products or configured Bundles can only be updated via the Configurator UI widget
- the SPECIFIC line (corresponding to a given line template) is not listed as an authorized line template for that location - "Row aaa cannot be added in parent Row bbb" type of error
- Typical example : a bundle does not authorize the specific line ABC to be a constituent of the bundle.
- there is no matching line template for the product or bundle being added - "No Row matching" type of error
- Typical example : a bundle allows products of a product family A (corresponding to the lineTemplateA) to be added as constituents of the bundle but not products from product family B (corresponding to lineTemplateB)
- adding similar lines is not authorized as per the 'No Duplicate' FPK policy
- user permission rules prevent from adding such line - "Invalid Access Right" type of error
- Typical example : You try to add a product into a bundle that is not editable for that particular quote state.
- the root product is by nature never updatable in the quote
When multiple insertion points are defined and at least one line cannot be inserted, the mass add command is rejected entirely.
Auto Line Selection After Insertion
When new lines are inserted, the newly created lines are selected by default and will then act as new insertion point(s) except with the Import action, in that case the initial insertion point is kept.
Multiple Insertion points
Some actions corresponding to line insertions supports multiple insertion points.
In such scenario, added product or structure - including hierarchy, if any - is added at each insertion point.
- Either all insertion points are FOLDERS
- or all insertion points are a mix of PRODUCT/SPECIFIC/BUNDLE_PRODUCT/BUNDLE_SPECIFIC/SUBSCRIPTION type of lines
It is currently not possible to insert a line by selecting a CHARGE type of line
Additionally, Performance quoting will warn you when you are about to add multiple lines at several locations at once in the quote.
Update Configurable Products
Warning
Change Tracking
Change Tracking in the quote is not supported for Configurable Products.
In the case where a Configured product, already existing in the Quote, is reopened and modified, its structure and values can be fully or partially changed. The Quote engine will thus try to update the existing and remaining sub-lines and apply the values manually applied before the reopening. In order to update the corresponding product, the Quote engine follows a specific process:
- First, the Quote engine identifies the root line and the sub-lines already existing.
- Then it deletes and recreates all the product hierarchy.
- Once done, the Quote engine starts updating the sub-lines that already existed before the update. It overwrites the values of quote cells on those sub-lines with the value that the quote or the end user has positioned there before the reopening.
The Quote bases the identification of each sub-line – in step 1 above – on the FPK defined at the line template level and on a matching identifier local to the Configurable Product hierarchy. This matching ID is obtained from the concatenation of the FPK of its parents, starting from the root line, within the Configurable Product hierarchy and its own FPK (whether this FPK is unique to the Quote or hierarchical).
With those two means, the Quote is able to:
- Detect if that FPK already exists and raise an alert on the impossibility to have two of the corresponding product in the Quote (in cases where duplicates are not allowed),
- Identify the sub-line within the product hierarchy and merge values.
If this mechanism does not permit to identify a given sub-line, then the previous value will not be merged with the updated one.
MERGE CP MODE
The Merge CP Mode setting defined on the configuration process (on the add to cart action) can be used to decide whether or not a Configured product should update an existing line in the quote or create a new line.
Globally, by using this setting, you can: From a new configured product
- Insert a new line
- Update the inserted line during the current session
- Update any line inserted during a past session
From a reopened configured product (in combination with the "Initialize a new configuration from an existing one" setting)
- Update the reopened configuration
- Update another configuration line item
- Insert a new line
When using the Merge CP mode during an Add to cart, the quote receives the configured product and computes its FPK and the associated FPK Policy.
If the policy is not a NO_DUPLICATE (or the Merge CP mode is not used)
- The regular behavior applies
If the policy is a NO_DUPLICATE and the Merge CP mode is used, then based on the FPK computation
- If a line already exists with the same FPK, that existing line is replaced by the new one.
- If no line exists with the same FPK, then a new is created
Merge CP Mode for reopened configured products The usage of the Merge CP mode on configured products that have been reopened without the "Initialize a new configuration from an existing one" setting will have no impact. The configured product will update the one used for reopening in the quote anyway.
Product Bundling
OVERVIEW
A Bundle is a new kind of hierarchical product in the Performance Quoting module. It is composed by a root line, and several product or specific sub lines. The sub lines are ordered inside the bundle and have a quantity. The contents of a bundle can be fixed (not updatable) or updatable. This behavior is handled by dedicated user permissions. It can be composed of Product and Specific lines, both for root and child lines. Bundles can be predefined in the catalog and added with their sub lines in the quote.
Warning
Change Tracking
Change Tracking in the quote is not supported for Configurable Products.
ADDING A BUNDLE IN A QUOTE
Bundles are added in the quote by adding their root line. The root line can be of 2 kinds: BUNDLE_PRODUCT or BUNDLE_SPECIFIC.
Adding a "Product" Bundle in a Quote
Adding a Bundle that relies on a Product as the Root line is done as for any other Product line. This is done by adding the root product from the catalog UI, or by searching for it through the search capabilities. When adding a Product identified as a Bundle on the catalog side in the quote, the quote also retrieves sub lines from the catalog with the following rule:
- Sub lines are Products in the Catalog directly linked to the root product, with the "Bundle" type of Product Links
- They are retrieved in the same order as the order in the list of linked products
- Quantities used on the link will be retrieved and used as quantities on sub lines in the quote
Special Cases:
- Non eligible products, with no replacement declared, that are attached under a root bundle product will not be added to the quote.
- In case of a Bundle root product that is linked to a sub-product, which is also linked to a sub-product (being then the grand-child of the root product), then only the first level of children are added to the quote.
- Bundles can't contain configured products.
Adding a "Specific" Bundle in a Quote
Adding a Bundle that relies on a BUNDLE_SPECIFIC line as the Root line is done as for any other SPECIFIC line. This is done by adding the root specific line, with the dedicated associated action. A Specific Bundle is always added without any default sub lines. You can add lines inside it afterward. The system will consider the specific line as a bundle if the line template used is of BUNDLE_SPECIFIC type.
Product Line template Matching
Matching root line template
The root line of a bundle will be matched following a dedicated resolution map, which focuses on BUNDLE_PRODUCT line templates. The resolution is as for the PRODUCT line templates, but focalised on BUNDLE_PRODUCT templates.
Matching sub lines
Sub lines of a bundle will be matched based on the same process as for configurable products. It will require the usage of an initialization map for sub lines, attached under the root line template.
Outputs of the initialization map can be based on the sub product information, and on the information stored on the "bundle" product link between the sub product and the root product (such as a business property value set on the link).
USER PERMISSIONS
In order to manage the Bundle functionality properly, some User Permissions are added on the BUNDLE_SPECIFIC and BUNDLE_PRODUCT Line Template level:
- A Create rule will define if the user can add new lines into the bundle.
- An Update rule will define if the user can update the quantity on sub lines, and the order of sub
lines inside the bundle.
- A Delete rule will define if the user can delete sub lines from the bundle.
This User Permission will be solved as usual by relying on session states, and on the line template.
BEHAVIOR OF A BUNDLE IN A QUOTE / LINE MANIPULATIONS
Add Lines
- Adding a Root bundle product line will automatically add sub-lines at the same time.
- Sub-lines can be added if the user is allowed to based on current user permissions.
- In case the user can add lines, then
- Only PRODUCT and SPECIFIC types of lines can be added into a Bundle
- Any inline add and quick add action which is available in the current widget can be used to insert products
- product will be effectively added in the bundle if
- the line template is authorized for creation as per user permissions.
- the line template is authorized inside the root bundle line template.
- Any authorized specific lines creation action which is available in the current widget can be used to insert specific lines.
- Authorized specific lines need to fulfill the following conditions :
- the line template is authorized for creation as per user permissions.
- the line template is authorized inside the root bundle line template.
- Authorized specific lines need to fulfill the following conditions :
Delete Lines
- Deleting a Root line will delete sub lines as the same time.
- Bundle Root lines can be deleted if the user is allowed to as per the user permissions on the root line.
- Sub lines can be deleted if the user is allowed to as per the user permissions on the current sub line and on the associated root line.
Move Lines inside a bundle (from outside the bundle)
- Moving lines inside a bundle from outside the bundle will be treated with the same rules as adding lines inside this bundle.
Move Lines inside a bundle (from inside the bundle)
- Moving lines inside a bundle from inside the bundle will be treated with the same rules as updating lines inside this bundle.
Move Lines outside a Bundle
- Moving lines outside a bundle will be treated with the same rules as deleted lines inside this bundle
MUTATED SYSTEM VALUE
A new "Mutated" system value is added on bundles. This boolean value, with False as the default value, will be changed to True if for a bundle any of the following changes occur:
- Change the order of sub lines (only relevant for the structural order, not for any kind of sort on a grid that may visually impact the order of a bundle inside that grid)
- Add a sub line
- Delete a sub line
- Change the quantity of a sub line
BUNDLE IMPORT
Import new bundle line (New Root line with no equivalent FPK, or import not performed on a No Duplicate kind of FPK)
The bundle will be imported by relying on the "Bundle Parent" column to provide the parent/child relationship:
- Case 1: A Bundle Root Product being imported without specifying any child product
- then children will be retrieved from the catalog as if the user would have just added that root product in the quote from the runtime UI.
- Case 2: A Bundle Root Product being imported with specifying at least one child product
- then children will be retrieved from the import file only, and those children lines will be considered as the only line included in the bundle.
- Case 3: a Bundle Root Specific being imported with specifying at least one child product
- then children will be retrieved from the import file only, and those children lines will be considered as the only line included in the bundle.
Import an existing line with merge - (Root Line with equivalent FPK, import performed on No Duplicate kind of FPK, and in Merge mode)
In case of a match being identified on the root line level of a bundle
- Case 1: the root line is a Product & the root line is imported without specifying the sub line
- The matching root line is merged
- Sub lines remain unchanged in the quote
- Case 2: the root line is a Product & the root line is imported with specifying the sub lines
- Children are retrieved from the import file only, and those children lines are considered as the only lines included in the bundle.
- Previously existing sub lines are lost
- Matching root line is merged
- Matching sub lines are merged
- The root bundle is considered as mutated
- Case 3: the root line is a Specific & the root line is imported without specifying the sub lines
- Matching root line is merged
- Sub lines remain unchanged in the quote
- Case 4: the root line is a Specific & the root line is imported with specifying the sub lines
- Matching root line is merged
- Children are retrieved from the import file only, and those children lines aez considered as the only lines included in the bundle.
- Matching sub lines are merged
- Existing sub lines that are not mentioned in the import file are lost
Import an existing line with clean - (Root Line with equivalent FPK, import performed on No Duplicate kind of FPK, and in Clean mode)
In case of a match being identified on the root line level of a bundle
- Import is managed as if the imported line is a new one
- Delete the previous bundle
- Create the one from the import file
Import an existing line with keep - (Root Line with equivalent FPK, import performed on No Duplicate kind of FPK, and in Keep mode)
In case of a merge being identified on the root line level of a bundle
- No change to the quote content on that line and sub lines
Import failure: If, for any reason, one of the sub lines of the bundle that is supposed to be imported is not allowed for the current user (example: the user doesn't have the right to create this kind of line template), then the bundle is not created / updated at all.
BUNDLE EXPORT
Bundles are exported by relying on a new "Bundle Parent" column to provide the parent/child relationship. The export is performed with all sub lines
SUPERSESSION IN A BUNDLE
Bundle roots and sub components can be replaced by newer products following the supersession mechanism.
In case of a supersession happening during the add to quote process:
- Supersession on the root level
- Replace the root bundle by the new product (replacement product can be a bundle or not)
- If the line is replaced by a bundle, then sub lines are retrieved from the new bundle
- Supersession on the sub level
- Replace the sub-product by the new product
In case of a supersession happening during the import:
- Products to be replaced are identified based on the Replacement Policy (NONE, REPLACE, FORCE)
- Supersession on the root level
- Replace the root bundle by the new product (replacement product can be a bundle or not)
- If the line is replaced by a bundle, then sub lines are retrieved from the new bundle
- Supersession on the sub level
- Replace the sub-product by the new product
BUNDLE REFRESH
See Understanding Data Refresh in the Quote.
KNOWN LIMITATIONS AND BEST PRACTICES
Smart CPQ does not support a hierarchy of bundles. However, a product A, identified as a "bundle"
in the product catalog, can be used as a component of another bundle B. In this case, product A will behave as a standard item in the quote (its own sub-components will be ignored). Also, a similar result can be achieved by adding a product (considered as a bundle in the catalog) directly in a bundle in the quote. It is not supported to add a product bundle in the quote, and then move it inside a bundle.
Excel Import/Export
GENERALITIES
The Performance Quoting module provides Excel export and import functionalities (XSLX file format is supported). Excel imports and exports handle line item information, and also field-level values.
Supported Data Types
The following data types are not supported with the Excel Import/Export:
- Attachments
- Scaled Pricing
Known Limitation - FPK Defined with Resolution Variable
The Functional Primary Key (FPK) is used for line matching (when the policy is 'NO DUPLICATE' or 'CONFLICT').
If the FPK is defined with some columns computed from resolution variables, utilizing Excel or JSON import to merge data on Configured Products lines or Bundle Products is not supported.
More particularly, because the matching cannot happen for resolution variables, quote line data will not be merged. As a result, new lines will or may be added to the quote.
Known Limitation - Import and NO_DUPLICATE Policy
For Import operation with NO_DUPLICATE policy, all cells participating in the FPK have to be available in the import file for the matching to happen.
If a row doesn't have all cells for the FPK it will be missed in the matching check and the line will be created, thus introducing the possiblity of a duplicate row.
If that's the case, the system will display a warning message in the cart pointing out that existence of duplicates.
The content of the export and import are based on a predefined structure in order to ensure a correct result.
Import an export
Any file that has been exported through the Performance Quoting module export function can be re-imported without adding any information. This explains why some technical columns are included in the export file.
EXPORT
Export Functionalities
Export can be enabled by adding the proper action in the quote model, on grid components. The user can find all export actions grouped inside the Collaborate menu.
Each export action can be specified with the following settings:
- View to be used
- Optional setting
- Will determine lines that should be exported
- If not defined, then the grid's view from which the export is called will be used
- Component to be used
- Optional setting
- Will determine columns that should be exported
- If not defined, then the grid's component from which the export is called will be used
- List of columns to be exported
- Optional Setting
- Defines the subset of columns that are exported
- If not defined, then all columns from the component are exported
- Export fields
- Defines if the fields of the view should be included in the export file or not
- List of fields to be exported
- Optional setting
- Defines the subset of fields that are exported
- If not defined, then all fields from the component are exported
- Export policy for object datatypes
- Defines how object values, which are composed of an ID and a description, should be exported
- Can be set to export only the ID value, only the description value, or both values
- Export Hierarchy and FPK
- This flag guarantees that the exported excel file can be imported again. It thus triggers the export of all elements required for a potential reload:
- Makes sure products are exported with their parent hierarchy when authorized and relevant
- Defines if the export should force all columns involved in the functional primary key composition to be exported
- Export Row ID
- This flag indicates that the RowID will be exported as a part of the export file
Export Filter
Export will be based on the filter currently applied on the targeted view. In case of a need to ensure the export be done on a predefined subset of lines without any risk of having additional user filter applied, use a dedicated view that shouldn't be available to the end user UI.
Export Restrictions
Export can't be performed on views where a filter with the "Show products only" option is used.
Export Format
Format
Two tabs can be found in the export file:
- Fields: contains all fields exported.
- Grid: contains the exported line items with related columns.
A color code is used in the generated file:
- White cells: values that can be edited and that will be taken into account when importing the updated file.
- Grey cells: values that are not supposed to be edited and that will not be taken into account when importing the updated file.
Color Code
The first line of each tab is dedicated to files and column title. The second line (and next ones for the grid) are meant to show data values.
Technical Columns
Some columns are included in the export, even if they are specifically part of columns mentioned in the export settings:
- Folder 1 to 5 - Shows the parent of the current line
- Name - Shows the value of the row item system column
- Row type- Shows the type of line: PRODUCT, SPECIFIC, or FOLDER
- Data source - For PRODUCT type of lines only, shows the data provider used to retrieve the product
- Row template - Shows the line template of the line
Specific behavior for monetary value
Monetary values are always exported with the associated reference currency.
That means if a monetary field or column is part of the export scope, its reference currency field or column will also be exported, even if it was not specified in the action definition.
Specific behavior for computed & user input values
Cells and fields which at the same time computed and user inputs are exported twice: - One cell/column marked as "Ignored" which shows the current value of the field/cell in the quote - One cell/column exported empty that should be used to update the value
IMPORT
Import Functionalities
Import can be enabled by adding the related action in the quote model. Each import action can be specified with the following settings:
- Default data provider
- Optional setting
- Default data provider value used for "PRODUCT" type of line, if not specified in the "Data source" column of the import file.
- Using this setting may allow you to not use the "Data source" column in the import file if all products are related to that same data provider.
- Default namespace (for SYS_ROW_ITEM)
- Optional setting
- Default workspace value used for "PRODUCT" type of line, if not specified in the "Name" column of the import file.
- Using this setting may allow you to not specify the workspace and type of object for product in the name column.
- Example:
- Product name normally equals "workspaceName/SI/productID".
- Add "workspaceName" as the default namespace in the import settings.
- Product can now be imported with "productID" as a value for its name.
- In case of no workspace specified in the import file, and no specific workspace defaulted in the import, then the one from the root collection of the data provider targeted by the line will be used.
- Default specific
- Optional setting
- Default line template used for "SPECIFIC" type of line, if not specified in the "Row template" column of the import file.
- Using this setting may allow you to not use the "Row template" column in the import file if all specific lines are using that same line template.
- Default folder
- Optional setting
- Default line template used for "FOLDER" type of line, if not specified in the "Row template"
column of the import file.
- Using this setting may allow you to not use the "Row template" column in the import file if all folder lines are using that same line template.
- Replacement policy
- Optional setting
- Define if and how the replacement will be managed
- Possible values: "REPLACE", "NONE", "FORCE"
- If not specified, "NONE" is used by default.
- Import policies (define how conflicts will be treated, conflicts are possible if there is a same FPK for one of the quote line, and one of the imported lines)
- The import policy is defined based on the FPK policy of the matched line:
- NO DUPLICATE
- possible values :
- "KEEP" - the current quote line will remain unchanged, the imported line is ignored
- "MERGE" - the current quote line will remain and be updated based on all imported information for the line
- "CLEAN" - the current quote line will replaced by the imported one
- possible values :
- CONFLICTS
- possible values :
- "ALWAYS ADD" - the imported line is added
- "KEEP" - the current quote line will remain unchanged, the imported line is ignored
- "MERGE" - the current quote line will remain and be updated based on all imported information for the line
- "CLEAN" - the current quote line will replaced by the imported one
- possible values :
- NO DUPLICATE
Insertion Point
It is possible to select a line in the quote to define a particular insertion point. In such case, all elements defining the hierarchy of the lines in the import files (see columns in blue below) will be interpreted relatively to the insertion point defined when starting the Import process
And import 'inside' the product SKUs only
Import Format
Import example
The import file can be simplified by using all default settings of the action to the following example where products are imported it a quantity in a hierarchy of folders. Example of an import file)
Format
If folders are not used in the quote model, it is not mandatory to include the folders column in the import file.
Refer to the Export action section for information about the expected columns and fields.
Import process and conflict resolution
Product line import
For each imported root product line, the import process will first search for a matching line in the current quote. A line is considered as matched if they have the same FPK.
If no line is matched, then the imported line is considered as a new addition in the quote. The standard "add" process runs as if the line was manually added by the end user via the user interface (i.e. add product from catalog, or add specific line via dedicated action). The line is created and the user inputs are populated.
If a rowID column is present in the import file, the system will attempt to match on rowID during import instead of the FPK.
In case that rowID is not found for a row, then the system will match by FPK for this row.
Configurable Product Import
Smart CPQ allows importing Configurable Products in the Quote. There are two main scenarios involved:
- Import to add new configured products
- Or import to update configured products already in the quote (see Conflict Resolution below).
When importing to add a configured product, you can add in the import file a Reference Standard Item with a Configuration link and / or a Computation link.
- Configuration Links: these links associate a Reference Standard Item (RefSI) with a Configurable Product in the Catalog. Importing a refSI with a Configuration link runs the
Configuration Process behind the scene - without any manual input - and imports the outcome in the Quote. The product configuration is automated in that scenario. The configured product can then be reopened from the quote to be modified if necessary.
- Computation Links: these links associate a Reference Standard Item (RefSI) with a Configurable Product in the Catalog. Importing a refSI with a Computation link runs the Configuration Process behind the scene - without any manual input - and import the outcome in the Quote. The product configuration is automated in that scenario. The configured product can then be reopened from the quote to be modified if necessary.
Both Configuration and Computation links are supported with Configurable Products within the Quote. This support of Computation links may require to be activated on your CPQ tenants.
Please contact your PROS representative for the activation.
Importing Configurable Products to add them to the quote outside of a link with a refSI (e.g. adding the reference to a CP directly in the import structure) within is not supported yet.
Importing Configurable Bundles within the Quote is not supported yet.
Conflict Resolution when a line matches:
- If the line template is defined with the NO CONTROL Functional Primary Key policy, then the line from the import file is added.
- If the line template is defined with the CONFLICTS or NO DUPLICATE Functional Primary Key policy, then the merge logic will depend on the Import Policy:
- "ALWAYS ADD" (only for CONFLICTS policy) - The imported line is added.
- KEEP: the current quote line will remain unchanged. The imported line is ignored/skipped.
- MERGE: the current quote line will remain and be updated based on all imported information for the line. User inputs sent in the import file will override user inputs of the quote. Other user inputs on columns not present in the import file remain unchanged.
Folders
In case of a folder hierarchy, the MERGE process ONLY happens if the folder structure in the import file is the same as the one in the quote. All folder lines included in the path should be included in the import file. Merging in folders requires the FPK policy to be in NO_DUPLICATE or CONFLICTS mode for all folders included in the path, and for the product line.
Configured Product Update
In case of configured products, the MERGE process ONLY happens if the sub-line structure in the import file is the same as the one in the quote (i.e. Product structures are strictly identical -
- same FPK, same order). Otherwise, the quote line item (and sub-lines) remains unchanged and the imported line(s) are skipped. A warning is raised in the log file.
- CLEAN: the current quote line is removed and replaced by the imported one. Standard "add" process.
Configurable Product Import
In the case of Configurable Products, the quote line item remains unchanged and the imported line is skipped. A warning is raised in the log file.
Import report
The user can access the import treatment result in the long treatment report section (left bar component). It provides access to the import result and logs.
Each import report shows the following information:
Result type
- Error
- Warning
- Success
Result description (text)
- What has been done
- Examples
- Due to some errors (see log), 10,000 lines have been imported on 25,000 in the import file.
- Due to some errors (see log), the file has not been imported.
- Success, 25,000 lines have been imported.
Action type
- Mass import, etc.
User who ran the action
Start date + time (based on current user time zone)
End date + time (based on current user time zone)
Link to a log file
Restriction: For data security reasons, each user will only have access to reports for import actions he or she ran.
The import report log is built with the following format:
- For each error/warning: Location of the error (quote or line number from Excel), error description, and how to fix it.
- Last line of the file provides the number of lines imported and the number of potential lines in the import file.
List of potential feedback from the import treatment and how it will be shown in the long treatment report component
| LEVEL | DESCRIPTION | ROLLBACK ON IMPORT | BLOCKER FOR LINE IMPORT | ERROR TYPE | DESCRIPTION IN THE REPORT FILE | COMMENT |
|---|---|---|---|---|---|---|
| quote | Mandatory column not found example : Row_item ; line type | Y | N/A | ERROR | Missing mandatory column, id = "column id", description = "column description" | Description in the locale used for import. |
| quote | Column/Field header not recognized | N | N/A | WARNING | Column/Field "header from import file" not recognized. Skipped from import. | Will enable the end user to work in the file by adding columns, and import it without cleaning it. |
| quote | Column/Field header refers to several column descriptions in the quote | N | N/A | WARNING | Several columns/fields "header from import file" found in the quote model, with following IDs: "ID1," "ID2," "IDx." Please use the column/field ID instead. Skipped from import. | The user needs to use the ID so that we can identify without any doubt the targeted column/field. |
| quote | No header line | Y | N/A | ERROR | Missing mandatory column, id = "column id", description = "column description" | Can't be identified as an individual error; will fall in the mandatory column missing case. |
| quote | Empty file | Y | N/A | ERROR | Empty file" | |
| quote | File not using the expected format | Y | N/A | ERROR | File format is not the expected one. Please use Excel format only. | |
| quote | No line to import (header only in the file) | Y | N/A | ERROR | No line to import. | |
| quote | File max size exceeded | Y | N/A | ERROR | Max size for the import file exceeded. Max size is "max size." | Max size defined as part of the governor limits in the centralized configuration. |
| quote | File storage down/Other technical issue | Y | N/A | ERROR | Service not available. Please contact your administrator. | |
| quote | Max folder depth exceeded | Y | N/A | ERROR | Maximum depth for folder hierarchy exceeded. Please limit the number of folder levels to "number from governor limit." | |
| quote | Maximum number of lines reached | Y | N/A | ERROR | Maximum number of lines in the quote exceeded. Please limit the number of lines to :number from governor limit." | |
| line | No right to write in the cell | N | N | WARNING | Value for column "column reference" has been skipped due to insufficient user privileges. | |
| line | No right to add specified line template | N | Y | ERROR | Line has been skipped. Insufficient user privileges prevent the creation of a line with type "line template reference." | |
| line | Product not found | N | Y | ERROR | Line has been skipped. Product not found with value "product id from import file" in "product column reference." | |
| line | Missing information in Product reference | N | Y | ERROR | Line has been skipped. Product cannot be retrieved due to missing information in the product reference "product reference column" column | By example, when the workspace is not specified and no default workspace on the action level. |
| line | Out of domain value | N | N | ERROR | Value "value from import file" can't be set in column "column reference" because it is not part of the domain of accepted values. | |
| line | Wrong data format | N | N | ERROR | Wrong value for column "column reference." Please use "expected format" for this column. | String in numeric,... |
| line | Line template missing | N | Y | ERROR | Line has been skipped. Line template missing in column "column reference." | ...and no default value on the action level. |
| line | Data provider missing | N | Y | ERROR | Line has been skipped. Data provider missing in column "column reference." | ...and no default value on the action level. |
| line | Propagation error | N/A | N/A | N/A | N/A | Propagation error (no price from POD, division by 0) will not be handled by the import service. The quote will send errors to the end user as if it has been done manually. |
| line | Parent not found | N | Y | ERROR | Line has been skipped. Parent folder not found. | |
| line | Line template not allowed in the parent authorized sublines type | N | Y | ERROR | Line has been skipped. Insufficient privileges prevent the creation of a line with type "line template reference" inside a "folder reference" folder. | |
| line | FPK No duplicate error in another folder + folder used in the FPK | N | Y | ERROR | Line already exists in another folder and can't be created again. | |
| line | FPK conflict | N | N | WARNING | Line already exists. Please fix the generated conflict. |
SCALED PRICING SPECIFICS FOR THE EXCEL EXPORT / IMPORT
In the Quote spreadsheet, scale grids are represented in a given column and their base price is the element of the grid displayed in that column. Similarly to monetary columns, you can export and import the base price associated with scale grids.
Scale Grid Import/Export
The Excel export or import of scale grids themselves is not supported in Smart CPQ. Only the Excel Import / Export of their base price is.
When performing an export of a quote grid, the column containing the scale grid structure is not
exported itself. However, a column is exported, named from the concatenation of the name of the scale grid column + "Base Price" between parenthesis (e.g. "MyScaleGridColumn (Base Price)").
This column behaves as a monetary column with specifics linked to the fact that this base price is part of a larger scale grid structure:
- The import policies are respected: Keep, Clean, Merge.
- Modifying the base price in the export file and importing the file again overrides the corresponding base price value in the quote grid.
- If it is not possible for the scale grid column to be updated (due to its modeling), then the value is ignored and not updated in the quote.
- It is impossible to update the base price of a reference scale grid. Only editable/negotiated scale grids can be updated via an import action.
- A specific use case could occur where you import an Excel file with base prices into a new empty quote (or as part of a new line manually entered in the export file).
- In that case:
- either the negotiated scale grid is created during the import and its base price is overridden accordingly,
- or there is no grid created, the cell remains empty and the base price is not imported.
- In that case:
JSON Import / Export
IMPORT PERSPECTIVE
The standard JSON import mechanism leverages the information contained in the JSON file as well as the definition of a column or field and its value on the destination quote to either keep the destination value, override it, or reset it depending on what is imported.
- When importing on a UserInput only, the imported uiCell value is taken into account if populated. If not, the cell value is taken into account (if populated).
- When importing on a UserInput & Computed variable, only the imported uiCell value is taken into account if populated (If equal to noValue, the destination is reset, else, the imported value overrides the destination).
EXPORT PERSPECTIVE
The standard JSON export mechanism exports a given field or column depending on its content and its definition (computed value only, user choice/input only, user choice overriding a default computation etc.).
Two modes exist for the export:
- exportMode = FORCE_USER_INPUTS
Export all user inputs including noValue to ensure a proper cleaning if used for import to merge inputs on an existing quote. On JSON, pure user inputs are registered on both cells and userInputCells section to enforce import on another model definition.
- exportMode = EXCLUDE_NO_VALUES (default value)
Only exports true values (excluding noValue). This export can be re-imported on an empty quote but may badly behave for data cleaning when merging on an existing quote (use FORCE_USER_INPUTS instead in this case).
Mass Edit
The Performance Quoting module provides the capability to quickly edit several cells at the same time. This can be done through the Mass Edit action.
GENERAL
- Applying changes on cells with a Mass Edit will be treated as individual user inputs on each targeted cell,
- Mass Edit will not overpass user permissions. If a cell in the scope of the action is not editable for the current quote session, then it will not impacted,
- Mass Edit will not allow to apply out of domain values to a cell that doesn't permit it,
- No roll-back capability is available after a Mass Edit has been performed.
USE MASS EDIT
To use Mass Edit:
Open the Mass Edit window. There are 2 ways to do this:
- Click on the Modify action menu in the header and select Mass Edit, or
- Right-click on a selection of lines, cells, or columns and select Mass Edit from the drop-down list
MASS EDIT OPTIONS
When displaying the Mass Edit window, several options are offered:
| Select the column that is targeted by the Mass Edit. | In case one column was selected before calling the Mass Edit action, then this column will be defaulted here. In case some cells referring to one column were selected before calling the Mass Edit action, then this column will be defaulted here. | |
| Select the update mode. | To apply an incremental or decremental update to the selected lines/cells, pick one of the following options: Absolute value +/- : Available only for numeric, integer, percentage, and monetary values. Will increase or decrease each current cell value by a specified value (with respect to the column datatype). Example: $ 10 added on all selected lines (note that you can also set the increase using another currency thanks to the drop-down) Percentage +/- Available only for numeric, integer, percentage and, monetary values. Will relatively increase (if positive value inserted) or decrease (if negative value inserted) each current cell value by a specified percentage. Example: Apply a 20% increase of selected lines Cost Estimates | |
| Select the update mode. | To reset the values of the selected lines/cells, use the following option : Clear Available for all data types. Will delete any user input value from the selected cell. As a result, computed cells will receive their computed value, and non-computed cells will be empty. | |
| Select the update mode. | To override the values of the selected lines/cells or apply a specific guidance threshold, pick one of the following options: Replace Available for most data types (with the exception of HTML, XML, JSON, Locale, Unit of Measure, Attachment, and Period) Will replace override current cell value by a specified value (with respect to the column datatype). Apply Guidance In case some cells of the Mass Edit scope are associated to a guidance selector, then a specific option to replace values with respect to the guidance is offered. A menu is displayed, offering the choice in the union of all guidance thresholds of the selected cells. The threshold selected will be applied to all cells where it is relevant. | |
| Select the update mode. | To copy the values from one column to another for selected lines : Copy From Available for all data types. Select the target column that should receive copied values. Select the source column from which data should be copied (only columns with a similar datatype are presented). | |
| Go through a summary and confirmation window. |
FULLY OR PARTIALLY MASS EDIT ACTIONS
It is possible to predefine mass edits settings as an action in the quote model and use them in some grids.
The action that has been defined can be:
- Fully defined
- All needed settings to run the mass edit are set in the action definition.
- In that case, the user sees a summary pop-up and is just asked for confirmation of the mass edit application
- Partially defined
- Some settings to run the mass edit are set in the action definition.
- In that case, the user opens the mass edit window with all defined setting set by default.
- The user is able to change those settings, and needs to finish entering needed values before being able to apply the mass edit.
SCALED PRICING SPECIFICS FOR MASS EDIT
In the Quote spreadsheet, scale grids are represented in a given column and their base price is the element of the grid displayed in that column. Similarly to monetary columns, you can update in mass the base price associated with scale grids.
Scale Grid Mass Update - The creation or update in mass of scale grids themselves is not supported in Smart CPQ. Only the mass update of their base price is.
The lines to which the mass update applies must be associated with a scale grid in the corresponding column. If one or several lines in the selection are not, then the mass update is not applied to those lines. The mass update still continues to be executed though, and all the compatible lines are updated. Following the same principle, quote lines with no scale grid yet but authorized to have one in Control are eligible to the action: applying the mass update applies a base price value to each eligible scale grid.
The workflow is the same as described above, meaning that you have first to select lines in the quote and use the Mass Edit action on a given scale grid column.
The following Edit Modes are then available for scaled price base value:
- Clear Scale Grid: This mode applies to the whole scale grid and not only to the associated base price. In this mode, the mass action deletes the whole scale grid - including its base price. As a result, depending on the refresh mode you put in place for this column, it may be computed again based on the grid available in Control/RTPE, if any.
- CopyFrom: A monetary column can be selected so its values are copied in the scale grid column to replace the base price there. This action applies to the base price only. It is not possible to copy the base price values from another scale grid column.
- Absolute: An absolute value is applied to the base price value of the scale grid. The currency in use is the one associated with the base price. This action applies to the base price only.
- Percentage: A percentage is applied to the base price value of the scale grid. The currency in use is the one associated with the base price. This action applies to the base price only.
- Replace: A new value is applied to the base price value of the scale grid. The currency in use is the one associated with the base price. This action applies to the base price only.
Price Goal Seek
The Performance Quoting module provides some capabilities to edit several cells at the same time, regarding a global price target, but without necessarily applying the same discount conditions to each line. This feature is called the Price Goal Seek.
GENERAL
Two kinds of Price Goal Seek functionalities are available in the Performance Quoting module:
- Discount Goal Seek: Target price for a group of lines will be reached by applying a discount on lines with respect to a weight and frozen lines.
- Guidance Goal Seek: Target price for a group of lines will be reached by applying a discount on lines with respect to guidance levels and frozen lines.
Both functionalities will be detailed later in this section. Price Goal Seek is used in the quote model in a reference to:
- Quantity
- Unit list price
- Discount percentage
- Unit net price
The above are used when trying to reach the price goal (on the total net price level) by applying discounts as per the action definition in the quote model.
Price Goal Seek is only applied when the user calls for it, and will not be re-evaluated by the system if any values change in the future.
SCOPE OF APPLICATION
In case of a hierarchical selection of lines, only product and specific lines will be edited and considered by the Price Goal Seek (not folders).
Each Price Goal Seek action declared in the quote model is specified with a scope of application: root or leaf.
Depending on the scope of application defined, root or leave lines will be edited for hierarchical products (configured products, bundles, etc.).
FROZEN LINES
The Price Goal Seek action definition may reference a column as a frozen column. In this case, a check box can be checked by the user (using a Boolean-type column) to prevent the Goal Seek action to update the related lines. Those lines remain used in the computation of the total net price,
however, as any other line of the application scope.
CALLING A PRICE GOAL SEEK
Price Goal Seek actions are declared individually in the quote model and are accessible in the Modify menu or in the contextual menu when right-clicking on lines and cells.
DISCOUNT GOAL SEEK
The Discount Goal Seek is entered by defining a target price or a target discount that allows the system to compute the target price (using unit price, net price, and quantity columns information provided in input of the action definition).
Based on the target price, the system tries to apply discounts on lines included in the scope so that:
- The sum of total net prices for those lines equals the price goal value.
- Lines marked as frozen are not impacted.
- Discounts are computed with respect to the weight column that will indicate how discount percentages should be distributed between lines (a weight 2 line will receive a discount twice as big as a weight 1 line).
Discount Goal Seek Example
There are 4 lines in a folder. One of them is marked as frozen and one of them has a weight of 2 instead of 1.
The user calls for a Discount Goal Seek on the folder, asking for a total net price discounted by 10%.
The system applies discounts on lines of the scope accordingly, by:
- Not changing the frozen line,
- Applying discounts with respect to weights,
- Ensuring the global result is a 10% discount on the folder net price.
GUIDANCE GOAL SEEK
The Guidance Goal Seek is entered by defining a target price or a target discount that allows the system to compute the target price (using unit price, net price, and quantity columns information provided in input of the action definition).
Based on that target price, the system tries to apply discounts on lines included in the scope so that:
- All net prices are in the same guidance level,
- All net prices are positioned at the same relative position between lower and higher guidance levels,
- The sum of total net prices for those lines equals the price goal value,
- Lines marked as frozen are not impacted.
Guidance Goal Seek Example
There are 3 lines in a quote.
The user calls for a Guidance Goal Seek on the folder, asking for a total net price of $22. The system applies discounts on lines of the scope by computing that:
- The target price can be reached by having all lines prices between expert and target prices,
- The target price should be at 50 % between Expert and Target prices on all lines.
Therefore the result:
ERROR CASE
In case of a goal defined by the end user that cannot be reached for some reason, no change will be applied at all and an error will be shown to the end user.
Smart Mass Update
OVERVIEW
The Smart Mass Update feature intends to keep the quote consistent regarding similar lines, on some particular columns. A very common use case is to ensure that similar products receive the same negotiated price/discount if there several of them in a quote.
RUNTIME BEHAVIOR
Some line templates will have some cells that are marked as Smart Mass Updatable in the quote model. When changing a value on a cell that is marked as such, the system will automatically look for similar lines, and report the value as a user input on the same column for those lines.
Only user input values will trigger a Smart Mass Update.
FINDING SIMILAR LINES
Similar lines will be identified based on the Functional Primary Key (FPK), regardless on any hierarchical information. They can be of distinct line templates, only the FPK will be considered. The line considered can be of any kind (folder, product, specific, bundle_specific, bundle_product).
REPORTING THE SAME VALUE
Smart Mass Update is done by applying user input on targeted cells. Any editable cell of the quote can be targeted. A reset of a value is considered as a user input and will be propagated to similar cells as for any user input.
ADDING A LINE
When adding a product from the catalog or from a create line action, after the system has performed the Line Template and FPK resolution, it will identify if there are some cells that are marked as Smart Mass Updatable. If yes, then it will look for similar lines already in the quote and if there are some, will retrieve potential user inputs values from those lines.
CHANGING A FPK OR LINE TEMPLATE
When a line FPK or Line Template is changed, then, as for a new line added in the quote, if there are
some cells that are marked as Smart Mass Updatable for the current Line Template, the system will look for similar lines already in the quote and if there are some will retrieve potential user inputs values from those lines.
IMPACT FROM MASS EDIT
When performing a Mass Edit, if you request to apply distinct values on cells that are supposed to be similar as per the Smart Mass Update rule (example Copy from a column with a distinct value for those lines), the last value applied will apply to other lines.
IMPACT FROM IMPORT
When importing lines, if you request to apply distinct values on cells that are supposed to be similar as per the Smart Mass Update rule, the last value imported will apply to other lines.
IMPACT FROM PRICE GOAL SEEK
A Price Goal Seek result may go against the consistency of the Smart Mass Update rule. In that case the Price Goal Seek is not applied and a message is displayed to let the user know that "Price Goal Seek is not applied due to inconsistent result."
IMPACT FROM REFRESH & MODEL MIGRATION
A refresh or a model migration can trigger a change of Line Template and therefore change the FPK for a line or the cells that are marked as Smart Mass Update. After that process, the system checks if there are similar lines from which retrieve a value as for any FPK value change.
Inconsistencies Management Impact from Access Rights
The Smart Mass Update can create access rights violation. In case of similar lines, but with one that is not editable for the current user, then when editing the editable line the value is reported to the non-editable one.
Impact from Domains
The Smart Mass Update can create domain violation. Example of similar lines, with cells that are smart updatable relying on 2 distinct domains (0 to 10 for line A, 5 to 15 for line B). The user
enters the value 3 on line A. Then the value 3 is applied on the line B also despite the fact that it's out of domain.
Best Practices
As per previous examples, the quote will not be in an inconsistent state (2 similar lines with 2 distinct values that should be the same, etc.). Therefore, it is recommend to use consistent access rights and domains with the smart mass update that is expected to run. This means that the quote model should avoid having different user permissions and domains for cells that are linked regarding the smart mass update.
Scaled Pricing
Scaled pricing allows you to decrease or increase the price of a product as the amount you sell increases.
TYPES OF SCALES
There are three variables that define the types of scales: Threshold, Calculation Method, and Offset Type.
Threshold:
- Quantity - Defines break points according to the quantity sold.
Calculation Method:
- Cumulative - Calculates breaks as the quantity increases.
- Graduated - Sets breaks according to the quantity.
Offset Type:
- Numeric - The offset is the given amount.
- Percent - The offset is a percentage of the item price.
Scales can also be configured to allow non-zero bases, meaning with no price for volumes between 0 and a given number. That number serves as the minimum number of items that you can have in an order.
The type of scale is set in Smart Price Management and cannot be changed in Smart CPQ. For more information, see Scale Pricing in Smart Price ManagementNo Content found for /db/organizations/conga/repositories/current/content/documents/Production/Price_Management/user_guide/pricing_managing_prices/pricing_managing_prices_scaled_pricing.dita.
SCALED PRICING SCENARIOS IN SMART CPQ
Quote to Order
In a Quote to Order scenario, a scale structure is already associated with scale-based products. For
those products, Smart CPQ is able to compute their price based on the corresponding scale breaks. From the Sales Rep standpoint, this scenario consists in adding products to the Quote and negotiating the Quantity (Scaled Pricing Threshold) of each products to get the best possible price. You are also able to visualize the scale structure for each product in the CPQ interface and place the value of the threshold as part of the price negotiation.
Quote To Agreement
In a Quote to Agreement scenario, a reference scale structure is already associated with products. Compared to the Quote to Order scenario, the purpose is to negotiate prices for a portfolio of products in order to define the contractual frame for future transactions. From the Sales Rep standpoint, when it comes to scaled pricing, they can negotiate the scale structure and values of the product portfolio instead of negotiating the quantity for a given set of of products in an order. A Sales Rep can not only visualize the scale breaks associated to a product in the CPQ interface, but also edit the scale structure to add, delete, or update scale breaks and modify the associated base price/value. A Sales Rep is able to see the reference scale grid - the grid on which prices are currently based as part of the agreement - and to modify a negotiated scale grid which replaces the reference scale grid when approved and published.
In addition, Sales Reps have the capability to create a scale grid from scratch for eligible products. The edition experience is the same as above, except that no reference scale grid exists in Control yet for those products. Note that some products cannot be associated with a scale structure.
For more information on Workflows for Scaled Pricing, see Data Flows - Scaled Pricing.
Scale pricing is not supported as part of the CPQ Pricing scenarios.
USING SCALED PRICING
When you create a quote and add a product that is ruled by scale breaks, you see a scale icon in the base value/price cell of the corresponding quote line. The base value/price column is defined in the quote model where both the base value/price and the associated scale grid are stored:
Scale Grid Visualization
To visualize the scale grid for the product in read-only mode, hold the mouse over the scale icon in the corresponding quote cell.
The scale grid is displayed in a pop-up window:
The header includes the following information:
- Scale name: Name of the price that is calculated based on the scale structure (e.g. Invoice Price).
- Base price: Base value on which the offset is applied to compute the target price.
- Method: A calculation method used to compute the target price based on the base price and offset.
- Unit of measure (UoM): UoM associated with the threshold of the scale grid and on which the target price computation is done in that scale grid. Each price in the scale grid (Base price, Target, Offset amount) must be read as price per UoM. The UoM is displayed in the header of each threshold column within the scale grid.
Example
Let's consider the grid below:
In that example, the UoM of the Per order quantity is Each. It means that the second scale break can be read as follows:
- For a quantity from 10 and below 40 units, the price of this product is $238.40 per unit.
It means that when applying the Cumulative method for a quantity of 12 units, the invoice price will be 12 units * $238.40 per unit = $2,860.80
The scale grid component can display up to 2 scale grids, Current and New:
- If a scale grid is already defined in Smart Price Management, then the Current grid is displayed on the left part of the scale component (Quote to Order scenario, where you see only the grid that is the current reference for scaled pricing). If no scale grid is associated with the product yet, there is no Current grid displayed.
- If it's possible to create/update a scale grid for the product in CPQ, then the New scale grid is displayed on the right part of the scale component (Quote to Agreement scenario, where the reference scale grid is displayed next to the negotiated one).
Each scale grid shows:
- Threshold (quantity). The label of the column header is the one from the corresponding column of the quote spreadsheet. It also contains the UoM of the threshold.
- Offset: Offset applied to the Base Price to obtain the Invoice Price/ List Price.
- Target (e.g., List Price/Invoice Price): This represents the outcome of the scaled pricing computation. The label of the column header is the one from the corresponding column of the quote spreadsheet.
Open the scale grid panel by double-clicking the scale icon in the corresponding quote cell. The
scale grid is displayed under the quote line.
Viewing the scale grid for a product allows you to decide, according to the information in the scales, if you want to modify the quantity on the quote line. To do this, double-click the cell or click on the edit icon for that cell and modify the quantity as desired. Use the Enter key or click anywhere outside of the cell to validate the modification, and the scale grid disappears.
Display Currency
The scale grid component supports the display of a currency that is different than the currency of the quote or of the scale grid itself. It behaves as other monetary fields or cells in the quote when leveraging the display currency.
In that scenario, when editing amounts in a scale grid - either the base price or an offset amount - you can see both the amount expressed in the quote / scale grid currency, and the same amount converted in the display currency (see screenshots).
The amount associated with the display currency is displayed below the cell in edition. The amounts in the grid are displayed with the display currency.
In the example below, the quote currency is $ and the display currency is €:
- Base Price: edited in $ with the display currency below in €
- Offset amount: edited in $ with the display currency below in €
- Scale grid prices: displayed in the display currency (€) when not in edition
Scale Negotiation
You can also negotiate the scales and modify them directly in the quote. To modify the New scale grid, double-click the scale icon or the cell where the scale icon is displayed (base value column). The Current and New grids are displayed under the quote line.
In the header, you can modify:
- Base Price: Used to recalculate the Target (Invoice Price/ List Price).
- UoM: UoM associated with the threshold of the scale grid, and on which the target price computation is done in that scale grid. Each price in the scale grid (Base price, Target, Offset amount) must be read as price per UoM (see an example above). The UoM is displayed in the header of each threshold column within the scale grid.
The Method cannot be modified. Use the buttons in the header to:
- Add a scale break to the New scale grid list using the Add Scale Break button.
- Delete a line from the New scale grid - select the line and click Delete.
- Click Reset to change the New grid state back to the last saved grid.
- Save your changes by clicking the Save button.
You can also change the Threshold (quantity) and Offset values directly in the New scale grid by clicking the edit icon for each field. The Target (Invoice Price/List Price) is always calculated and cannot be modified manually. Click Save to save your changes. To set them back to the last saved scale grid, click Reset.
In the scenario where you can create a scale grid from scratch for products that are not, but can be, associated with one in Smart Price Management, the New grid is displayed as empty - it contains no Base Price/Value and no scale breaks. You can set a value for the Base Price
and Add, Delete, Reset, or Save scale breaks as in any other New scale grid.
Note:
- Edit rights on scale grids depend on the edit rights of the corresponding base price/value cell. If edits rights are not granted to you, the Add Scale Break, Delete, Reset, and Save buttons are not accessible.
- The Save button is grayed out until the scale grid is valid. For example if you add a scale break, you must fill in the Threshold and Offset for the Save button to be active.
- The scale grid is automatically ordered numerically by the Threshold value.
- If there is no value in Offset (see above), the Target price corresponds to the Base Price.
Mass Update of Scale Pricing Base Price
The creation or update in mass of scale grids themselves is not supported in Smart CPQ. Only the mass update of their base price is. Please see Mass Edit for more details.
Import / Export Scale Pricing Base Price
Scale Grid Mass Update
The Excel import or export of scale grids themselves is not supported in Smart CPQ. Only the Excel export / import of their base price is. See Excel Export / Import for more details.
Scales in Generated Documents
Once you are done with the visualization and negotiation of the scales, you can generate a document for your customer.
The scale grids appear in the document in two different ways:
- In a table listing the products of your quote
OR
- In a paragraph
Learn more in the How to Handle Scale Pricing in a Table section of the Dynamic Tables help topic.
Product Supersession
GENERAL
Performance Quoting provides Supersession capabilities, to ensure the proper products are added to the quote, with respect to the rules defined in the Catalog. The Supersession functionality is meant to handle the case where a product is no longer distributed, and replaced by another product of the Catalog. In this case, the user is still authorized to search for the old product, but is invited to use the new product.
Supersession is based on 2 aspects of the Catalog products attributes:
- Initial product should not be eligible to be considered as part of the Supersession (see elligibility rule in the Smart CPQ Catalog documentation)
- Initial product should be linked to a replacement product that will be used instead (see below)
FINDING A REPLACEMENT PRODUCT
In order to be superseded, a product should have a replacement product attached to it. Replacement products are linked to the original product by using Smart CPQ Catalog Product Links. Products can be configured so that there are several links to be followed to get the final replacement product. To sum it up, the replacement product is the deepest eligible product that is child of the original product through Replacement links (see schema below).
USING SUPERSESSION FROM THE UI
When searching for products in the Quote UI, the user will automatically be invited to use replacement products instead of original products. This will be available both from the grid quick search action, and also form the inline add functionality. In addition to products that match with the search criteria, the user will see in the result replacement products for those matching products.
Products that match with the search criteria, but are not eligible will be shown in the list of results, but the user will not be able to add theme to the quote.
If the product searched for is not eligible, then we will display a "product replacement". Otherwise we will display an "Alternative product".
USING SUPERSESSION DURING A REFRESH
Products can be automatically replaced during a quote refresh. In this case, product replacements will be applied on non-eligible products in the Replace mode, and on all products in the Force Replace mode. When replacing products by another, the quote will update as many user input values as possible on impacted lines.
USING SUPERSESSION DURING AN IMPORT
Products can be automatically replaced during an excel import. In this case, product replacements will be applied on non-eligible products in the Replace mode, and on all products in the Force Replace mode.
User Rules
The Performance Quoting module provides the capability for you to define specific rules that will apply to some values of a subset of quote line items.
This feature, called User Rules allows you to define a static value to be applied on a column for lines that belong to a filter it also defines.
The idea is to provide some values that should be applied to some lines automatically as per your decision.
Example:
- As part of my negotiation with my customer for my current quote, we agreed that he would get a 10% discount on all products for which a slow delivery is authorized.
- You create a rule, with a filter on line items that are eligible for a slow delivery, with a 10% value for the discount.
- During the quoting process, any product added to the quote that has a slow delivery option will automatically receive a 10% discount.
- Also, if you change the slow delivery option from false to true on a product available in the quote, then the discount is set to 10% automatically.
- On the other hand, a product line item for which the slow delivery option is deleted will see its discount being reset to the default value.
ACCESSING AND MANAGING USER RULES
You can open the User Rules window from any grid component, by using the Modify menu, and then the Open rules option.
MANAGING USER RULES
The User Rules window provides several options to administer active rules. The Create rule button allows you to define a new rule to be applied. The Actions menu can be used to Duplicate, Edit, or Delete an existing rule that was previously selected in the list.
To close the window and apply rules, click Save.
DEFINITION OF A USER RULE
The definition of a Rule is done in 2 main steps: Scope and Value. Navigation between the 2 steps can be done by using related tabs, or by clicking on the Next button. You can come back to the list of Rules with the Cancel button.
User Rule Scope
The scope specifies which lines are impacted by the rule. Lines will be considered as in the scope if they are part of all subsets of lines included in the scope.
The scope is defined by:
- A Description - the description helps you understand what is behind that rule when you see it in the list of Rules.
- A Component - which refers to a grid of the quote model. The component selected will bring the list of line items that are included in this grid by default.
- An optional filter - built from a list of Columns, Operators, and Values, such as a user filter in a grid.
User Rule Value
The value defined what should be changed for lines included in the scope. It is composed of:
- A Column - the one that should be impacted by the rule.
- An Edit Mode - to be selected between two modes:
- Replace - will change the cell value by another fixed value
- Copy from - will change the cell value by another one from another column
- A Value or a Column to be used for the Rule, depending on the mode.
When done with the Rule definition, you are guided to the updated list of Rules.
EXECUTION OF USER RULES
Rules will be executed from bottom to top of the list. That means that if two impact the same cell, then the one defined in the first position of the list will effectively apply. For each rule, for each line in the scope, the system will check if the cell that should be impacted by the rule is marked as "Rulable" in the model. If yes, then then system will apply the rule as a computation result on the cell. If a user input is also set on that cell, then the user input remains as the actual cell value, as for
any cell with both computed and user inputs values.
ERROR MANAGEMENT
The system prevents you from creating inconsistent rules as much as possible, by deleting them when saving. If some rules create a problem, such as an infinite cycle, an error message will be raised to inform you about what is happening.
ACCESS RIGHT MANAGEMENT
Specific user permissions can be applied to allow you to open the user rules window, but not allow you to change anything on rules.
Currencies
The Performance Quoting module is able to manage several currencies in the same quote. The storage and display are split into 2 concepts:
- Reference currency: currency used for data storage.
- Display currency: currency displayed in the quote sent to the user.
Use cases:
- ABC company is a company selling materials in USD. So, they create their quotes in USD. They have some European customers buying materials in USD but they want to see prices in EUR (their local currency). They can change the display currency to EUR, which doesn't affect the final price and allows the customer to see the prices in his currency.
- Petrol company is an European company selling Oil & Gas. They sell raw materials (in USD) and services (in EUR). They create their quote in USD and use EUR as a reference currency for service lines. This allows Petrol to sell some elements in USD and others in EUR without Conversion rates affecting their prices.
Aggregation Lines
OVERVIEW
The aggregation lines let you automatically generate summary rows in a quote. These rows group together existing quote lines that share common characteristics - such as brand, color, or category - and display consolidated totals for each group.
Aggregation lines are fully managed by the system and are refreshed automatically as the quote changes.
For instance, consider a quote that contains the following products:
If an aggregation line template is configured to group lines by Brand, the system will automatically generate the following aggregation rows in the quote (see the right part of the picture below):
Aggregation lines are created and deleted automatically by the engine. The system scans all standard lines in the quote, applies the filter conditions defined in the grouping rule, and groups matching lines by the configured variables.
A new aggregation line is created for each unique combination of grouping values found. If a group no longer has any matching lines, its aggregation line is deleted automatically.
Click here for more details on how to model Aggregation Lines and Views.
INTERACTION WITH QUOTE LINES
Aggregation lines are linked with standard quote lines in the sense that the aggregated data is coming from those quote lines. Any change on quote lines participating to the aggregation could thus impact aggregation lines. For example, in the previous chapter above, a change of the price of any Apple phone will impact the total price of the Apple aggregation lines.
Conversely, you have means to perform a change on an aggregation line that could trigger an update of the associated quote lines. A specific formula (PARENT_AGGREGATION) must be used on the quote line participating to the aggregation so it can be updated if a specified column of the aggregation line changes.
For instance, in the example above, let's imagine that a Sales Rep wants to apply 12.3% discount on all the Apple products. The above formula would allow that Sales Rep to set 12.3% in the Discount
cell of the Apple aggregation line and would automatically update the discount value for all the quote lines participating to that aggregation, namely the ones corresponding to the Apple products:
Click here for more details on how to model interactions between quote lines and aggregation lines.
The update is possible only from the lowest level in the hierarchy of aggregation lines. It means that if you have more than one level of aggregation, then only the level of the lowest children can be leveraged for the modification of quote lines.
AGGREGATION LINE SPECIFICS
Aggregation lines come with some dedicated behaviors:
- The mass updates can be performed on aggregation lines and on a view mixing aggregation lines and standard quote lines. The logic of the mass update remains the same, whatever the type of line. In the scenario where the mass update applies to aggregation lines only, it does not impact the quote lines participating to the aggregation.
- Price Goal Seek is not supported on Aggregation Lines.
- During a standard refresh operation, aggregation lines are ignored.
- Aggregation lines cannot be used as a source or as an insertion point for the following operations: Add, Mass Add, Copy, and Move. These operations will be blocked if an aggregation line is part of the selection or the insertion point.
- Aggregation lines are included in exports like any other line. The export also includes a count of
the total number of aggregation lines on the quote.
- Aggregation Lines can be embedded in documents generated via the ad-hoc Smart CPQ module.
- Aggregation Lines can be synced in CRMs as part of the standard integration of Smart CPQ with Salesforce and Microsoft Dynamics.
- The total number of aggregation lines on the quote is traced in the Error Inspector
