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:
It also includes a call to act regarding the following potentially incompatible change:
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.
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:
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.
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.
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.
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.
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.
New switches will be introduced to the administration UI:
Extensions in Administration UI
If such switches are activated,
Note: This feature will be available for non-productive tenants only.
More details will be published in the Administration Guide.
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.
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:
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.
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.