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.
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.
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:
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:
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:
Response:
New field currencyConversionId for returned item conditions:
Which refers to the corresponding id in new item structure currencyConversions:
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:
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:
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:
- One to ignore all custom implementations
- One to ignore those custom routines that were not yet implemented
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.
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:
There is a new button ‘Import Custom Tables’ in Tables -> Add Custom Tables:
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:
- Runtime of calls to individual endpoints of the Variant Configuration service
- Runtime of calls to individual endpoints of the Pricing service
It will also be possible to see some details about Remote Extensions that are called during request processing of configuration or pricing service:
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:
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.
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.
Dropping the file adapter remote source will be supported, too.
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.
Be the first to comment