CRM and CX Blogs by SAP
Stay up-to-date on the latest developments and product news about intelligent customer experience and CRM technologies through blog posts from SAP experts.
cancel
Showing results for 
Search instead for 
Did you mean: 
Michael_W
Product and Topic Expert
Product and Topic Expert
The 2402 release of SAP Variant Configuration and Pricing is planned to be deployed to BTP customer tenants on January 31.

This blog covers the following planned innovations:

  • Variant Configuration service – No Characteristic Details for Non-configurable Products

  • Variant Configuration service – Correct Sort Order of Variant Table Entries

  • Pricing service – Return Condition Scales in Document Pricing

  • Pricing service – Return Used Currency Exchange Rates

  • Extension Concept – Distinct Selects to Database Tables for Local Extensions

  • Extension Concept – Variant Table Access for Local Extensions

  • Extension Concept – Skip Pricing Extension Implementations

  • Extension Concept – Export/Import of Custom Table Selection for Local Extensions

  • SAP Cloud ALM Integration for Performance Monitoring

  • Administration – Several Improvements for Connect to SAP Cloud


It also includes a call to act regarding the following potentially incompatible change:

  • Variant Configuration service – No Characteristic Details for Non-configurable Products


Please check the updated roadmap and release notes after the release date to see which of those features could be delivered as planned.

 

Disclaimer

The information in this presentation is confidential and proprietary to SAP and may not be disclosed without the permission of SAP.
Except for your obligation to protect confidential information, this presentation is not subject to your license agreement or any other service or subscription agreement with SAP. SAP has no obligation to pursue any course of business outlined in this presentation or any related document, or to develop or release any functionality mentioned therein.

This presentation, or any related document and SAP's strategy and possible future developments, products and or platforms directions and functionality are all subject to change and may be changed by SAP at any time for any reason without notice. The information in this presentation is not a commitment, promise or legal obligation to deliver any material, code or functionality.  This presentation is provided without a warranty of any kind, either express or implied, including but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. This presentation is for informational purposes and may not be incorporated into a contract. SAP assumes no responsibility for errors or omissions in this presentation, except if such damages were caused by SAP’s intentional or gross negligence.

All forward-looking statements are subject to various risks and uncertainties that could cause actual results to differ materially from expectations. Readers are cautioned not to place undue reliance on these forward-looking statements, which speak only as of their dates,
and they should not be relied upon in making purchasing decisions.

 

 

Variant Configuration service – No Characteristic Details for Non-configurable Products


Materials can be classified in the back end. That means that a class is assigned to the material and that values are set for the characteristics of the class of that material to define the properties of said material.

Such a class can be added to the bill-of-material of another material as a placeholder; and then during the product configuration, the class node is replaced by the desired material through a search for the matching classified material based on the current selection of characteristic values in the configuration. See also Defining Classes as BOM Items | SAP Help Portal.

Variant Configuration service used to return characteristic selections for non-configurable products which were classified (class types 200 and 300). This used to lead to issues in calling applications like SAP CPQ when they tried to send the configuration results to SAP ERP or SAP S/4HANA, because non-configurable materials must not carry any configuration results.

This issue will be corrected; the characteristic assignments will no longer be returned in the knowledge base, nor during the interactive configuration.

Actions:

  • Check and adapt your implementation if your application relies on characteristic value assignments from material classification returned for non-configurable products. Material classifications are not to be received from the Variant Configuration service but must be replicated with the material master.

  • If you had to filter those characteristics in the past to send configuration results successfully to the back end, this will not be necessary anymore from our 2402 release on.


 

Variant Configuration service – Correct Sort Order of Variant Table Entries


Endpoint GET /api/v2/knowledgebases/{kbId}/variantTables/{variantTableId} used to return variant table content in a different order than known from back-end transactions CU60 or PMEVC. This issue will be corrected.

 

Pricing service – Return Condition Scales in Document Pricing


When creating condition records in the back end, scales can be maintained:


Scales in VK11/12/13


In this example the price is 3,98EUR per CPS_BURGER for item quantities 1 – 4 and 3,22EUR for item quantities >= 5.

Pricing service determines the right scale value, uses it for price calculation and returns the corresponding price, discount, or surcharge. For example, lower prices are used for higher item quantities.

With a new $select request parameter value it will be possible to get all scale values returned:


Parameter $select


Example response with new response structure scale:
      "conditions": [
{
"id": "516399bc-521f-4eb1-bd92-2f7ad5f8285e",
"stepNumber": 11,
"counter": 1,
"conditionTypeId": "PR00",
"conditionTypeName": "Price",
"base": "1.000",
"rate": {
"value": "3.98",
"unit": "EUR"
},
"rateQuantity": {
"value": 1,
"unit": "PCE"
},
"value": "3.98",
"statistical": false,
"origin": "A",
"control": "A",
"calculationType": "C",
"roundingDifference": 0,
"inactiveFlag": " ",
"isVariantCondition": false,
"changedManually": false,
"changeOfRateAllowed": true,
"changeOfValueAllowed": true,
"changeOfCalculationTypeAllowed": true,
"deletionAllowed": true,
"purpose": "BASE",
"rateConverted": {
"value": "3.98",
"unit": "EUR"
},
"scale": {
"scaleType": "A",
"scaleBaseType": "C",
"scaleOrder": "A",
"rateQuantity": {
"value": 1,
"unit": "PCE"
},
"scaleUnit": "PCE",
"levels": [
{
"id": 1,
"scaleValue": "1.000",
"scaleRate": {
"value": "3.98",
"unit": "EUR"
},
"scaleRateConverted": {
"value": "3.98",
"unit": "EUR"
}
},
{
"id": 4,
"scaleValue": "5.000",
"scaleRate": {
"value": "3.22",
"unit": "EUR"
},
"scaleRateConverted": {
"value": "3.22",
"unit": "EUR"
}
}
]
}
},

With that, the calling application could for example tell the user: if you buy certain higher quantity, you will get a certain better price.

More details will be published in the API Definition and the Development Guide.

 

Pricing service – Return Used Currency Exchange Rates


In price calculations, currency conversion happens, for example, when the condition rate currency is different to the document currency. The condition value is always returned in document currency.

The pricing engine tries to convert condition record currency to document currency. We are talking about direct conversion in that case. If no exchange rate was maintained for those currencies, the pricing engine tries to convert the condition record currency first to local currency before it is converted to document currency. We are talking about triangular conversion.

With a new request parameter value “$select=items-currencyConversions” for document pricing and stateless pricing, it will be possible to get the used currency conversion rates returned:


Parameter $select


Response:

New field currencyConversionId for returned item conditions:


currencyConversionId


Which refers to the corresponding id in new item structure currencyConversions:


Response structure currencyConversion


Example response:
      "conditions": [
{
"stepNo": 910,
"conditionCounter": 1,
"conditionType": "ZEDI",
"conditionTypeDescription": "Flat 2 USD discount.",
"purpose": null,
"conditionBase": "6.47",
"conditionRate": "-2.00",
"conditionCurrency": "USD",
"conditionUnitValue": null,
"conditionUnit": null,
"conditionValue": "-1.89",
"statistical": false,
"calculationType": "B",
"varcond": false,
"varcondKey": null,
"varcondFactor": null,
"durationFactor": null,
"inactiveFlag": " ",
"conditionRateConverted": "-1.89",
"currencyConversionId": 1
}
],

"currencyConversions": [
{
"id": 1,
"triangularConversion": true,
"conditionCurrencyToLocalCurrency": {
"exchangeRateType": "EURX",
"fromCurrency": "USD",
"fromFactor": 1,
"toCurrency": "EUR",
"toFactor": 1,
"validFromDate": "2017-01-16",
"exchangeRate": "-1.05935000000",
"conversionDate": "2018-05-04"
},
"localCurrencyToDocumentCurrency": {
"exchangeRateType": "M",
"fromCurrency": "EUR",
"fromFactor": 1,
"toCurrency": "EUR",
"toFactor": 1,
"exchangeRate": "1.00000000000"
}
}
],

This will allow the calling application to do its own calculations in the same way.

More details will be published in the API Definition and the Development Guide.

 

Extension Concept – Distinct Selects to Database Tables for Local Extensions


New syntax ‘select distinct’ to access replicated database tables from uploaded JavaScript functions in pricing and configuration to only receive distinct (different) values

The function select() of interface sap.db() will be enhanced to support the action “distinct“.

Example: Checking number of distinct knowledge-base objects that are valid from a certain date
var db = sap.db();
var log = sap.log();

var select = db.select()
.distinct()
.columns("KBOBJNAME")
.from("COMM_CFGKB")
.where(db.gt("FROMDATE", db.date("2023-06-27")))
.build();

var dbResult = db.execute(select);
var rowCount = dbResult.getRowCount();

log.debug("result rows: " + rowCount);

Using the “distinct” modifier above, knowledge bases with the same name (COMM_CFGKB-KBOBJNAME) but different versions (COMM_CFGKB-VERSION) are only counted once.

More details will be published in the Extension Guide.

 

Extension Concept – Variant Table Access for Local Extensions


New syntax to access replicated variant tables from uploaded JavaScript functions independent of the different formats in which the tables are stored by the knowledge-base generation.

New interface sap.cfg().vt() will be introduced with the function “execute(select)”, where a select statement, constructed via the “sap.db()” interface, can be executed against a variant table. Instead of using the database table name and database table column names, the select query would consist of variant table name, characteristic names, and characteristic values.

Consider the following variant table “VT_HOPPER_HEAT” for the sample material “CPS_DRYING_HOPPER”. For the purposes of this example, it has only simple value cells:


Example Variant Table Content


It can be read in local extensions as follows:
var db = sap.db();
var vt = sap.cfg().vt();
var log = sap.log();

var select = db.select()
.from("VT_HOPPER_HEAT")
.where(
db.and(
db.or(
db.eq("CPS_HEATPOWER_R", db.dbl(10.2)),
db.eq("CPS_HEATPOWER_R", db.dbl(4)),
),
db.or(
db.eq("CPS_HOPPER_CAPA_R", db.integer(500)),
db.eq("CPS_HOPPER_CAPA_R", db.integer(3000))
)
)
)
.build();

var dbResult = vt.execute(select);
var rowCount = dbResult.getRowCount();
var colCount = dbResult.getColumnCount();

log.debug("display VT with col / row: " + colCount + " / " + rowCount);
for (let row = 0; row < rowCount; row++) {
var rowForLog = "";
for (let col = 0; col < colCount; col++) {
var cell = dbResult.get(row, col);
rowForLog += "|" + cell.type() + " - " + cell.value() + "|";
}
log.debug(rowForLog);
}

This would yield the following log entry:


Example Results


The select query yields a result table of 5 rows and 3 columns, as expected considering the “VT_HOPPER_HEAT” table and the select constructed above.

 

The existing infrastructure to create general database queries can be used for querying variant tables. The constructed select statements need only be executed via the new “sap.cfg().vt().execute(select)” method, instead of the “sap.db().execute(select)” method.

Some additional restrictions and limitations apply regarding the permitted structure of the select statement.

The db result structure (in case of variant table read only) is more complex as well – instead of raw values, the “dbResult.get(i,j)” method now returns an intermediary object, with the “type()” and “value()” methods, where “type()” may return “VALUE” (as is the case in this example), or indicators for the other permitted cell types for variant tables. The actual value returned by the “value()” method will be adjusted accordingly.

 

Precise details on restrictions, meaning of “select” components and result structure in variant table reads will be published in the Extension Guide.

 

Extension Concept – Skip Pricing Extension Implementations


New switches will be introduced to the administration UI:

  • One to ignore all custom implementations

  • One to ignore those custom routines that were not yet implemented



Extensions in Administration UI


If such switches are activated,

  • custom requirements will be evaluated as true,

  • custom routines of other types will be skipped, and

  • the corresponding condition types will not get status 'inactive because of missing routine implementations'.


Note: This feature will be available for non-productive tenants only.

More details will be published in the Administration Guide.

 

Extension Concept – Export/Import of Custom Table Selection for Local Extensions


The list of custom tables, including their filter definitions, can now be exported and imported from one tenant to the other.

There is a new button ‘Export Custom Tables’ in Tables -> Replicated Tables:


New Export Button


There is a new button ‘Import Custom Tables’ in Tables -> Add Custom Tables:


New Import Button


More details will be published in the Administration Guide.

 

SAP Cloud ALM Integration for Performance Monitoring


Configuration and pricing services will report aspects related to performance monitoring to the central monitoring and alerting tool in SAP Cloud ALM for cloud-based application lifecycle management (ALM). The focus of performance monitoring is to monitor the following aspects:

  • Runtime of calls to individual endpoints of the Variant Configuration service

  • Runtime of calls to individual endpoints of the Pricing service



Real User Monitoring in SAP Cloud CALM


It will also be possible to see some details about Remote Extensions that are called during request processing of configuration or pricing service:


Remote Extensions Calls


It will also be possible to see some details about which calls are sent to Destination service and to SAP S/4HANA when AVC forwarding was activated:


AVC Forwarding


With that, customers can proactively detect problems regarding the end user performance, analyze issues, and react to them quickly and efficiently.

See also SAP Cloud ALM | SAP Help Portal.

More details will be published in the Administration Guide.

 

 

Administration – Several Improvements for Connect to SAP Cloud


The available SAP HANA smart data integration Data Provisioning Agents are now shown in a drop-down dialog, so that the names of the agents do not need to be copied anymore.


List of Data Provisioning Agents


Dropping the remote source will cancel the running replication tasks, so that the ‘drop’ task can be executed immediately.

The status of the file adapter remote source will be displayed, too.


File Adapter Status


Dropping the file adapter remote source will be supported, too.


File Adapter - Drop Remote Source


More details will be published in the Administration Guide.


 

With that, you have a good overview of what innovations are planned for the January release. Please check updated roadmap and release notes after the release date to see which of those features could be delivered as planned.