S/4HANA系统中的价格管理模块,包括价格主数据管理和定价信息管理。S/4HANA系统作为定价管理系统,外围的采购系统可以从S/4HANA系统中读取定价信息,并且可以创建,修改和删除价格主数据。

S/4HANA系统提供价格主数据OData服务API_SLSPRICINGCONDITIONRECORD_SRV,这个同步的主数据入站服务可以让用户获取,创建,更新和删除销售价格主数据。该OData服务包括销售中的定价记录,定价条件有效期,定价等级和定价补充。

定价数据集成场景配置

为了激活上述的OData服务,用户必须创建并激活通信场景SAP_COM_0294。

OData服务列表

OData服务操作

更新操作和创建操作不同,更新操作不支持纵深数据结构,只支持扁平数据结构,对于需要同时更新定价记录和定价条件有效期的可以通过批处理操作来完成。

更新操作只对部分开放字段有效,对于定价条件有效期,只有定价条件有效期开始日期,定价条件有效期结束日期支持更新。

对于定价记录,字段定价金额,定价排除,付款条件,固定起息日和附加起息日支持更新。

对于定价等级,字段数量等级,价值等级,金额支持更新。

对于定价补充,只有金额字段支持更新。

更新定价条件有效期

请求正文:更新定价条件有效期开始日期和结束日期
PATCH <host>/sap/opu/odata/SAP/API_SLSPRICINGCONDITIONRECORD_SRV/A_SlsPrcgCndnRecdValidity(ConditionRecord='0000027865',ConditionValidityEndDate=datetime'2022-11-30T00%3A00%3A00') X-CSRF-Token: abc Content-Type: application/json Accept: application/json If-Match: W/"'79BAD8181704F1D6E2223A60CE6FC0CBBE578E66'" { "ConditionValidityStartDate" : "2047-02-01T00:00:00", "ConditionValidityEndDate" : "2047-9-30T00:00:00" }


返回结果:
Status: 204 No Content dataserviceversion: 2.0

更新定价记录

请求正文:更新定价金额,付款条件和附加起息日
PATCH <host>/sap/opu/odata/SAP/API_SLSPRICINGCONDITIONRECORD_SRV/A_SlsPrcgConditionRecord('0000027867') X-CSRF-Token: abc Content-Type: application/json Accept: application/json If-Match: W/"'EA5821B048AB5145777D470A9E5BCC3797C11018'" { "ConditionRateValue" : "999.00", "ConditionRateValueUnit" : "EUR", "AdditionalValueDays" : "10", "PaymentTerms" : "0001" }


返回结果:
Status: 204 No Content dataserviceversion: 2.0

更新定价等级 - 数量类型

请求正文:更新等级数量和等级金额
PATCH <host>/sap/opu/odata/SAP/API_SLSPRICINGCONDITIONRECORD_SRV/A_SlsPrcgCndnRecordScale(ConditionRecord='0000027865',ConditionSequentialNumber='1',ConditionScaleLine='4') X-CSRF-Token: abc Content-Type: application/json Accept: application/json If-Match: W/"'2130C66D6F15C419F0994B2D05CCE6EC3E3F2C7C'" { "ConditionScaleQuantity" : "25", "ConditionRateValueUnit" : "EUR", "ConditionRateValue" : "333.33" }

返回结果:
Status: 204 No Content dataserviceversion: 2.0

更新定价等级 - 值类型

请求正文:更新等级值和等级金额
PATCH <host>/sap/opu/odata/sap/API_SLSPRICINGCONDITIONRECORD_SRV/A_SlsPrcgCndnRecordScale(ConditionRecord='0000068013',ConditionSequentialNumber='1',ConditionScaleLine='7') Content-Type: application/json Accept: application/json If-Match: W/"'5C3DAD50168B7DAB6E6C44228317BBAFD511EB2A'" { "ConditionScaleAmount" : "4000", "ConditionScaleAmountCurrency" : "EUR", "ConditionRateValue" : "333.33", "ConditionRateValueUnit" : "EUR" }

返回结果:
Status: 204 No Content dataserviceversion: 2.0

更新定价补充

请求正文:更新价格补充金额
PATCH <host>/sap/opu/odata/SAP/API_SLSPRICINGCONDITIONRECORD_SRV/A_SlsPrcgCndnRecdSuplmnt(ConditionRecord='0000061099',ConditionSequentialNumber='4') X-CSRF-Token: abc Content-Type: application/json Accept: application/json If-Match: W/"'30E33BFCAE6AA0B84F31FE3C612D26A0FC1BCF6D'" { "ConditionRateValue" : "8000", "ConditionRateValueUnit" : "JPY" }


返回结果:
Status: 204 No Content dataserviceversion: 2.0

批处理更新

请求正文:用批处理同时更新定价记录和对应的定价条件有效期
POST <host>/sap/opu/odata/sap/API_SLSPRICINGCONDITIONRECORD_SRV/$batch X-CSRF-Token: abc
Content-type:Multipart/mixed;boundary=batch --batch Content-Type: multipart/mixed; boundary=changeset --changeset Content-Type: application/http Content-Transfer-Encoding: binary PATCH A_SlsPrcgCndnRecdValidity(ConditionRecord='0000068013',ConditionValidityEndDate=datetime'9999-12-31T00%3A00%3A00') HTTP/1.1 Content-Type: application/json If-Match: W/"'3C7B20BD3183665B200940017C1E948205F04A09'" { "ConditionValidityStartDate" : "2055-10-01T00:00:00", "ConditionValidityEndDate" : "2055-10-30T00:00:00" } --changeset-- --batch Content-Type: multipart/mixed; boundary=changeset --changeset Content-Type: application/http Content-Transfer-Encoding: binary PATCH A_SlsPrcgConditionRecord('0000068013') HTTP/1.1 Content-Type: application/json If-Match: W/"'EFA2CB70489203861C00B818765BF8AD0FDD8F63'" { "ConditionRateValue" : "99.99", "ConditionRateValueUnit" : "EUR", "AdditionalValueDays" : "15", "PaymentTerms" : "0001" } --changeset-- --batch--

返回结果:
Status: 202 Accepted dataserviceversion: 2.0
--B9C9C566C935A32C487032E2B2DAECD50 Content-Type: multipart/mixed; boundary=B9C9C566C935A32C487032E2B2DAECD51 Content-Length: 238 --B9C9C566C935A32C487032E2B2DAECD51 Content-Type: application/http Content-Length: 71 content-transfer-encoding: binary HTTP/1.1 204 No Content Content-Length: 0 dataserviceversion: 2.0 --B9C9C566C935A32C487032E2B2DAECD51-- --B9C9C566C935A32C487032E2B2DAECD50 Content-Type: multipart/mixed; boundary=B9C9C566C935A32C487032E2B2DAECD51 Content-Length: 238 --B9C9C566C935A32C487032E2B2DAECD51 Content-Type: application/http Content-Length: 71 content-transfer-encoding: binary HTTP/1.1 204 No Content Content-Length: 0 dataserviceversion: 2.0 --B9C9C566C935A32C487032E2B2DAECD51-- --B9C9C566C935A32C487032E2B2DAECD50--


结语

上面列举了各种更新的例子,批处理操作中支持了各种复杂更新需求,用户可以根据业务需求来组合对应的请求。