S/4HANA オンプレミス システム (1909) で価格を更新するためのカスタム OData サービス (関数のインポート) があります。そして、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) は null です。
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","プラント":" ","MaterialNumber":"***","ConditionAmount":"123.000","ConditionUnit":"EUR","ValidFrom":"/Date(1546346659000)/ ","有効期限":"/日付(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
ありがとう、ジェリー