1

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

ありがとう、ジェリー

4

1 に答える 1