Quote
Integrating CPQ Quote
Quote is generally the main integration point. As a Configure, Price, Quote solution, CPQ embeds the Catalog and the Configurator modules providing in addition the capability to manage quotes that receive standard products from the Catalog and customized products from the Configurator.
Quote is thus the one package in the out-of-the-box integration with Salesforce.com.
For more details on the standard Salesforce.com integration, please refer to CPQ Deployment & Customization Guide for Force.com.
This chapter focuses on the integration of CPQ, sections detailed below are:
- The initialization XML file,
- The integration of external business logic,
- The integration of the standard user interface into a hosting application
- The use of the web services for additional operations.
Initialization XML file
MAIN PARAMETERS
$CPQ_home_folder$/conf/run/settings/cart
The following table explains the usage of each parameter you can find/modify in the setting file.
| PARAMETER | DESCRIPTION |
|---|---|
| operationType | Operation Type can be: createCart (to create a new quote or open an existing one) createFromRelease (to create a new release on an existing quote) openRelease (to open a specific quote release) openReleaseRO (to open a specific Quote Release in Read Only mode) deleteRelease (to delete a specific quote release) deleteAllReleases (to delete all quote releases for "cartId" value) copyCart (to copy an existing quote release with "targetCartId" as new id) openReleaseStateless (to open a specific quote release and execute a stateless action "initAction" on it) The operation type indicates the type of action to apply on the quote identified by the cartId. |
| lazyLoading | For internal use only. Do not change. |
| cartDomainId | If no domain is used keep the default '-' value. Otherwise you can specify a domainID |
| cartId | The quote ID on which the Operation Type applies. |
| cartRelease | The release number on which the Operation Type applies |
| targetCartId | The target quote id is only used for operation type 'copyQuote' to specify the new quote id |
| modelName | Quote model name to be used to create or open a quote (e.g. CPQModel_BasicSample.) |
| modelRelease | Quote model version to be used to create or open a quote.(e.g. '1' to target the following model file: CPQModel_BasicSample-1.xml) |
| theme | Theme to be used (corresponding to the name of the theme directory). This parameter is optional. If no theme is given in this xml tag, then the name of the theme to be used when starting a quote is the first one found out into the layout file. It is recommended to keep the Theme empty in the XML Settings in particular when implementing a multi-channel/multi-device environment. |
| layout | Layout file to be used (e.g. 'cpqUI' to target the cpqUI.xml layout file) |
| channel | INTERNAL USE ONLY – Keep this value blank |
| language | Language to be used. |
| currency | Currency to be used. |
| targetURL | For internal use only. Do not change. |
| redirectModeOnClose | Optional. When CPQ is embedded into a frame, determines whether UI redirection will be done within the frame or at browser level when closing spreadsheet. Possible values are [inside,top]. Default value=top. If redirectModeOnClose = top, the 'CloseSpreadsheet' action redirects to a page of the navigator Whereas if redirectModeOnClose = inside, and CPQ is integrated into a frame of the hosting application, then the redirection is done only within the frame. This parameter can be overwritten when calling CPQ web service. |
| userGroup | CPQ user group to be used. |
| userId | CPQ user id to be used. |
| userName | CPQ user name to be used. |
| ownerGroup | Optional. Overrides current quote owner group if ownerId is specified |
| ownerId | Optional. Overrides current quote owner id if ownerId is specified |
| ownerName | Optional. Overrides current quote owner name if ownerId is specified |
INIT/BACK ACTIONS SECTION
The Init action corresponds to the action automatically launched when opening the Quote (for example you can directly launch a Catalog session and by-pass the spreadsheet UI).
In case the operation type is ‘openReleaseStateless’, the action must be a "stateless trigger".
The Back action corresponds to the action automatically launched when returning to the Quote (e.g. when returning from the Catalog/Configurator to the Quote).
CUSTOMSETTINGS SECTION
This section allows to list the settings (volatile attributes) passed to the quote controller. These settings are injected in the Configurator/Catalog engines as CPE with the following syntax:
CPE.Settings.Session.Application.myCustomSettingName
These settings are not saved with the configuration and are re-injected on each reload of the configuration.
CONNECTORSDATA SECTION
In the connectorsData section (optional section), you can specify which services (as well as their parameters) are available in the current CPQ session. Please note that the services described in this WS XML are merged with the 'default' services described in the services.properties file.
CARTDATA SECTION
The dynamic default values correspond to quote fields (header or footer) values that can be set automatically when opening the quote. Please note that you can either use the overwrite policy or deactivate it. If overwrite="yes", the specified dynamic values override the values found in the opened quote. If overwrite="no", the specified dynamic values is only set if the field is empty in the opened quote (but no override of already existing values).
How to use external business logic?
USE OF EXTERNAL SERVICES IN THE TRIGGERS/CELLS
Refer to Quote Designer And Customization Guide (macros and java classes).
USE OF EXTERNAL SERVICE IN THE QUOTE USER INTERFACE
Refer to Quote Designer And Customization Guide (eLinksPage).
How to use standard CPQ interface?
CONCEPT
CPQ provides a standard interface that can be used directly from a hosting application (such as a portal for example or a CRM like in the following example).
This standard interface can be integrated by means of:
- Redirection in the whole client web browser
- Opening a new window for client web browser
- Redirection in a frame in the client web browser
Communications between the hosting application and CPQ are based on IN and OUT calls using standard web services named “cart” and “cpqexit” whose exchange flows are based on XML messages.
“IN” WSDL – cart :
Server stub part is deployed within CPQ Application Server and is ready to use Client stub part must be generated and deployed within the hosting application
“OUT” WSDL – cpqexit :
Client stub part is deployed within CPQ Application Server and is ready to use Server stub part must be generated and deployed within the hosting application
To go back to the hosting application from CPQ, a highly customizable mechanism is also provided. Server stub part is deployed within CPQ Application Server and is ready to use
Client stub part must be generated and deployed within the hosting application.
DETAILED INTEGRATION PROCESS
Initialization and start
Step 1: By using the WSDL definition file “cart.wsdl”, the client stubs must be generated and placed into the hosting application classpath.
Step2: A client instance is created and the target point is defined with the correct CPQ URL
Step 3: Input parameters are set
If the quote persistence is not managed by CPQ, an additional parameter allows sending the XML corresponding to quote data object (header, lines, footer):
In addition, the exit URL and/or the WS URL (based on the OUT WSDL cpqexit.wsdl) can also be set
as input parameters
Step 4: The runUI action is executed:
Step 5: The hosting application redirects to the output URL.
For more details on the XML initialization flow, please consult the previous section “Initialization XML file” and the related Web Service Javadoc.
Zoom on possible operation types at this step:
In the session XML flow used as parameter for the runUI method, following operations can apply:
- createCart to create a new quote or open an existing one.
- createFromRelease to create a new release on an existing quote.
- openRelease to open a specific quote release.
- openReleaseRO to open a specific quote release in read only mode.
For all of these operations, the quote is identified by cartDomainId, cartId and cartRelease.
Back to hosting application
To go back to the hosting application from CPQ, a CloseSpreadsheet action must be implemented as a grid action in the quote model.
An optional parameter called delegateClassName, which corresponds to a custom Java Class, can be associated to the CloseSpreadsheet action.
The delegate class has to:
- Implement the interface: com.accesscommerce.cart.runtime.computations.IDelegateOnDemandAction and the method execute(…)
- Be added to the CPQ classpath
The behavior of the CloseSpreadsheet action is as follows:
- Execution of the delegate class if exists
- Execution of cpqexit.wsdl client method sendXML if WS URL has been declared on quote WS init method (runUI)
- Unlock of the quote controller
- Redirection to the URL associated with the general setting called redirectOnClose defined into Cart.cfg file or the one that has been eventually set in delegate class or the one set with the cart WS init method (runUI).
- The current PK of the quote is given in parameter of this URL.
- cartId is the parameter name for quote id
- cartRelease is the parameter name for quote release number
- domainId = is the parameter name for domain id
- This page is generally an intermediate JSP page which manage the redirection to the hosting application
- The current PK of the quote is given in parameter of this URL.
Process overview:
Example of delegate class:
Example of close JSP - setting redirectyOnClose is used:
The setup is made via the setting “redirectOnClose” defined in the cart.cfg file (located into the /“conf”) :
redirectOnClose=http://customer.com/close.jsp
How to directly access to Catalog/Configurator UIs?
When the end-user must be redirected to the Catalog or a Configurator UIs, the access to the Quote
can be hidden thanks to the use of an additional initAction section in the XML initialization file (when calling the runUI quote web service method).
Please refer to the previous “Initialization and start” section for details on how to fill-in the XML initialization file.
The section initAction corresponds to a quote model action that will be executed while the redirection to CPQ URL is performed.
The initAction can be a Catalog or a Configurator one. The attribute name corresponds to the action name defined in the quote model.
- For a Configurator list action, two parameters are allowed:
- confServiceNames which gives the Configurator service to open. Mandatory.
- runFirstExistingConf (YES/NO) which indicates if (when exists) the configuration associated with the first quote line is re-launched. Optional.
- For a Catalog list action, only one parameter is allowed:
- catalogServiceNames which gives the Configurator service to open. Mandatory.
- catalogServiceNames which gives the Configurator service to open. Mandatory.
In the quote model, corresponding actions ConfiguratorList and CatalogList must be therefore defined:
In the services.properties file, these services must be also declared:
For more details on quote services definition, please refer to Quote Designer And Customization Guide.
Process Overview:
Back directly to Hosting application UI
In the case where the quote content should not to be shown once returning back from the Catalog or the Configurator, it is possible to add a section backAction in XML initialization file.
Please refer to the previous “Initialization and start” section for details on how to fill-in the XML initialization file.
The section backAction corresponds to a quote model action that will be executed while going back to CPQ UI from Catalog or Configurator UIs.
In this case, the backAction should be a CloseSpreadsheet one. The attribute name corresponds to
the action name in the quote model.
In the quote model, corresponding action must be therefore defined:
Moreover, as seen in paragraph “Back to hosting application“, a delegate class can be also defined in order to integrate the quote content within the hosting application.
Process Overview
How to set-up a multi-device environment and use a dedicated business application interface?
CONCEPT
CPQ can be integrated and called from a portal or a CRM and be rendered either in a standard desktop web browser or embedded into PROS Smart CPQ application (which is an IPAD native application)
A CPQ implementation can be integrated across multi-channels and using several type of devices (Standard web browser / iPad tablets)
This contextualization of CPQ for a type of device is called a “Business Application” or “BizApp”
BUSINESS APPLICATION SET-UP PROCESS
In the following example, the procedure explains how to set-up CPQ for a deployment for internal users using both standard web browsers and Smart CPQ native application.
To set-up this kind of environment you should follow the steps below.
- Set-up the SOURCE environmentNote: We recommend that the web implementation corresponds to the reference environment
This environment will be called the “Source BizApp”. It is not associated to a Business Application Name.
- Set-up the Smart CPQ environment
This environment will be identified by a Business Application Name “TouchTablet”
- Duplicate the SOURCE quote model and rename it as follows:
- TouchTablet model name = Source model name + ‘_’ + bizApp name
- E.g: SOURCE_Model-1.xml >> SOURCE_Model_TouchTablet-1.xml
- Create the TouchTablet layout and name it as follows:
- TouchTablet layout name = Source layout name + ‘_’ + bizApp name
- E.g: cpqUI_SOURCE.xml >> cpqUI_SOURCE_TouchTablet.xml
The Quote Layout to be used on a tablet device has to be a “Version 2” layout. Please refer to Quote Designer Guide for more details.
- Adapt the model / layout and themes for the TouchTablet bizApp according the expected UI rendering.
- Adapt the services:
- Configuration and Catalog UIs may be different depending on the device. Most of the time, the UI to be displayed on a tablet will be dedicated to this usage
A Smart CPQ default layout and themes are delivered by default with CPQ UI. Please refer to CPQ Customization Guide for more details.
- In order to allow a different UI, it is possible to create a variant of the SOURCE service parameters
E.g: The CONF service parameters that will be used by CPQ TouchTablet variant will be the parameters of the service.CONF service overridden by the ones defined
via service_TouchTablet.CONF (if any)
Hereafter, a xmlLayoutURI is defined for the CONF service for the web deployment and another one for the TouchTablet deployment
### SOURCE Service CONF ###
service.CONF.confType=CP7
service.CONF.xmlLayoutURI=configuratorUI.xml
service.CONF.xmlConfigurationURI=configuration.xml
service.CONF.xmlManufacturingLayoutURI=manufacturingUI.xml
service.CONF.xmlSavedConfigurationURI=saved-configuration.xml
service.CONF.xmlManufacturingLayoutURI=manufacturingUI.xml
service.CONF.FR=Mon Skate
service.CONF.US=My Skate
### TouchTablet variant of SOURCE Service CONF ###
service_TouchTablet.CONF.xmlLayoutURI=configuratorUITouch.xml
Keep in mind that the quote models must be compatible across all device/channels. In particular:
- DB columns mapping, propagation rules, computations macros, business logic…. MUST NOT be modified between the Source and the TouchTablet model.
- Service IDs/Names MUST BE IDENTICAL in both models.
Only the access rights, columns visibility, available actions or any UI related elements can be different between both models.
HOW TO CALL A BUSINESS APPLICATION INTERFACE?
Smart CPQ app
The Smart CPQ native application corresponds to the Business Application identified by the name: “TouchTablet”
To call the application from Safari on iPad and launch the native Smart CPQ wrapper, the following URL can be used:
camTouch://?
It must be followed by system mandatory parameters:
- cameleonUrl which corresponds to the URL of the CPQ server
<IP CPQ SERVER>:<PORT CPQ SERVER> - Same parameters as the cartLogin URL described below.
Indeed, the native Smart CPQ application calls the cartLogin URL with all its parameters and overrides the value of the ‘bizapp’ and the ‘device’ parameter.
cartLogin URL
Instead of generating and using quote web service client stub to call the method runUI, and then get the URL to redirect to, the following URL can be used to launch a business application UI:
http://:/cart/cartLogin.do?
It must be followed by system mandatory parameters:
- az which corresponds to the quote PK (
domainID.cartID_release) to open/create
Additional optional system parameters can be added:
- dw - gives the name of the file to open the quote
- by - corresponds to CPQ WS login
- cx - corresponds to CPQ WS password
- fu - corresponds to the host user
- ev - corresponds to the host session
- device - corresponds to the device (not mandatory, except for Smart CPQ native app (=”Ipad”),
=”web” by default)
- bizapp - corresponds to the business application name (=”TouchTablet” when used from Smart CPQ native app)
Eventually any required custom parameters.
Step 1: Create the java connector which will be in charge to analyze and treat the URL parameters, and then create/get the corresponding quote template XML flow to use to initialize the quote UI. This connector must implement the interface com.accesscommerce.cart.connector.CartLogin.
Step2: Deploy this page into target CPQ JBOSS classpath.
Step3: In parameterization file Cart.cfg, find the property connector.CartLogin.class and replace the value by the package and name of your custom CartLogin implementation.
Step 4: Call the URL: http://...cart/cartLogin.do?az=-.cart1_1&… You should be redirected to the quote UI.
Process Overview
HOW TO CALL A SMART CPQ TOUCHTABLET FROM SFDC?
CPQ managed package embeds a specific field allowing to easily call the Smart CPQ native application.
CameleonCPQ CameleonTouch c
This field builds an URL allowing to call Smart CPQ either from an internal user environment of from a customer community e.g.:
camtouch://?
az=<cartPK>
&ev=<SFDCSessionToken>
&url=<SFDCEnterprise_Server_URL_280>
&cameleonUrl=<CameleonCPQ CPQServer_EndpointURL>
The following parameters are useless when using the SFDC implementation.
- dw - gives the name of the file to open the quote
- by - corresponds to CPQ WS login
- cx - corresponds to CPQ WS password
- fu - corresponds to the host user
The following parameters are defaulted:
- device =Ipad
- bizapp =TouchTablet
SFDC Connector specificities
By default, CPQ package include an implementation of
the com.accesscommerce.cart.connector.CartLogin connector that allows calling the TouchTablet business application
By calling the URL mentioned above, the connector performs the following operations.
Step1: Retrieves the Salesforce Instance ID and checks the validity of the session token
Step2: Builds XML flow to init the quote session (by calling a WS of the managed package which retrieves the SFDC user context (leveraging the custom settings and mappingIN)).
This XML flow also contains the information necessary to
- Call SFDC web service for the synchronization process
- Call SFDC error page if needed
- Identify where to redirect the user as soon as the synchronization is finished (SFDC Return URL)
- Identify the Community Name
Step3: The connector also computes the “exitUrl” which is used to redirect the user outside Smart CPQ app as soon as the synchronization is finished. This exitUrl is built from the “SFDC Return URL” and depending if the user has launched the application from a Community or not.
How to use CPQ Web Service for additional operations?
CONCEPT
In order to ease integration, additional entry points allowing the access to CPQ without UI interaction are provided and detailed in the sections below.
HOW TO GET AN EXISTING QUOTE?
The CPQ Web Service method getCart returns an XML representation of a quote. Input parameter:
- QuoteKeyType corresponding to the quote Primary Key (domainId,cartId,cartRelease).
An additional parameter allows to apply filters on the returned XML flow:
- EXCLUDE_HEADER excludes the header from the output
- EXCLUDE_LINES excluded the lines from the output
- EXCLUDE_SUBLINES excludes the sublines from the output
- EXCLUDE_EVENT_HISTORY excludes the event history from the output
- EXCLUDE_CONF_DATA excludes the XML configuration details for lines associated with product configurations.
For more details on input/output XML flows, please consult CPQ Web Service Javadoc.
Example:
A client instance can be created and the target point must be defined with the correct CPQ URL:
Then a request parameter has to be set:
With a quote PK:
And optionally some filters:
The execution of the method returns an XML:
HOW TO GET THE LIST OF EXISTING QUOTES?
The web service method getQuoteList returns the list of all the existing quotes.
Optional parameters allow to apply filters on the targeted quotes. A filter is a QueryCriterionType made with:
an alias to be chosen among the following list:
- QUOTE_DOMAIN
- ** QUOTE_ID**
- ** QUOTE_RELEASE**
- ** MODEL_ID**
- ** MODEL_RELEASE**
- ** CREATED_BY_USER**
- ** CREATED_BY_GROUP**
- ** CREATED_DATE**
- ** UPDATED_BY_USER**
- ** UPDATED_BY_GROUP**
- ** UPDATED_DATE**
- ** OWNER_USER**
- ** OWNER_GROUP**
- ** OWNER_DATE**
- ** ACTIVE_FLAG**
- ** ACTIVE_DATE**
- ** STATUS**
- ** STATUS_DATE**
- ** DESCRIPTION**
- ** CUSTOMER_ID**
- ** LEAD_ID**
- ** CURRENCY_ID**
- ** LANGUAGE_ID**
- ** PRICE_LIST_ID**
- ** PRICE_APPLY_DATE**
- ** ORDER_ID**
an operator to be chosen among the following list:
- ** =**
- ** <**
- ** <=**
- ** >**
- ** >=**
- ** LIKE**
constant value
For more details on input/output XML flows, please consult CPQ Web Service Javadoc.
Example:
Step 1: A client instance is created and the target point is defined with the correct CPQ URL:
Step 2: Input parameters are set:
With optionally some filters:
Step 3: the execution of the method returns a list of records
HOW TO GET THE LIST OF RELEASES FOR A GIVEN QUOTE?
The web service method getQuoteReleaseList returns the release list associated to a given quote.
As parameter, this method takes a XML flow containing the search criteria as well as the definition of quote header fields using the following format:
<cartReleaseListRequest cartDomainId='' cartId='' modelName='' modelRelease=''
includeMetaData='' formatValues='' language='' >
<field id='ParameterTab.ReleaseNumber' />
<field id='ParameterTab.QuoteDescription' />
...
</cartReleaseListRequest>
Where:
- cartDomainId defines a search criteria to apply on the domain id.
- cartId defines a search criteria to apply on the quote id
- modelName defines a search criteria on the quote model to apply
- includeMetaData (YES/NO) defines whether the labels of the header fields must be output or not
- formatValues (YES/NO) defines whether the values of the header fields must be formatted or not
- language defines the output language of the header field labels.
The result is also an XML flow containing the retrieved quote releases using the following format:
<releasesList cartDomainId='' cartId='' modelName='' modelRelease='' includeMetaData=''
language='' >
<fields>
<field id='ParameterTab.ReleaseNumber'>Number of Release</field>
<field id='ParameterTab.QuoteDescription'>Description</field>
...
</fields>
<release number='1'>
<field id='ParameterTab.ReleaseNumber' value='1'/>
<field id='ParameterTab.QuoteDescription' value='Quote A'/>
...
</release>
<release number='2'>
<field id='ParameterTab.ReleaseNumber' value='2'/>
<field id='ParameterTab.QuoteDescription' value='Quote A (bis)'/>
...
</release>
...
</releasesList>
For more details on input/output XML flows, please consult CPQ Web Service Javadoc.
Example:
Step 1: A client instance is created and the target point is defined with the correct CPQ URL
Step 2: Input XML parameter is set
Step 3: The execution of the method returns an XML to be parsed.
HOW TO DELETE A QUOTE RELEASE?
The web service method runUI called with the operation deleteRelease defined in its XML initialization flow performs the deletion of a given quote release.
Example:
Step 1: A client instance is created and the target point is defined with the correct CPQ URL:
Step 2: Input XML parameter is set
In this XML initialization flow, the operation type deleteRelease is set with the targeted quote identifiers (cartDomainId, cartId and cartRelease):
Step 3: The runUI action is executed
For more details on the XML initialization flow, please refer to the CPQ Web Service Javadoc.
HOW TO DELETE ALL QUOTE RELEASES?
The web service method runUI called with the operation deleteAllReleases defined in its XML initialization flow performs the deletion of all releases of a given quote.
Example:
Step 1: A client instance is created and the target point is defined with the correct CPQ URL:
Step 2: Input XML parameter is set
In this XML initialization flow, the operation type deleteAllReleases is set with the targeted quote
identifiers (cartDomainId, cartId):
Step 3: The runUI action is executed
For more details on the XML initialization flow, please refer to the CPQ Web Service Javadoc.
HOW TO PERFORM A COPY OF A QUOTE?
The web service method runUI called with the operation copyCart defined in its XML initialization flow performs the copy of all releases belonging to a given quote.
Example:
Step 1: A client instance is created and the target point is defined with the correct CPQ URL:\
Step 2: Input XML parameter is set
In this XML initialization flow, the operation type copyCart is set with the source quote identifiers
(cartDomainId, cartId) as well as the new quote identifier (targetCartId):
Step 3: The runUI action is executed
For more details on the XML initialization flow, please refer to the CPQ Web Service Javadoc.
HOW TO COPY A GIVEN QUOTE RELEASE?
The web service method runUI called with the operation copyCartRelease defined in its XML initialization flow performs the copy of a given quote release.
Example:
Step 1: A client instance is created and the target point is defined with the correct CPQ URL:
Step 2: Input XML parameter is set
In this XML initialization flow, the operation type copyCartRelease is set with the source quote identifiers (cartDomainId, cartId, cartRelease) as well as the new quote identifier
(targetCartId):
Step 3: The runUI action is executed
For more details on the XML initialization flow, please refer to the CPQ Web Service Javadoc.
HOW TO EXECUTE STATELESS OPERATION ON A QUOTE?
The web service method runUI called with the operation openReleaseStateless defined in its XML initialization flow performs the execution of a stateless action on a given quote release.
The action must be defined as an automatic action in the quote model and associated with a trigger of type StatelessExecutionMode:
For more details on the automated actions, please consult Quote Designer And Customization Guide.
Example:
Step 1: A client instance is created and the target point is defined with the correct CPQ URL:
Step 2: Input XML parameter is set
In this XML initialization flow, the operation type openReleaseStateless is set with the targeted quote identifiers (cartDomainId, cartId, cartRelease) as well as the stateless action defined in section "initAction".
Step 3: The runUI action is executed
For more details on the XML initialization flow, please refer to the CPQ Web Service Javadoc.
How to use CPQ Stateful Web Service for additional operations?
CONCEPT
In order to ease integration, additional entry points allowing the access to CPQ without UI interactions are provided.
This web service is mainly used to manipulate data inside a quote.
These entry points are based on a session id, so the first action to execute is the initCart and the last is the closeCart. Between those two actions multiple interactions with the quote are possible to access to the content of the quote and/or modify this content.
Example of possible thread:
- initCart initializes a quote session and returns a session id.
- createFolder creates a folder into the current quote by using the session id
- addXML creates a line into the current quote and the previous folder by using the session id
- …
- closeCart closes the quote session
Note: In case of a direct or REST API integration with the Quote, the setup of the CPQ license counting is under the responsibility of the caller. It means that the settings required by CPQ to properly monitor the license usage have to be properly filled. The description of these settings is given in Appendix of the current document.
HOW TO USE IT?
For more details on the different methods available and what can be done thanks to the WS, please refer to the CPQ Stateful Web Service Javadoc.
How to share the quote content from the Configurator and Catalog modules?
Quote, Catalog and Configurator modules are closely integrated into CPQ. Thus, content of the Quote is accessible from the Catalog or the Configurator. And vice-versa the Quote could be updated according to returns coming from the Configurator and the Catalog.
These interactions are instantiated thanks to the use of settings: some input settings to feed the Configurator and the Catalog and some output settings to be returned to the Quote.
“CPE.Settings.Session.UseCurrentQuote” set to “false”
INPUT SETTINGS: FROM THE QUOTE TO THE CATALOG/CONFIGURATOR
The entire quote content is provided in order to be able to access to header information, total cells and lines content of the quote. The quote content will be provided as a serialized object setting.
| PARAMETER NAME | DESCRIPTION | DEFAULT VALUE |
|---|---|---|
| Settings | Set of the settings used to initialize the configuration | |
| Session | Defined settings in the Session section | |
| Serialized Java | ||
| "CPE.Settings.Session.currentQuote" | Object that contains the complete Quote object | "rO0ABXNyACdjb20uY2FtZWxlb24uY2FydC5le … 9xAH4AC3EAfgHhcHQABTE3LjY2eA==" |
| copy. |
This object is not intended to be used directly. It will be used automatically when accessing to the quote content through their CPEs.
The CPEs give access to the quote lines/sublines/folders according to two complementary approaches:
- A Structured breakdown of the data that copies the structure of the quote content
- A flat breakdown of the data, here all the lines of the quote, whatever their type is, are provided in a list.
The table below details the syntax of all available CPEs:
| PARAMETER NAME | DESCRIPTION | DEFAULT VALUE |
|---|---|---|
| Settings | Set of the settings used to initialize the configuration | |
| Application | The Application section of the settings still contains some settings related to the quote: first, attributes of the quote controller are still considered as application settings, secondly for compatibility reasons, quote header and footer data are maintained in the application settings in addition of the new section "currentQuote". | |
| "CPE.Settings.Session.Application.<attributeName>" | Gives access to the <attributeName> attribute of the quote controller. | |
| "CPE.Settings.Session.Application.<TabName>.<fieldName>" | Gives access to the field <fieldname> of the tab <TabName>. This CPE is totally equivalent to CPE.currentQuote.<TabName>.<fieldName>.value | |
| currentQuote | Content of the associated quote | |
| Global to the quote (header, footer, total) | ||
| "CPE.currentQuote.ParameterTab.<parameterId>.value" | Gives access to the value of elements defined in the parameters of the Quote. (e.g. parameterId could be QuoteId or CustomerId) | |
| "CPE.currentQuote.AddressTab.BillTo.ContactName.value" | Gives access to the value of elements defined in the "address" tab of the Quote. | |
| "CPE.currentQuote.TotalCells.<idTotalCell>.value" | Gives access to the value of elements defined in the Total cells of the Quote. | |
| "CPE.currentQuote.status.value" | Gives access to the current status of the Quote. | Draft / Needs_Review / In_Review… |
| "CPE.currentQuote.status.type" | Gives access to the current type of the Quote | Quote / To-Order / Order |
| Hierarchical access to the content of the quote | ||
| "CPE.currentQuote.folderCount" "CPE.currentQuote.Folder[<i>].folderCount" | Gives the number of folder in the current level. | |
| "CPE.currentQuote.lineCount" "CPE.currentQuote.Folder[<i>].lineCount" | Gives the number of lines in the current level. | |
| "CPE.currentQuote.Line[<i>].Line[<j>].rowNumber" | The predefined "rowNumber" field is defined on each element of the Quote CPE breakdown and corresponds to the identifier of this breakdown level within the "flat breakdown" of the Quote. | |
| "CPE.currentQuote.Folder[<i>].Line[<j>].ColumnA.value" | Access to the value of the column A in the Quote for the line 1 of the folder 1. | |
| "CPE.currentQuote.Line[<i>].Line[<j>].ColumnA.value" | Access to the value of the column A in the Quote for the (sub)line1 under the line 1. NB: as many levels of section Line as needed, according to the quote definition can be chained. | |
| "CPE.currentQuote.Line[<i>].name" | Each element of the hierarchy of the quote has a name | |
| "CPE.currentQuote.Line[<i>].type" | Gives the type of line (Quote types of lines) | CP7, CT7, etc… |
| "CPE.currentQuote.Line[<i>].descr" | Each element of the hierarchy of the quote has a description | |
| "CPE.currentQuote.Line[<i>].state.completed" | Each element of the hierarchy of the quote that corresponds to a root configurable product has a "completed state" (true if the line is a completed configuration). NB: this setting is of type boolean | |
| "CPE.currentQuote.Line[<i>].state.uncompleted" | Each element of the hierarchy of the quote that corresponds to a root configurable product has an "uncompleted state" (true if the line is a not completed configuration). NB: this setting is of type boolean | |
| "CPE.currentQuote.Line[<i>].state.onerror" | Each element of the hierarchy of the quote that corresponds to a root configurable product has an "onError state" (true if the line is a configuration with an error). NB: this setting is of type boolean | |
| "Flat" access to the content of the quote | ||
| "CPE.currentQuote.currentRowNumber" | This indicates if the configuration is a creation (in this case, currentRowNumber = -1) or the update of an existing row of the quote (in this case, currentRowNumber indicates the row identifier of the updated row). The row identifier can be accessed via CPE.currentQuote.Row[<i>].identifier | |
| "CPE.currentQuote.Row[<i>].<cartIdColumn>.value" | Access to the value of the <cartIdColumn> column in the quote for the first element (whatever the type of this element is: folder or line) of the quote. | |
| "CPE.currentQuote.Row[<i>].type" | Gives the type of line (Quote types of lines) | CP7, CT7, etc… |
| "CPE.currentQuote.Row[<i>].depth" | Gives the depth of the specified row. | |
| "CPE.currentQuote.Row[<i>].identifier" | Identifier of the quote row | |
| "CPE.currentQuote.Row[<i>].parentRowNumber" | This corresponds to the row identifier of the hierarchical parent of the specified row. | |
| "CPE.currentQuote.rowCount" | This setting gives the total number of rows in the quote. | |
| "CPE.currentQuote.Row[<i>].name" | Each row of the quote has a name | |
| "CPE.currentQuote.Row[<i>].descr" | Each row of the quote has a description | |
| "CPE.currentQuote.Row[<i>].state.completed" | Each row of the quote that corresponds to a root configurable product has a "completed state" (true if the line is a completed configuration). NB: this setting is of type boolean | |
| "CPE.currentQuote.Row[<i>].state.uncompleted" | Each row of the quote that corresponds to a root configurable product has an "uncompleted state" (true if the line is a not completed configuration). NB: this setting is of type boolean | |
| "CPE.currentQuote.Row[<i>].state.onerror" | Each row of the quote that corresponds to a root configurable product has an "onError state" (true if the line is a configuration with an error). NB: this setting is of type boolean |
CurrentQuote content optimization policy
The more elements are included in the CurrentQuote, the more sending it to the Catalog/Configurator takes time. One way to optimize this operation thus consists in reducing the size of the content in the CurrentQuote.
To reduce the size of this XML flow, a policy mechanism can be configured with the CPE.Settings.Session.UseCurrentQuote parameter.
This parameter can have several values: - true: the CurrentQuote object is sent by the Quote and refreshed by the Configurator/Catalog - false: the CurrentQuote object is not sent by the Quote and not refreshed by the Configurator/Catalog - custom: Allows to list precisely the content of the CurrentQuote
In the case of a custom policy, the inclusion of the following elements in the XML flow is (de)activable according to a Boolean:
- quoteHeader: inclusion of quote header data
- totalCells: inclusion of quote footer data
- productSublines: inclusion of SI/CP sublines
- quoteLines: inclusion of quote linesNote: By default, if the parameter is not filled, its boolean value will be equal to "true", meaning that the element (quote header, etc.) IS INCLUDED in the XML flow
The following parameter allows to select the quote column(s) to include in the XML flow. All other columns are ignored:
- columnName: the separator used between column names is "
~"Note: By default, if the parameter is not filled, all the columns are included in the XML flow.
For instance, the syntax of this policy mechanism can be configured as follows:
- True value:
<cam:Param cpe="CPE.Settings.Session.UseCurrentQuote"value="true" /> - False value:
<cam:Param cpe="CPE.Settings.Session.UseCurrentQuote"value="false" /> - Custom value:
<cam:Param cpe="CPE.Settings.Session.UseCurrentQuote"value="custom;quoteHeader=true;totalCells=true;quoteLines=true;productSublines=true;columnName=ItemQty~ListPrice~TotalListPr ice" />
OUTPUT SETTINGS: FROM THE CATALOG/CONFIGURATOR TO THE QUOTE
Settings coming from the Quote can naturally be updated during the configuration (or during the Catalog navigation session thanks to the Guided Selling process): this could be done through the call of the setSetting action in BRCs of type macro for instance.
When positioning new values on settings, these new values are automatically sent to the Quote so that cells of the Quote are themselves updated with these values.
These updates are applied by the add_to_cart action, just before adding or updating the line itself (i.e. updating the XML of the configured product of the line).
Here is the sequence of events that will be executed by the add_to_cart:
- All the setSettings regarding the header are executed, then a propagation phase on the quote is done
- All the setSettings regarding the spreadsheet cells are executed, then a propagation phase on the quote is done
- All the setSettings regarding the Totals/footer cells are executed, then a propagation phase on the quote is done
- Finally, occurs the adding/updating of the line itself.
EXAMPLE OF GENERATED XML FLOW BETWEEN THE CONFIGURATOR AND THE QUOTE
<conf:ConfigurationTree xmlns:conf="com.cameleon.business.xml.configurationTree-7.1.0.0"
xmlns:cam="com.cameleon.business.xml.settingsTree-7.1.0.0">
<conf:SavingPolicy configurationDetails="true" domainDetails="false" generativeProcess="true" manufacturing="false"
</conf:SavingPolicy>
<conf:Settings>
<cam:User xmlns:cam="com.cameleon.business.xml.settingsTree-7.1.0.0">
<cam:Param cpe="CPE.Settings.User.Identifier" value="smartin"/>
<cam:Param cpe="CPE.Settings.User.Language" value="fr"/>
<cam:Param cpe="CPE.Settings.User.DefaultLanguage" value="fr"/>
<cam:Param cpe="CPE.Settings.User.Currency" value="EUR"/>
<cam:Param cpe="CPE.Settings.User.CurrencySymbol" value="€"/>
<cam:Param cpe="CPE.Settings.User.MonetaryFormat" value="#,##0.00 ¤"/>
<cam:Param cpe="CPE.Settings.User.NumericFormat" value="#,##0.###"/>
<cam:Param cpe="CPE.Settings.User.IntegerFormat" value="#,##0"/>
<cam:Param cpe="CPE.Settings.User.TimeZone" value="GMT"/>
<cam:Param cpe="CPE.Settings.User.LongDateFormat" value="dd/MM/yyyy HH:mm"/>
<cam:Param cpe="CPE.Settings.User.ShortDateFormat" value="dd/MM/yyyy"/>
<cam:Param cpe="CPE.Settings.User.Country" value="FR"/>
</cam:User>
<cam:HostingApplication xmlns:cam="com.cameleon.business.xml.settingsTree-7.1.0.0">
<cam:Param cpe="CPE.Settings.Application.Name" value="CEQ"/>
</cam:HostingApplication>
<cam:Session xmlns:cam="com.cameleon.business.xml.settingsTree-7.1.0.0">
<cam:Param cpe="CPE.Settings.Session.ModelVersion" value="WORKING"/>
<cam:Param cpe="CPE.Settings.Session.ApplicationDate" value="2013-04-26T10:42:35.804+02:00"/>
<cam:Param cpe="CPE.Settings.Session.Workspace" value="wksMABC"/>
<cam:Param cpe="CPE.Settings.Session.CPName" value="CPTopSante"/>
<cam:Param cpe="CPE.Settings.Session.Qty" value="1.0"/>
<cam:Param cpe="CPE.Settings.Session.AllowIncompleteSave" value="true"/>
<cam:Param cpe="CPE.Settings.Session.Language" value="fr"/>
<cam:Param cpe="CPE.Settings.Session.DefaultLanguage" value="fr"/>
<cam:Param cpe="CPE.Settings.Session.Currency" value="EUR"/>
<cam:Param cpe="CPE.Settings.Session.CurrencySymbol" value="€"/>
<cam:Param cpe="CPE.Settings.Session.MonetaryFormat" value="#,##0.00 ¤"/>
<cam:Param cpe="CPE.Settings.Session.NumericFormat" value="#,##0.###"/>
<cam:Param cpe="CPE.Settings.Session.IntegerFormat" value="#,##0"/>
<cam:Param cpe="CPE.Settings.Session.TimeZone" value="GMT"/>
<cam:Param cpe="CPE.Settings.Session.LongDateFormat" value="dd/MM/yyyy HH:mm"/>
<cam:Param cpe="CPE.Settings.Session.ShortDateFormat" value="dd/MM/yyyy"/>
<cam:Param cpe="CPE.Settings.Session.Country" value="FR"/>
<cam:Param cpe="CPE.Settings.Session.SavingPolicy"
value="Custom;configurationDetails=true;domainDetails=false;generativeProcess=true;m anufacturing=false;
productLinkType=Breakdown~frais_medicaux~dentaire~optique~hospi~prevention;svgDepth
=0"/>
<cam:Param cpe="CPE.Settings.Session.SalesMethodName" value="smDefault"/>
<cam:Param cpe="CPE.Settings.Session.rootCL" value="wksMABC/CL/CTOffreMABC"/>
<cam:Param cpe="CPE.Settings.Session.AllowIncompleteSave" value="true"/>
<cam:Param cpe="CPE.Settings.Session.Application.Address" value="25-27 rue du prince Albert - Appt n°17
- 31000 Toulouse"/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.Address1" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.Address2" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.Address3" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.City" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.ContactName"
value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.CustomerId" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.CustomerName" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.Language" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.Phone" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.State" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.ZipCode" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.BillTo.eMail" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.Address1" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.Address2" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.Address3" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.City" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.ContactName" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.CustomerId" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.CustomerName" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.Language" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.Phone" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.State" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.ZipCode" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.ShipTo.eMail" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.Address1" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.Address2" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.Address3" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.City" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.ContactName" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.CustomerId" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.CustomerName" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.Language" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.Phone" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.State" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.ZipCode" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.AddressTab.SoldTo.eMail" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.BankHolder" value="MAXIME LEGRAND"/>
<cam:Param cpe="CPE.Settings.Session.Application.BankInfo" value="SWIFT:LCLFRZZ999 Etab:12345
Guichet:00123 Compte:12345678901 Rib:12"/>
<cam:Param cpe="CPE.Settings.Session.Application.Birthdate" value="1970-03-27"/>
<cam:Param cpe="CPE.Settings.Session.Application.CartInfoTab.ContractDate"
value="20130424"/>
<cam:Param cpe="CPE.Settings.Session.Application.CartInfoTab.InfoSante" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.CartInfoTab.InvoiceMode" value="Quarter;Trimestriel"/>
<cam:Param cpe="CPE.Settings.Session.Application.CartInfoTab.QuoteStatus" value="Complete"/>
<cam:Param cpe="CPE.Settings.Session.Application.CartInfoTab.UserId" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.CartInfoTab.UserName" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.CreateDate"
type="java.util.Date" value="2013-04-24T18:53:32.976+02:00"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.CurrentActiveRelease"
type="java.lang.Double" value="1.0"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.CurrentOwnerGroup"
value="Sales"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.CurrentOwnerId"
value="sdujardin"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.CurrentOwnerName"
value="Sandrine Dujardin"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.CurrentStatus" value="Draft"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.DateActiveRelease"
type="java.util.Date" value="2013-04-24T18:53:32.976+02:00"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.DateOwner"
type="java.util.Date" value="2013-04-24T18:53:32.976+02:00"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.DateStatus"
type="java.util.Date" value="2013-04-24T18:53:32.976+02:00"/>
<cam:Param
cpe="CPE.Settings.Session.Application.ChangeAndControlTab.LastUpdateDate"
type="java.util.Date" value="2013-04-25T20:11:45.976+02:00"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.LastUserUpdateGroup"
value="Sales"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.LastUserUpdateId"
value="smartin"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.LastUserUpdateName"
value="Sandrine Dujardin"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.UserCreateGroup"
value="Sales"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.UserCreateId" value="smartin"/>
<cam:Param cpe="CPE.Settings.Session.Application.ChangeAndControlTab.UserCreateName"
value="Sandrine Dujardin"/>
<cam:Param cpe="CPE.Settings.Session.Application.Civility" value="Mr"/>
<cam:Param cpe="CPE.Settings.Session.Application.Contract[1].Name" value="Contrat MABC Logement"/>
<cam:Param cpe="CPE.Settings.Session.Application.Contract[1].Price" value="15
€/mois"/>
<cam:Param cpe="CPE.Settings.Session.Application.Contract[2].Name" value="Contrat MABC Auto"/>
<cam:Param cpe="CPE.Settings.Session.Application.Contract[2].Price" value="75
€/mois"/>
<cam:Param cpe="CPE.Settings.Session.Application.CustomerID" value="ADH20129876"/>
<cam:Param cpe="CPE.Settings.Session.Application.FirstName" value="Maxime"/>
<cam:Param cpe="CPE.Settings.Session.Application.Gender" value="MALE"/>
<cam:Param cpe="CPE.Settings.Session.Application.LastName" value="Legrand"/>
<cam:Param cpe="CPE.Settings.Session.Application.OrderInfoTab.OrderId"
value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.OwnerGroup" value="Sales"/>
<cam:Param cpe="CPE.Settings.Session.Application.OwnerId" value="sdujardin"/>
<cam:Param cpe="CPE.Settings.Session.Application.OwnerName" value="Sandrine Dujardin"/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.AdvPriceList" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.Currency" value="EUR"/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.CustomerId" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.DomainId" value="-"/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.Language" value="FR"/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.LeadId" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.PartnerCode" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.PriceList" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.QuoteDescription" value="mon devis
mabc"/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.QuoteId" value="DemoMABCFR"/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.ReleaseNumber" type="java.lang.Double"
value="1.0"/>
<cam:Param cpe="CPE.Settings.Session.Application.ParameterTab.UserCode" value=""/>
<cam:Param cpe="CPE.Settings.Session.Application.QuoteStatus" value="Draft"/>
<cam:Param cpe="CPE.Settings.Session.Application.RegimeAssurance" value="RSS"/>
<cam:Param cpe="CPE.Settings.Session.Application.ServiceId" value="Catalog_MABC"/>
<cam:Param cpe="CPE.Settings.Session.Application.Status" value="Particulier"/>
<cam:Param cpe="CPE.Settings.Session.Application.TCAnnualPrice" type="java.lang.Double"
value="211.92"/>
<cam:Param cpe="CPE.Settings.Session.Application.TCMngFee" type="java.lang.Double" value="9.9"/>
<cam:Param cpe="CPE.Settings.Session.Application.TCMonthlyPrice" type="java.lang.Double"
value="17.66"/>
<cam:Param cpe="CPE.Settings.Session.Application.TCPromo1M" type="java.lang.Double" value="-46.08"/>
<cam:Param cpe="CPE.Settings.Session.Application.componentSettingsId"
value="ct7_6CF45B89B31F0D4CF94E5AFDF32F6A65"/>
<cam:Param cpe="CPE.Settings.Session.CPE.Settings.Session.currentQuote"
value="rO0ABXNyACdjb20uY2FtZWxlb24 … AC3EAfgHhcHQABTE3LjY2eA=="/>
<cam:Param cpe="CPE.Settings.Session.CPName" value="CPTopSante"/>
<cam:Param cpe="CPE.Settings.Session.Cart.Domain" value=""/>
<cam:Param cpe="CPE.Settings.Session.Cart.ModelName" value=""/>
<cam:Param cpe="CPE.Settings.Session.Cart.ModelVersion" value=""/>
<cam:Param cpe="CPE.Settings.Session.Cart.Name" value="MyCart"/>
<cam:Param cpe="CPE.Settings.Session.Cart.Version" value=""/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.Birthdate" value="1970-03-27"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.Civility" value="Mr"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.Contract[1].Name" value="Contrat MABC Logement"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.Contract[1].Price" value="15 €/mois"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.Contract[2].Name" value="Contrat MABC Auto"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.Contract[2].Price" value="75 €/mois"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.CustomerID" value="ADH20129876"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.FirstName" value="Maxime"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.Gender" value="MALE"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.LastName" value="Legrand"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.RegimeAss" value="Régime Sécurité sociale"/>
<cam:Param cpe="CPE.Settings.Session.Catalog.Context.Status" value="Particulier"/>
<cam:Param cpe="CPE.Settings.Session.MySpecialSetting" type="java.lang.Boolean" value="false"/>
<cam:Param cpe="CPE.Settings.Session.PricingMethod[1]" type="com.cameleon.framework.business.basic.PK"
value="wksMABC/PRGM/pmDefault"/>
<cam:Param cpe="CPE.Settings.Session.Qty" value="1"/>
<cam:Param cpe="CPE.Settings.Session.RefSI" value="wksMABC/SI/siOffre1_TopSante"/>
<cam:Param cpe="CPE.Settings.Session.SalesMethodName" value="smDefault"/>
<cam:Param cpe="CPE.Settings.Session.Workspace" value="wksMABC"/>
<cam:Param cpe="CPE.Settings.Session.currentQuote" type="com.cameleon.cart.exchange.CurrentQuote" value="-
"/>
<cam:Param cpe="CPE.Settings.Session.device" value="CONFUI"/>
<cam:Param cpe="CPE.Settings.Session.rootCL" value="wksMABC/CL/CTOffreMABC"/>
</cam:Session>
<cam:Server xmlns:cam="com.cameleon.business.xml.settingsTree-7.1.0.0"> …
</cam:Server>
</conf:Settings>
<conf:ConfigurableProduct cpe="CPE.wksMABC/CP/CPTopSante" name="CPTopSante" wks="wksMABC"> …
</conf:ConfigurableProduct>
<conf:ProductDictionary> … </conf:ProductDictionary>
</conf:ConfigurationTree>
