1

我们有一个自定义 OData 服务(功能导入)来更新 S/4HANA 本地系统 (1909) 中的价格。我使用 Java VDM Generator 为这个 OData 服务生成 VDM。

OData 服务更新价格

/sap/opu/odata/SAP/ /ChangePrice?SalesOrganisation=' '&Plant=' '&MaterialNumber=' '&ConditionAmount=2100&ConditionUnit='EUR'&ValidFrom=datetime'2019-01-01T00:00:00'&ValidTo=datetime'2019 -12-31T00:00:00'

在我调用 changePrice 方法并在 S/4HANA 系统中更新价格但返回的实体 (priceCondUpdated) 为空之后。

        TransferPriceCondition priceCondUpdated = service.changePrice(condUnit, 
                                                   price,
                                                   materialNo,
                                                   plant,
                                                   LocalDateTime.of(2019, 1, 1, 0, 0, 0),
                                                   LocalDateTime.of(2019, 12, 31, 0, 0, 0),
                                                      salesOrg).execute(DestinationUtil.getHttpDestination());

我调试了 SAP Cloud SDK 的源代码,发现 OData 服务给出了正确的响应。

OData 响应

{"__metadata":{"id":" http://host:port/sap/opu/odata/sap/ /TransferPriceCondition(SalesOrganisation=' ',Plant=' ',MaterialNumber=' ')","uri" :" http://host:port/sap/opu/odata/sap/ /TransferPriceCondition(SalesOrganisation=' ',Plant=' ',MaterialNumber=' ')","type":" .TransferPriceCondition"},"SalesOrganisation ":"1709","Plant":" ","MaterialNumber":"***","ConditionAmount":"123.000","ConditionUnit":"EUR","ValidFrom":"/Date(1546346659000)/ ","ValidTo":"/日期(1577796259000)/"}

当它要从 SDK 中的响应中获取实体时,请参阅下面的源代码 responseJsonObject 不包含 edmFunctionImportName(changePrice)。所以它会返回null。

Cloud SDK 中 FunctionImportResponseParser.java 的源代码

@Nullable
<T> T getEntityFromResponse(
    final InputStream responseContent,
    final String edmFunctionImportName,
    final Class<? extends T> entityJavaType )
    throws IOException,
        IllegalArgumentException
{
    final JsonObject responseJsonObject = getJsonObjectFromResponse(responseContent);

    if( responseJsonObject.has(edmFunctionImportName) ) {
        final JsonElement jsonElement = responseJsonObject.get(edmFunctionImportName);
        return getEntityFromJsonElement(jsonElement, entityJavaType);
    }

    return null;
}

你能帮忙看看这个问题吗?

SAP Cloud SDK 版本:3.3.1 S/4HANA 内部部署:1909

谢谢,杰瑞

4

1 回答 1

2

感谢有据可查的问题!请使用SAP Cloud SDK 3.6.0 及更高版本。我们修复了 OData 函数导入结果的解析。

最好的问候,亚历山大

于 2019-11-11T13:38:54.760 回答