我们有一个自定义 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
谢谢,杰瑞